HPE ProLiant DL360Gen9サーバーを使用しています。仕様は次のとおりです。
(完全なサーバー仕様 ここ )
サーバーはカーネルCentOS 7.2
で3.10.0-327.36.3.el7.x86_64
を実行しています。
/etc/fstab
の次のエントリを使用して、tmpfsramdiskをサーバーにマウントしました。
tmpfs /ramdisk tmpfs noauto,user 0 0
このRAMディスクへの書き込みをテストするには、次のコマンドを実行します。
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 /秒であることを考えると( this メモリデータレートの説明によると)、tmpfsramdiskに書き込むときの速度がかなり遅いことに驚いています。誰かが格差を説明し、より高速なメモリ内のファイルに書き込む別の方法を提案できますか?
ありがとう。
[〜#〜]更新[〜#〜]
vm.swappiness
を無効にしましたが、何のメリットもありません(1712MiB /秒)。
ブロックサイズも大きくしてみましたが(bs=256k count=468750
)、あまり効果はありませんでした(2087MiB /秒)。
インメモリファイルシステムを使用している場合は、データをRAMに配置するだけでなく、さらに多くのことが行われています。メモリ内のすべての場所を追跡するなど、ファイルに関連付けられたデータ構造を処理する必要があります。この情報の書き込みにも時間がかかります(特に、実行しているテストでは、書き込みのたびにファイルサイズが更新されるため、メモリ内でデータが変更される場所の数がすぐに2倍になります)。
また、メモリの割り当ては非常に遅いです。実際、これはI/Oを伴わないほとんどのシステムで実行できる最も遅いことの1つであり、非常に遅いのは新しいスレッドまたはプロセスの作成だけです。 ramspeed
のようなツールは、起動時に使用するすべてのメモリを事前に割り当てて、実際のメモリパフォーマンスをテストできるようにします。それに比べて、tmpfsは作成するファイルの大きさがわからないため、すべてをオンデマンドで割り当てる必要があり、dd
ブロックサイズ以下のチャンクで割り当てます(私はそれを考えています) 64kで上限がありますが、よくわかりません)。このため、すべてのブロックに、そのブロックを格納するためのメモリを割り当てるためのオーバーヘッドがあります。