Linux tmpfs 写入速度比 RAM 速度慢

Linux tmpfs 写入速度比 RAM 速度慢

我有一台 HPE ProLiant DL360 Gen9 服务器,规格如下:

  • CPU:Intel Xeon 2 CPU E5-2687W v3 @ 3.10GHz,25MB L3 缓存,每颗 10 个核心
  • 内存:8x 32GB PC4-17000 DDR4 2133MHz CAS-15 1.2V SDRAM DIMM(共 256 GB)

(完整服务器规格这里

服务器正在CentOS 7.2使用内核运行3.10.0-327.36.3.el7.x86_64

我使用以下条目在服务器上安装了 tmpfs ramdisk /etc/fstab

tmpfs  /ramdisk  tmpfs  noauto,user  0 0

为了测试写入此 ramdisk,我运行以下命令:

time sh -c "dd if=/dev/zero of=/ramdisk/120GB_testfile bs=4k count=30000000 && sync"

报告称它在 58.857 秒内写入了 122,880,000,000 字节,写入速度为 1991 MiB/秒。

考虑到该内存的写入速度为 17GB/秒(根据内存数据速率描述),我对写入 tmpfs ramdisk 时相当低的速率感到惊讶。有人能解释这种差异吗,并建议另一种更快的内存文件写入方法吗?

谢谢。

更新

我禁用了vm.swappiness,但没有任何好处(1712 MiB/秒)。

我也尝试增加块大小(bs=256k count=468750),但同样没有太大效果(2087 MiB/秒)。

答案1

当您使用内存文件系统时,除了将数据放入 RAM 之外,还有很多事情要做。您仍然必须处理与文件相关的数据结构,包括跟踪内存中所有分配的位置。写入这些信息也需要时间(特别是,对于您正在进行的测试,您的文件大小会在每次写入时更新,这会立即使内存中数据发生变化的位置数量翻倍)。

此外,分配内存是极其很慢。事实上,它是大多数不涉及 I/O 的系统上最慢的事情之一,唯一明显更慢的事情是创建新线程或进程。诸如此类的工具会ramspeed在启动时预先分配它们将使用的所有内存,以便测试实际的内存性能。相比之下,tmpfs 不知道您要创建的文件有多大,因此它必须按需分配所有内容,并且以不大于块大小的块进行分配dd(我认为它的上限是 64k,但我不确定)。因此,您在每个块中分配内存以存储该块会产生开销。

相关内容