ADD file via upload
This commit is contained in:
parent
90ea2e96df
commit
1e2c4b3195
|
@ -0,0 +1,216 @@
|
||||||
|
use criterion::{criterion_group, BenchmarkId, Criterion, Throughput};
|
||||||
|
use fse::{
|
||||||
|
db::Data,
|
||||||
|
fse::{exponential, BaseCrypto, Conn, PartitionFrequencySmoothing},
|
||||||
|
lpfse::{ContextLPFSE, EncoderBHE, EncoderIHBE},
|
||||||
|
native::ContextNative,
|
||||||
|
pfse::ContextPFSE,
|
||||||
|
util::read_csv_exact,
|
||||||
|
};
|
||||||
|
use rand::seq::SliceRandom;
|
||||||
|
use rand_core::OsRng;
|
||||||
|
|
||||||
|
const ADDRESS: &str = "mongodb://127.0.0.1:27017";
|
||||||
|
const DB_NAME: &str = "bench";
|
||||||
|
const DTE_COLLECTION: &str = "dte_collection";
|
||||||
|
const RND_COLLECTION: &str = "rnd_collection";
|
||||||
|
const PFSE_COLLECTION: &str = "pfse_collection";
|
||||||
|
const LPFSE_BHE_COLLECTION: &str = "lpfse_bhe_collection";
|
||||||
|
const LPFSE_IHBE_COLLECTION: &str = "lpfse_ihbe_collection";
|
||||||
|
|
||||||
|
//, pfse_bench_on_real, lpfse_ihbe_on_real, lpfse_bhe_on_real
|
||||||
|
criterion_group! {
|
||||||
|
name = fse_benches_insert_real;
|
||||||
|
config = Criterion::default().significance_level(0.1).sample_size(10);
|
||||||
|
targets = dte_bench_on_real, pfse_bench_on_real, lpfse_ihbe_bench_on_real,
|
||||||
|
lpfse_bhe_bench_on_real, rnd_bench_on_real
|
||||||
|
}
|
||||||
|
|
||||||
|
fn dte_bench_on_real(c: &mut Criterion) {
|
||||||
|
let mut vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
|
||||||
|
let mut group = c.benchmark_group("dte_insert_bench_on_real");
|
||||||
|
for size in [100, 1000, 10000, 100000, 1000000] {
|
||||||
|
let mut ctx = ContextNative::new(false);
|
||||||
|
let slice = &vec[..size];
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize_conn(ADDRESS, DB_NAME, true);
|
||||||
|
let ciphertexts = slice
|
||||||
|
.iter()
|
||||||
|
.map(|e| {
|
||||||
|
String::from_utf8(ctx.encrypt(e).unwrap().remove(0)).unwrap()
|
||||||
|
})
|
||||||
|
.enumerate()
|
||||||
|
.map(|(id, data)| Data { id, data })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
group.throughput(Throughput::Elements(size as u64));
|
||||||
|
group.bench_with_input(
|
||||||
|
BenchmarkId::from_parameter(size),
|
||||||
|
&size,
|
||||||
|
|b, _| {
|
||||||
|
b.iter(|| {
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(ciphertexts.clone(), DTE_COLLECTION).unwrap();
|
||||||
|
conn.drop_collection(DTE_COLLECTION);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
group.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pfse_bench_on_real(c: &mut Criterion) {
|
||||||
|
let mut vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
|
||||||
|
// Benchmark with different input sizes.
|
||||||
|
let mut group = c.benchmark_group("pfse_insert_bench_on_real");
|
||||||
|
for size in [100, 1000, 10000, 100000, 1000000] {
|
||||||
|
for lambda in [0.25, 0.5, 0.75, 1.0] {
|
||||||
|
let slice = &vec[..size];
|
||||||
|
let mut ctx = ContextPFSE::default();
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.set_params(lambda, 1.0, 2_f64.powf(-10_f64));
|
||||||
|
ctx.initialize_conn(ADDRESS, DB_NAME, true);
|
||||||
|
ctx.partition(slice, &exponential);
|
||||||
|
ctx.transform();
|
||||||
|
let ciphertexts = ctx
|
||||||
|
.smooth()
|
||||||
|
.into_iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(id, data)| Data {
|
||||||
|
id,
|
||||||
|
data: String::from_utf8(data).unwrap(),
|
||||||
|
})
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
group.throughput(Throughput::Elements(size as u64));
|
||||||
|
group.bench_with_input(
|
||||||
|
BenchmarkId::from_parameter(format!("{}_{}", size, lambda)),
|
||||||
|
&(size, lambda),
|
||||||
|
|b, _| {
|
||||||
|
b.iter(|| {
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(ciphertexts.clone(), PFSE_COLLECTION)
|
||||||
|
.unwrap();
|
||||||
|
conn.drop_collection(PFSE_COLLECTION);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
group.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lpfse_ihbe_bench_on_real(c: &mut Criterion) {
|
||||||
|
let mut vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
|
||||||
|
let mut group = c.benchmark_group("lpfse_ihbe_insert_bench_on_real");
|
||||||
|
for size in [100, 1000, 10000, 100000, 1000000] {
|
||||||
|
let slice = &vec[..size];
|
||||||
|
let mut ctx =
|
||||||
|
ContextLPFSE::new(2f64.powf(-10_f64), Box::new(EncoderIHBE::new()));
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize(slice, ADDRESS, DB_NAME, true);
|
||||||
|
|
||||||
|
let ciphertexts = slice
|
||||||
|
.iter()
|
||||||
|
.map(|e| {
|
||||||
|
String::from_utf8(ctx.encrypt(e).unwrap().remove(0)).unwrap()
|
||||||
|
})
|
||||||
|
.enumerate()
|
||||||
|
.map(|(id, data)| Data { id, data })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
group.throughput(Throughput::Elements(size as u64));
|
||||||
|
group.bench_with_input(
|
||||||
|
BenchmarkId::from_parameter(size),
|
||||||
|
&size,
|
||||||
|
|b, _| {
|
||||||
|
b.iter(|| {
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(ciphertexts.clone(), LPFSE_IHBE_COLLECTION)
|
||||||
|
.unwrap();
|
||||||
|
conn.drop_collection(LPFSE_IHBE_COLLECTION);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
group.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn lpfse_bhe_bench_on_real(c: &mut Criterion) {
|
||||||
|
let mut vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
|
||||||
|
let mut group = c.benchmark_group("lpfse_bhe_insert_bench_on_real");
|
||||||
|
for size in [100, 1000, 10000, 100000, 1000000] {
|
||||||
|
let slice = &vec[..size];
|
||||||
|
let mut ctx =
|
||||||
|
ContextLPFSE::new(2f64.powf(-10_f64), Box::new(EncoderBHE::new()));
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize(slice, ADDRESS, DB_NAME, true);
|
||||||
|
|
||||||
|
let ciphertexts = slice
|
||||||
|
.iter()
|
||||||
|
.map(|e| {
|
||||||
|
String::from_utf8(ctx.encrypt(e).unwrap().remove(0)).unwrap()
|
||||||
|
})
|
||||||
|
.enumerate()
|
||||||
|
.map(|(id, data)| Data { id, data })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
group.throughput(Throughput::Elements(size as u64));
|
||||||
|
group.bench_with_input(
|
||||||
|
BenchmarkId::from_parameter(size),
|
||||||
|
&size,
|
||||||
|
|b, _| {
|
||||||
|
b.iter(|| {
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(ciphertexts.clone(), LPFSE_BHE_COLLECTION)
|
||||||
|
.unwrap();
|
||||||
|
conn.drop_collection(LPFSE_BHE_COLLECTION);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
group.finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rnd_bench_on_real(c: &mut Criterion) {
|
||||||
|
let mut vec = read_csv_exact("./data/test.csv", "order_number").unwrap();
|
||||||
|
vec.shuffle(&mut OsRng);
|
||||||
|
|
||||||
|
let mut group = c.benchmark_group("rnd_insert_bench_on_real");
|
||||||
|
for size in [100, 1000, 10000, 100000, 1000000] {
|
||||||
|
let mut ctx = ContextNative::new(true);
|
||||||
|
let slice = &vec[..size];
|
||||||
|
ctx.key_generate();
|
||||||
|
ctx.initialize_conn(ADDRESS, DB_NAME, true);
|
||||||
|
let ciphertexts = slice
|
||||||
|
.iter()
|
||||||
|
.map(|e| {
|
||||||
|
String::from_utf8(ctx.encrypt(e).unwrap().remove(0)).unwrap()
|
||||||
|
})
|
||||||
|
.enumerate()
|
||||||
|
.map(|(id, data)| Data { id, data })
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
group.throughput(Throughput::Elements(size as u64));
|
||||||
|
group.bench_with_input(
|
||||||
|
BenchmarkId::from_parameter(size),
|
||||||
|
&size,
|
||||||
|
|b, _| {
|
||||||
|
b.iter(|| {
|
||||||
|
let conn = ctx.get_conn();
|
||||||
|
conn.insert(ciphertexts.clone(), RND_COLLECTION).unwrap();
|
||||||
|
conn.drop_collection(RND_COLLECTION);
|
||||||
|
})
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
group.finish();
|
||||||
|
}
|
Loading…
Reference in New Issue