我开始rsync
同时运行三个程序,以便在外部硬盘驱动器和内部硬盘驱动器之间传输数据。当他们完成后,我得到了他们的计时结果:
$ time rsync -a /media/t/1/ ./
real 236m14.131s
user 22m57.025s
sys 12m35.219s
$ time rsync -a /media/t/2/ ./
real 106m45.245s
user 3m6.938s
sys 1m25.902s
$ time rsync -a /media/t/3/ ./
real 55m48.494s
user 2m6.053s
sys 0m52.557s
real 和 user+sys 之间的巨大差异主要是因为rsync
我的外部和内部硬盘驱动器之间主要执行 IO 操作,并且 IO 操作不是在 cpu 中运行,而是在 DMA 或两个硬盘驱动器的控制器中运行,因此不计算在内进入用户或系统时间?
注意
每个
rsync
进程可能都是多线程的,这会增加用户+系统时间。前半段时间,三个程序同时运行,互相竞争IO?那可能对实时性有很大贡献?
第一个程序传输 108GB,第二个程序传输 17GB,第三个程序传输 12GB。
我的操作系统是64位Ubuntu 14.04,我的电脑是Thinkpad T400。
答案1
当磁盘 I/O 发生时,CPU 可用于其他用途,因此它不计入进程的 CPU 时间(用户和系统数据)。这是因为,正如您所猜测的,该操作发生在磁盘中(可能在焊接到磁盘板上的越来越多的微控制器中)