直通设备映射器的预期开销是多少?

直通设备映射器的预期开销是多少?

我正在尝试为直通设备映射器建立基线吞吐量开销;即不执行任何操作的设备映射器。大致遵循基准测试程序来自 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。

对于那些想要复制我的结果的人来说,这是我的设置:

  1. 创建 Ubuntu 20.04 或 22.04 VM 或访问此类计算机。关闭安全启动,以便您可以加载内核模块。
  2. 创建 4GB 的 ramdisk:sudo modprobe brd rd_nr=1 rd_size=4194304
  3. 安装fio:sudo apt install -y fio
  4. 在 ramdisk 上运行 fio:sudo fio --filename=/dev/ram0 --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=plain
  5. 在输出底部记录读/写吞吐量:aggrb=?MB/s。这是基线。

现在对于直通设备映射器,使用“延迟”设备映射器。这是由云耀:

  1. 设置直通设备映射器:echo '0 8388608 delay /dev/ram0 0 0' | sudo dmsetup create plain
  2. 对它运行 fio:sudo fio --filename=/dev/mapper/plain --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=plain
  3. 类似地记录吞吐量。

或者,如果您怀疑具有 0 延迟的“延迟”设备映射器性能不佳,您可以使用我的直通设备实现这里。下载这两个文件这里,然后编译并加载内核模块:

  1. 跑步make
  2. 加载模块:sudo insmod passthrough.ko
  3. 加载设备映射器:echo "0 `sudo blockdev --getsz /dev/ram0` passthrough /dev/ram0" | sudo dmsetup create passthrough
  4. 对它运行 fio:sudo fio --filename=/dev/mapper/passthrough --readwrite=readwrite --bs=4k --direct=1 --loops=20 --name=passthrough
  5. 类似地记录吞吐量。

相关内容