3 个不稳定版本
0.2.1 | 2021 年 7 月 21 日 |
---|---|
0.2.0 | 2021 年 7 月 7 日 |
0.1.0 | 2021 年 6 月 15 日 |
#1323 in 文件系统
每月 26 次下载
23KB
338 行
fcp
fcp
是一个 显著更快的 经典 Unix cp(1)
命令的替代品。
fcp
旨在以更高的性能处理 cp
的最常见用例。
fcp
并不旨在通过其众多的选项完全替代 cp
。
注意: fcp
优化用于 SSD 系统。在 HDD 系统上,fcp
可能表现不佳。
安装
请注意,fcp
仅支持类 Unix 操作系统(例如 Linux、macOS 等)。
预构建二进制文件
可以在 此仓库的发行版 下找到一些系统的预构建二进制文件。
通过 cargo
fcp
需要 Rust 版本 1.53.0 或更高版本。可以通过运行以下命令使用 cargo
安装 fcp
cargo install fcp
Arch Linux
fcp
可以通过以下 AUR 安装在 Arch Linux 上
macOS
fcp
可以通过 Homebrew 安装在 macOS 上,运行以下命令
brew install fcp
用法
可以通过运行 fcp --help
来获取用法信息,以下为复制的用法信息
fcp 0.2.1
USAGE:
fcp [OPTIONS] SOURCE DESTINATION_FILE
Copy SOURCE to DESTINATION_FILE, overwriting DESTINATION_FILE if it exists
fcp [OPTIONS] SOURCE ... DESTINATION_DIRECTORY
Copy each SOURCE into DESTINATION_DIRECTORY
OPTIONS:
-h, --help
Output this usage information and exit.
-V, --version
Output version information and exit.
基准测试
fcp
不仅仅声称比cp
快,它确实比cp
快。由于不同的操作系统显示不同的性能特征,相同的基准测试在macOS和Linux上都进行了。
macOS
以下基准测试是在2018年MacBook Pro(2.9 GHz 6核心Intel Core i9,16 GiB RAM,SSD)上进行的,文件系统使用的是APFS。
大文件
以下显示了使用cp
和fcp
复制包含13个不同512 MB文件的目录的基准测试结果,其中fcp
平均快约822倍(注意每个图表的轴单位)2
Linux内核源代码
以下显示了使用cp
和fcp
复制Linux内核源代码树的基准测试结果,其中fcp
平均快约6倍。
Linux
以下基准测试是在裸机AWS EC2实例(a1.metal,16个CPU,32 GiB RAM,SSD)上进行的,文件系统使用的是XFS。
Linux内核源代码
以下显示了使用cp
和fcp
复制Linux内核源代码树的基准测试结果,其中fcp
平均快约10倍。
大文件
以下显示了使用cp
和fcp
复制包含13个不同512 MB文件的目录的基准测试结果,其中fcp
平均快约1.4倍。
方法论
fcp
的高性能可以归因于几个因素,但主要是利用并行性,将遍历目录和复制其内容的任务分配到机器的所有核心。这导致在SSD系统上显著提高性能,因为在同一时间内发出的I/O请求更多(与单线程方法相比),从而提高了平均队列深度,相应地提高了SSD(作为其最大IOPS的函数)的利用率,并提高了吞吐量。
此外,在macOS上(也许在未来在其他操作系统上),fcp
利用了系统的底层写时复制功能,大大减少了复制大文件所需的时间。
这两个因素——加上对这个问题采取的整体性能意识方法——有助于解释fcp
相对于cp
性能的显著提高。
[1]虽然通常你应该避免在笔记本电脑上进行基准测试,但fcp
是开发工具,许多开发人员主要在笔记本电脑上工作。另外,与Linux不同,你可以按秒租用,AWS EC2 macOS实例的最小租用期为24小时,这些基准测试不到一小时就完成了。
[2]这种性能差异如此之大,是因为fcp
在底层使用了fclonefileat
和fcopyfile
。
依赖关系
~3MB
~61K SLoC