
私は現在、高速なプロセス間通信と一時的な I/O 通信 (画像と大きな HDF5 配列) を必要とするソフトウェアを開発しています。データの「存続期間」はさまざまで、いくつかの要因に依存しますが、ほとんどの場合、数秒から数分程度です。より長く保存する必要があるファイルはわずかです。データを永続的に保存する必要はありません。
したがって、これ/dev/shm
が正しい方法だと思いました。ただし、ベンチマークに苦労しています/dev/shm
。
私の最初の試みは次のようなものでした:
sudo dd if=/proc/kcore of=/dev/shm/mem count=1000000
...次の結果が表示されます。
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB, 488 MiB) copied, 0,661147 s, 774 MB/s
ただし、一度に読み取り/書き込みするバイト数を指定するフラグdd
を付けて実行すると、結果は大きく変わります。bs
sudo dd if=/proc/kcore of=/dev/shm/mem bs=$((1024*1024)) count=512
...結果は次のようになります:
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0,166003 s, 3,2 GB/s
小さなデータ チャンクを何度も (最初の試行のように 1,000,000 回) 読み書きするよりも、非常に大きなデータ チャンク (多くのバイトを 512 回) 読み書きする方がはるかに高速なのはなぜですか?
をソースとして使用して/dev/shm
ベンチマークすることは「合法」ですか? それとも、何らかの形でベンチマークを制限していますか?dd
/proc/kcore
/proc/kcore
パフォーマンスがどの程度か正確にはわかりません本当に必要ではありませんが、1 GB/秒以上の読み取りおよび書き込み速度が欲しいです(読み書きするデータの最大量は 1 GB であり、1 秒未満で実行したいため)。
私は主に大きな配列(50MBから1GBまで)をHDF5。