#校验和 #完整性 #CRC #开源软件

bin+lib cksfv

使用 Rust 和 crc32fast crate 实现的 10 倍更快的 cksfv 重新实现

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 命令行工具

MIT 许可协议

26KB
474

cksfv.rs Star me

使用 Rust 和 crc32fast crate 重新实现的 10 倍更快的 cksfv。

Actions Codecov License Source Crate Documentation Changelog GitHub issues

🗺️ 概述

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