为什么使用 LVM 的随机写入比不使用 LVM 的速度更快?

为什么使用 LVM 的随机写入比不使用 LVM 的速度更快?

我正在使用 fio 测量 EMMC 设备的随机写入速度。

我正在测试具有多种 io 大小的多种块大小。

在原始 emmc 设备对所有测试用例进行多次迭代后,我使用整个 emmc 设备创建一个逻辑卷并在该卷上运行相同的测试。(例如 /dev/new_vol_group/new_logical_volume)

我原本预计 LVM 的性能开销会稍微大一些,但最奇怪的事情发生了。

对于较小的 IO 大小,原始和 LVM 之间的随机写入速度非常相似。当 IO 大小增加时(特别是当大小是 RAM 的两倍时),原始设备的随机写入速度会大大降低,但 LVM 并非如此。当文件大小增加时,LVM 的随机写入速度不会降低。

因此,LVM 在随机写入访问方面比原始设备快得多,尤其是对于大文件。这仅适用于随机写入。在顺序读写或随机读取测试中,我没有看到这种行为。

这是我的 fio 文件

ioengine=libaio 
direct=1 
buffered=0  
iodepth=1
numjobs=1
ramp_time=5
startdelay=5
runtime=90
time_based
refill_buffers
randrepeat=1

我能想到的唯一原因是缓存,但是当 io 大小是主机上 RAM 数量的两倍时,缓存不会对测试产生这么大的影响。

注意:我使用 fio-3.1 进行基准测试,Ubuntu 18.04 LTS 作为主机。
我在多台设备上检测到了这种行为。

编辑:添加了表示速度差异的图表。

LVM 随机写入速度与原始映射器设备相比 LVM 随机写入速度与原始映射器设备相比

原始设备随机写入速度 原始设备随机写入速度

相关内容