块文件写入的优点是什么?

我想知道block.write文件块的优点是什么,我认为它会减lessio操作。 但是在像linux这样的环境中,数据无论如何都要进入页面caching和后台进程(做我写错的时候纠正我)。在那种环境下写块的优点是什么?

如果我正确地理解了你的问题,你会问使用较大块的好处,而不是逐个字符地写。

你不得不考虑每次使用系统调用(例如, write() )本身都有一个最小的开销,不管正在做什么。 另外,它可能会导致调用进程遭受上下文切换 ,这种切换具有其自身的成本,并且还允许其他进程使用CPU,从而导致更显着的延迟。

因此,即使我们忘记了直接和同步I / O模式,其中每个操作都可能立即将数据写入磁盘,但从性能的角度来看,通过移动较大的数据块来降低这些不变成本的影响是有意义的。

使用dd传输1,000,000字节的简单演示:

 $ dd if=/dev/zero of=test.txt count=1000000 bs=1 # 1,000,000 blocks of 1 byte 1000000+0 records in 1000000+0 records out 1000000 bytes (1.0 MB) copied, 1.55779 s, 642 kB/s $ dd if=/dev/zero of=test.txt count=100000 bs=10 # 100,000 blocks of 10 bytes 100000+0 records in 100000+0 records out 1000000 bytes (1.0 MB) copied, 0.172038 s, 5.8 MB/s $ dd if=/dev/zero of=test.txt count=10000 bs=100 # 10,000 blocks of 100 bytes 10000+0 records in 10000+0 records out 1000000 bytes (1.0 MB) copied, 0.0262843 s, 38.0 MB/s $ dd if=/dev/zero of=test.txt count=1000 bs=1000 # 1,000 blocks of 1,000 bytes 1000+0 records in 1000+0 records out 1000000 bytes (1.0 MB) copied, 0.0253754 s, 39.4 MB/s $ dd if=/dev/zero of=test.txt count=100 bs=10000 # 100 blocks of 10,000 bytes 100+0 records in 100+0 records out 1000000 bytes (1.0 MB) copied, 0.00919108 s, 109 MB/s 

作为一个额外的好处,使用更大的数据块可以让I / O调度程序和文件系统的分配器对您的实际工作负载做出更准确的估计。