环回文件系统的性能

环回文件系统的性能

有人对 Linux 回送文件系统做过性能/基准测试吗?到目前为止,您的体验如何。性能有严重下降吗?稳定性如何?

http://freshmeat.net/articles/virtual-filesystem-building-a-linux-filesystem-from-an-ordinary-file

答案1

我对环回设备中的写入操作进行了一些基准测试。结论如下:

  • 如果每次写入后都进行同步,那么环回设备的性能会明显变差(几乎慢两倍)。
  • 如果您允许磁盘缓存 IO 调度程序执行其工作,那么使用环回设备和直接磁盘访问之间几乎没有任何区别。

基准测试结果

首先,我在 tmpfs 中一个 8GB 的​​回环设备以及该回环设备内的回环设备上运行了一个基准测试(每次写入操作后都同步):

tmpfs 中的 ext4:

Measured speed: 557, 567, 563, 558, 560, 559, 556, 556, 554, 557
Average speed : 558.7 MB/s  (min 554  max 560)

tmpfs 中的 extf 中的 ext4:

Measured speed: 296, 298, 295, 295, 299, 297, 294, 295, 296, 296
Average speed : 296.1 MB/s  (min 294  max 299)

显然,使用具有写入同步功能的环回设备时,性能会有所不同。
然后,​​我在我的硬盘上重复了同样的测试。ext4
(硬盘,1000 MB,3 次):

Measured speed: 24.1, 23.6, 23.0
Average speed : 23.5 MB/s  (min 23.0  max 24.1)

ext4 中的 ext4(HDD,945MB):

Measured speed: 12.9, 13.0, 12.7
Average speed : 12.8 MB/s  (min 12.7  max 13.0)

现在,在 HDD 上进行相同的基准测试每次写入后无需同步( ,以/time (dd if=/dev/zero bs=1M count=1000 of=file; sync)衡量)。ext4 (HDD,1000 MB):<size><time in seconds>

Measured speed: 84.3, 86.1, 83.9, 86.1, 87.7
Average speed : 85.6 MB/s  (min 84.3  max 87.7)

ext4 中的 ext4(HDD,945MB):

Measured speed: 89.9, 97.2, 82.9, 84.0, 82.7
Average speed : 87.3 MB/s  (min 82.7  max 97.2)

(令人惊讶的是,环回基准测试看起来比原始磁盘基准测试更好,大概是因为环回设备的尺寸较小,因此实际同步到磁盘所花费的时间更少)

基准测试设置

首先,我在 /tmp (tmpfs) 中创建了一个 8G 的环回文件系统:

truncate /tmp/file -s 8G
mkfs.ext4 /tmp/file
sudo mount /tmp/file /mnt/
sudo chown $USER /mnt/

然后我通过用数据填充已挂载的环回文件来建立基线:

$ dd if=/dev/zero bs=1M of=/mnt/bigfile oflag=sync
dd: error writing '/mnt/bigfile': No space left on device
7492+0 records in
7491+0 records out
7855763456 bytes (7.9 GB) copied, 14.0959 s, 557 MB/s

完成后,我在之前的环回设备中创建了另一个环回设备:

mkdir /tmp/mountpoint
mkfs.ext4 /mnt/bigfile
sudo mount /mnt/bigfile /tmp/mountpoint
sudo chown $USER /tmp/mountpoint

并再次运行基准测试十次:

$ dd if=/dev/zero bs=1M of=/tmp/mountpoint/file oflag=sync
...
7171379200 bytes (7.2 GB) copied, 27.0111 s, 265 MB/s

然后我卸载了测试文件并将其删除:

sudo umount /tmp/mountpoint
sudo umount /mnt

(对于 HDD 上的测试类似,除了我还添加了count=1000防止测试填满我的整个磁盘)
(对于非同步写入测试,我运行了计时ddsync操作)

答案2

我没有遇到任何问题。一切都非常稳定。Linux 中的文件系统缓存和 IO 调度程序非常合理,因此直接请求磁盘和请求磁盘上文件的一部分之间不会产生任何明显的区别。

相关内容