4 个版本
0.1.3 | 2023 年 10 月 3 日 |
---|---|
0.1.2 | 2022 年 10 月 3 日 |
0.1.1 | 2020 年 4 月 7 日 |
0.1.0 | 2020 年 1 月 26 日 |
492 in 命令行工具
26KB
474 行
cksfv.rs
使用 Rust 和 crc32fast crate 重新实现的 10 倍更快的 cksfv。
🗺️ 概述
cksfv
是由 Bryan Call 开发并由 Heikki Orsila 维护的一个开源工具,用于使用 CRC32 校验和验证文件的完整性。它可以用来将文件列表与 .sfv
签名列表进行比较,并生成新的列表。
此仓库包含从头开始用 Rust 编写的实现代码,它提供了与原始程序相同的 CLI,但性能更好,因为其 CRC32 实现利用了现代 CPU 的优势。
🛠️ 功能
原始二进制程序的功能
- 与脚本兼容的完全相同的命令行界面
- 与参数解析相关的完全相同的行为
- 与原始
cksfv
兼容的 SFV 列表生成 - 使用
-f
、-g
或-r
进行 SFV 验证 - 使用作为参数给出的文件进行验证模式的 SFV 过滤
- 特定选项
-
-b
标志仅打印基本文件名 -
-c
标志将所有内容打印到 STDOUT -
-C
标志在处理文件时更改目录 -
-i
标志忽略文件名的大小写 -
-L
标志跟随符号链接 -
-q
标志仅打印错误消息 -
-s
标志替换反斜杠
-
附加功能
- 支持
mmap
系统调用以避免直接读取文件 - 多线程处理多个文件
⏱️ 基准测试
基准测试使用1.6GiB的文件,通过与ArchLinux一起分发的cksfv
二进制文件或使用稳定或夜间版本的Rust编译的此程序运行hyperfine
,在Intel i7-8550U CPU上执行。
Benchmark #1: cksfv test.mkv
Time (mean ± σ): 4.376 s ± 0.120 s [User: 4.117 s, System: 0.251 s]
Range (min … max): 4.237 s … 4.555 s 10 runs
Benchmark #2: cargo +stable run --release -- test.mkv
Time (mean ± σ): 387.9 ms ± 9.3 ms [User: 158.3 ms, System: 224.9 ms]
Range (min … max): 380.0 ms … 402.3 ms 10 runs
Benchmark #3: cargo +nightly run --release -- test.mkv
Time (mean ± σ): 387.9 ms ± 11.7 ms [User: 160.9 ms, System: 226.6 ms]
Range (min … max): 373.8 ms … 414.9 ms 10 runs
Benchmark #4: cargo +nightly run --all-features --release test.mkv
Time (mean ± σ): 347.6 ms ± 12.3 ms [User: 208.8 ms, System: 136.1 ms]
Range (min … max): 330.7 ms … 368.3 ms 10 runs
d
Summary
'cargo +nightly run --all-features --release test.mkv' ran
1.12 ± 0.05 times faster than 'cargo +stable run --release -- test.mkv'
1.12 ± 0.05 times faster than 'cargo +nightly run --release -- test.mkv'
12.59 ± 0.56 times faster than 'cksfv test.mkv'
使用生成的SFV列表检查相同文件,我们得到以下结果
Benchmark #1: cksfv -f test.sfv
Time (mean ± σ): 4.672 s ± 0.102 s [User: 4.380 s, System: 0.269 s]
Range (min … max): 4.526 s … 4.845 s 10 runs
Benchmark #2: cargo +stable run --release -- -f test.sfv
Time (mean ± σ): 344.8 ms ± 12.0 ms [User: 145.9 ms, System: 194.1 ms]
Range (min … max): 325.0 ms … 355.7 ms 10 runs
Benchmark #3: cargo +nightly run --release -- -f test.sfv
Time (mean ± σ): 356.5 ms ± 7.8 ms [User: 144.4 ms, System: 210.2 ms]
Range (min … max): 349.3 ms … 374.3 ms 10 runs
Benchmark #4: cargo +nightly run --all-features --release -- -f test.sfv
Time (mean ± σ): 300.4 ms ± 12.4 ms [User: 197.3 ms, System: 99.8 ms]
Range (min … max): 290.7 ms … 324.6 ms 10 runs
Summary
'cargo +nightly run --all-features --release -- -f test.sfv' ran
1.15 ± 0.06 times faster than 'cargo +stable run --release -- -f test.sfv'
1.19 ± 0.06 times faster than 'cargo +nightly run --release -- -f test.sfv'
15.55 ± 0.72 times faster than 'cksfv -f test.sfv'
📜 许可证
此工具在开源MIT许可证下提供。
依赖关系
~3–12MB
~112K SLoC