🚀 Performance (M1 Pro, macOS)
Full Generation Time
| RPMs |
createrepo_rs (4w) |
createrepo_c (4w) |
Speedup |
| 10 |
0.01s |
0.10s |
10x |
| 100 |
0.01s |
0.11s |
11x |
| 500 |
0.03s |
0.12s |
4x |
| 1000 |
0.05s |
~0.20s |
4x |
Worker Scaling (500 RPMs)
| Workers |
createrepo_rs |
createrepo_c |
| 1 |
0.05s |
0.25s |
| 4 |
0.03s |
0.12s |
Compression (500 RPMs, 4w)
| Algorithm |
createrepo_rs |
Output Size |
| zstd |
0.03s |
20KB |
| gzip |
0.03s |
40KB |
| xz |
0.11s |
20KB |
| bzip2 |
0.14s |
24KB |
🐛 Critical Fix
- Multi-worker deadlock: Pool channel
workers×2 too small, scaled to workers×256
⚡ Optimizations
- Arc cache avoids full clone on
--update
- SQLite batch transactions for filelists
- Redundant stat() eliminated
- XML pre-allocation
- SHA buffer 8KB→64KB
- Shared From (-114 lines)
- Removed unused
anyhow dependency
🧪 Benchmark Suite
Added benchmark/ with scripts + Dockerfile for reproducible comparison.
Full Changelog: v0.1.3...v0.1.4