一个用于测试和比较不同文件复制方法性能的多线程工具。该工具支持多种复制模式,包括系统CP命令、内存映射(mmap)、直接I/O以及测试内存带宽是否限制了拷贝速度。
创建该工具旨在揭示在现代 NVMe 存储设备上,传统的拷贝方式已经达到了性能瓶颈,我们需要多线程工具才能达到理论最大带宽。
同时,现代 NVMe 设备的带宽已经相当巨大,在多个 NVMe 组成的"全闪"阵列的情况,其最大读写带宽甚至可能超过了内存带宽,所以该工具也旨在揭示在全闪阵列上,内存带宽是否限制了拷贝速度。
- 多线程并行文件复制
- 支持多种复制模式:
- 系统CP命令 (
cp
) - 内存映射 (
mmap
) - 直接I/O (
direct_io
) - 测试内存最大带宽是否会限制拷贝速度 (
direct_io_memory_impact
)
- 系统CP命令 (
- 详细的性能统计报告
- 支持批量文件复制
- linux 版本
- Linux操作系统
- GCC编译器
- pthread库
make linux
./parallel_copy --mode [cp|mmap|direct_io|direct_io_memory_impact] --from file1 [file2 ...] --to dest_dir
--mode
: 指定复制模式cp
: 使用系统CP命令mmap
: 使用内存映射direct_io
: 使用直接I/Odirect_io_memory_impact
: 使用直接I/O模式测试内存带宽对拷贝速度的影响, 这个模式下只测试最大内存带宽, 并不真实复制文件
--from
: 指定源文件(支持多个文件)--to
: 指定目标目录
# 使用cp模式复制多个文件
./parallel_copy --mode cp --from file1.dat file2.dat file3.dat --to /destination/path
# 使用mmap模式复制多个文件
./parallel_copy --mode mmap --from file1.dat file2.dat file3.dat --to /destination/path
# 使用直接I/O模式复制文件
./parallel_copy --mode direct_io --from file1.dat file2.dat file3.dat --to /destination/path
程序会输出详细的复制性能统计信息:
Detailed Results:
Thread ID Filename Size (MiB) Duration (s) Speed (MiB/s)
--------------------------------------------------------------------------------
0 file1.dat 100.00 1.20 83.33
1 file2.dat 200.00 2.40 83.33
Total Statistics:
Total Size: 300.00 MiB
Total Duration: 2.40 seconds
Average Speed: 125.00 MiB/s
- 使用POSIX线程实现并行复制
- 支持大文件处理(块大小可配置)
- 针对不同存储设备优化的复制策略
- 内存对齐和直接I/O支持
- 直接I/O模式需要root权限或适当的文件系统权限
- 目标目录必须具有写入权限
- 建议在测试大文件时使用直接I/O模式
- 内存映射模式可能受系统内存限制影响
欢迎提交Issue和Pull Request来帮助改进这个项目。