我读这个问题关于“真实”、“用户”和“系统”的描述,我想玩一下。有人能解释一下为什么
[root@lux ~]# time dd if=/dev/zero of=del.large bs=10K count=32768
32768+0 records in
32768+0 records out
335544320 bytes (336 MB) copied, 0.623293 seconds, 538 MB/s
real 0m0.717s
user 0m0.007s
sys 0m0.709s
[root@lux ~]# time dd if=/dev/zero of=del.large bs=100K count=32768
19838+0 records in
19838+0 records out
2031411200 bytes (2.0 GB) copied, 47.31 seconds, 42.9 MB/s
real 0m47.401s
user 0m0.009s
sys 0m3.395s
显然,第一次试验中 real = user + sys。为什么第二次测试中不一样?
答案1
鉴于报告的数据速率急剧下降(从 538 MB/s 到 42.9 MB/s),我怀疑您在第一次测试中写入的 336M 完全适合驱动器的写入缓存,因此该过程只是将所有数据交给驱动器,驱动器对其进行缓存并立即报告成功。
另一方面,在第二次测试中,2.0G 的数据无法放入缓存中,因此内核必须发送部分数据,等待其写入磁盘(占用时钟时间,但不占用 CPU 时间),发送更多数据,等待写入等,直到驱动器最终接受所有数据。第二次测试中的“额外”秒数是等待 I/O 操作完成所花费的时间。
答案2
在多处理器系统上,实时不一定等于用户时间 + 系统时间。用户时间 + 系统时间是 CPU 所花费的时间,而实时是实际使用的时间量。
编辑:显然之前已经问过:https://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1