2019-01-02 18:16:55 +00:00
|
|
|
extern crate proxmox_backup;
|
|
|
|
|
2021-09-01 10:32:21 +00:00
|
|
|
use pbs_datastore::Chunker;
|
2019-01-02 18:16:55 +00:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut buffer = Vec::new();
|
|
|
|
|
2022-04-10 15:44:34 +00:00
|
|
|
for i in 0..20 * 1024 * 1024 {
|
2019-01-02 18:16:55 +00:00
|
|
|
for j in 0..4 {
|
2022-04-10 15:44:34 +00:00
|
|
|
let byte = ((i >> (j << 3)) & 0xff) as u8;
|
2019-01-02 18:16:55 +00:00
|
|
|
//println!("BYTE {}", byte);
|
|
|
|
buffer.push(byte);
|
|
|
|
}
|
|
|
|
}
|
2022-04-10 15:44:34 +00:00
|
|
|
let mut chunker = Chunker::new(64 * 1024);
|
2019-01-02 18:16:55 +00:00
|
|
|
|
2019-01-03 13:35:19 +00:00
|
|
|
let count = 5;
|
2019-01-02 18:16:55 +00:00
|
|
|
|
|
|
|
let start = std::time::SystemTime::now();
|
2019-01-03 13:35:19 +00:00
|
|
|
|
|
|
|
let mut chunk_count = 0;
|
2022-04-10 15:44:34 +00:00
|
|
|
|
2019-01-02 18:16:55 +00:00
|
|
|
for _i in 0..count {
|
|
|
|
let mut pos = 0;
|
2019-01-30 17:25:37 +00:00
|
|
|
let mut _last = 0;
|
2019-01-02 18:16:55 +00:00
|
|
|
while pos < buffer.len() {
|
|
|
|
let k = chunker.scan(&buffer[pos..]);
|
|
|
|
if k == 0 {
|
|
|
|
//println!("LAST {}", pos);
|
|
|
|
break;
|
|
|
|
} else {
|
2019-01-30 17:25:37 +00:00
|
|
|
_last = pos;
|
2019-01-02 18:16:55 +00:00
|
|
|
pos += k;
|
2019-01-03 13:35:19 +00:00
|
|
|
chunk_count += 1;
|
|
|
|
//println!("CHUNK {} {}", pos, pos-last);
|
2019-01-02 18:16:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let elapsed = start.elapsed().unwrap();
|
2022-04-10 15:44:34 +00:00
|
|
|
let elapsed = (elapsed.as_secs() as f64) + (elapsed.subsec_millis() as f64) / 1000.0;
|
|
|
|
|
|
|
|
let mbytecount = ((count * buffer.len()) as f64) / (1024.0 * 1024.0);
|
|
|
|
let avg_chunk_size = mbytecount / (chunk_count as f64);
|
|
|
|
let mbytes_per_sec = mbytecount / elapsed;
|
|
|
|
println!(
|
|
|
|
"SPEED = {} MB/s, avg chunk size = {} KB",
|
|
|
|
mbytes_per_sec,
|
|
|
|
avg_chunk_size * 1024.0
|
|
|
|
);
|
2019-01-02 18:16:55 +00:00
|
|
|
}
|