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

最大26GB / 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に書き込むことは、実際にはメモリのベンチマークではなく、大きなテーブルのエントリをすばやく変更し、空きメモリページを見つけるカーネルの能力に関するものです。

おすすめ記事