为什么RAMFS比Ram慢很多?

为什么RAMFS比Ram慢很多?

我的 PC 上安装了 64GB DDR4 3200MHz 内存。当我运行时sysbench,我得到以下结果:

# sysbench memory --memory-block-size=1M --memory-total-size=10G run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1024KiB
  total size: 10240MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 10240 (26329.53 per second)

10240.00 MiB transferred (26329.53 MiB/sec)


General statistics:
    total time:                          0.3876s
    total number of events:              10240

Latency (ms):
         min:                                    0.04
         avg:                                    0.04
         max:                                    0.08
         95th percentile:                        0.04
         sum:                                  386.04

Threads fairness:
    events (avg/stddev):           10240.0000/0.00
    execution time (avg/stddev):   0.3860/0.00

它表明它的工作速度高达 26 GB/s。到目前为止,一切都很好。但是当我安装ramfs并尝试类似的测试时,这个数字大幅下降:

# mount -t ramfs -o size=11G ramfs /mnt/ramfs/
# dd if=/dev/zero of=/mnt/ramfs/zero.img bs=1G count=10  conv=fdatasync
10+0 records in
10+0 records out
10737418240 bytes (11 GB, 10 GiB) copied, 3.51899 s, 3.1 GB/s

表明我的写入速度只有 3GB/s 左右。我知道文件系统有一些开销,但从 26GB/s 下降到 3GB/s 将是一个非常大的开销。

更新 1 - 另一个测试:

# time head -c 11G /dev/zero > /mnt/ramfs/zero.img

real    0m3.046s
user    0m0.225s
sys     0m2.808s

难道我做错了什么?有没有办法提高 RAMFS 的性能?为什么 RAMFS 比 RAM 本身慢这么多?

答案1

虽然 8 的系数不是那么大,但我并不感到惊讶:您的基准测试首先分配内存,然后访问它。这里没有文件系统逻辑,当然,您将需要页面错误来实际映射该内存,但 sysbench 使用 Hugetlb 来最小化其开销等等:

写入 ramfs 实际上并不是内存的基准,而是内核快速更改大表中的条目并查找空闲内存页的能力的基准。

相关内容