我正在尝试为直通设备映射器建立基线吞吐量开销;即不执行任何操作的设备映射器。大致遵循基准测试程序来自 Cloudflare,我粗略地测量吞吐量减少 30%使用 fio 在 ramdisk 上使用直通设备映射器,而不是直接 I/O 到 ramdisk,在 Azure VM、GCP VM 和原始金属机器上运行,使用 Ubuntu 20.04 LTS 和 22.04 LTS。
这是预期的吗?
我通过 ramdisk 跨设备获得了大约 1000+MB/s 的速度,而直通速度则达到了 600+MB/s。
对于那些想要复制我的结果的人来说,这是我的设置:
- 创建 Ubuntu 20.04 或 22.04 VM 或访问此类计算机。关闭安全启动,以便您可以加载内核模块。
- 创建 4GB 的 ramdisk:
sudo modprobe brd rd_nr=1 rd_size=4194304
- 安装fio:
sudo apt install -y fio
- 在 ramdisk 上运行 fio:
sudo fio --filename=/dev/ram0 --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=plain
- 在输出底部记录读/写吞吐量:
aggrb=?MB/s
。这是基线。
现在对于直通设备映射器,使用“延迟”设备映射器。这是由云耀:
- 设置直通设备映射器:
echo '0 8388608 delay /dev/ram0 0 0' | sudo dmsetup create plain
- 对它运行 fio:
sudo fio --filename=/dev/mapper/plain --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=plain
- 类似地记录吞吐量。
或者,如果您怀疑具有 0 延迟的“延迟”设备映射器性能不佳,您可以使用我的直通设备实现这里。下载这两个文件这里,然后编译并加载内核模块:
- 跑步
make
- 加载模块:
sudo insmod passthrough.ko
- 加载设备映射器:
echo "0 `sudo blockdev --getsz /dev/ram0` passthrough /dev/ram0" | sudo dmsetup create passthrough
- 对它运行 fio:
sudo fio --filename=/dev/mapper/passthrough --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=passthrough
- 类似地记录吞吐量。