gpt4 book ai didi

performance - 我可以改善 Rust zip crate 的糟糕性能吗?

转载 作者:行者123 更新时间:2023-12-03 11:23:27 25 4
gpt4 key购买 nike

这是我的基准程序:

extern crate zip;

use std::fs::File;
use std::io::copy;
use zip::write::FileOptions;
use zip::ZipWriter;

fn main() {
let mut src = File::open("/tmp/src.mxf").unwrap(); // 624 Mb file.
let dest = File::create("/tmp/test.zip").unwrap();
let mut zip_writer = ZipWriter::new(dest);

zip_writer
.start_file("src.mxf", FileOptions::default())
.unwrap();
copy(&mut src, &mut zip_writer).unwrap();

zip_writer.finish().unwrap();
}

在 Release模式下编译程序:

time ./zip_bench
./zip_bench 62,68s user 146,21s system 99% cpu 3:28,91 total

使用系统压缩的相同文件 zip二进制:

time zip /tmp/test2.zip /tmp/src.mxf
zip /tmp/test2.zip /tmp/src.mxf 13,77s user 0,19s system 99% cpu 13,965 total

系统和 Rust zip 之间的时间因素约为 14 倍(对于类似的输出文件,大小差异很小)。

我在解释 Rust 性能的代码中做错了什么吗?如何改进它以接近系统性能?

最佳答案

我没有你的测试数据,所以我在 3.7 GB 的 Debian DVD ISO 上运行。我还假设您所说的“系统压缩包”与 Arch zip package. 大致相同
从您的原始代码开始,更新 zip crate,例如通过 deflate 帮助移动到 flate2:

time ./zipbench 

real 2m29.285s
user 2m23.396s
sys 0m4.066s
time zip test2.zip  debian-10.4.0-amd64-DVD-1.iso 
adding: debian-10.4.0-amd64-DVD-1.iso (deflated 1%)

real 1m42.709s
user 1m38.066s
sys 0m3.386s
zip 实用程序的速度只有大约两倍,我们甚至还没有更改我们的代码,只是将我们的 crate 和 Rust 更新了大约一年。
我们可以使用 BufReader 向 Rust 添加缓冲 IO和 BufWriter :
fn main() -> io::Result<()> {
let mut src = BufReader::new(File::open("./debian-10.4.0-amd64-DVD-1.iso")?);
dest = BufWriter::new(File::create("./test.zip")?);
let mut zip_writer = ZipWriter::new(dest);

zip_writer.start_file("src.mxf", FileOptions::default())?;
// This is only workable because we're only writing one file to our ZIP.
let mut zip_writer = BufWriter::new(zip_writer);
io::copy(&mut src, &mut zip_writer)?;

Ok(())
}
这为我们带来了一个小的性能提升,但不是很大:
time ./zipbench

real 2m25.348s
user 2m20.105s
sys 0m3.894s
直接使用 flate2 可能会获得更快的速度,尤其是如果您可以使用 CloudFlare's Zlib fork.不过,我还没有测试过这个。

关于performance - 我可以改善 Rust zip crate 的糟糕性能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53648948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com