ramfsとtmpfsのパフォーマンスの違い


23

多くの100 kbの単一ファイル(イメージ)で構成される約10 GBのデータ用に、メモリ内ストレージシステムをセットアップする必要があります。多くの読み取りとかなり定期的な書き込みが行われます(新しいファイルの追加、古いファイルの削除)。tmpfsは通常のファイルシステムのように動作する
ことを知っています。たとえば、dfを使用して空き領域や使用済み領域を確認できます。これは便利な機能です。しかし、ramfsがIO操作の速度に関していくつかの利点を提供するかどうかに興味があります。ramfsを使用する場合、消費されたメモリのサイズを制御できないこと、および空きRAMを完全に消費するとシステムがハングすることがありますが、このシナリオでは問題になりません。

要約すると、私は興味があります:
-パフォーマンスの面で、どちらが速いか:ramfsまたはtmpfs(そしておそらくその理由)?
-ときはないtmpfsのは、スワップ領域を使用できますか?既に保存されているデータをスワップ(現在実行中の他のプログラム用にRAMを解放するため)に移動するか、その時点で空きRAMが残っていない場合は新しいデータのみを移動しますか?


ええと、サーバーにはどれくらいのRAMがありますか?
ewwhite 14

1
サーバーには合計16 GBのRAMがあります。また、注目に値するのは、SSDストレージがなく、単一の7200 rpm HDDがあることです。それが、ある種のRAMストレージの使用を検討している理由です。
イヴァンコバセビッチ14

回答:


21

私の推薦:

通常の条件下で実際の活動を測定および観察します。

これらのファイルがすべて必要になる可能性は低く、常にキャッシュから提供されます。しかし、特定の瞬間にキャッシュにあるものを知らせることができるvmtouchと呼ばれる素晴らしいツールがあります。特定のディレクトリまたはファイルをキャッシュにロックするためにも使用できます。定期的に使用した後の状態を確認してください。この状況では、tmpfsとramfsを使用する必要はありません。

参照:http : //hoytech.com/vmtouch/

最もアクティブなファイルがおそらくすでにキャッシュに常駐していることに驚くことでしょう。


tmpfsとramfsに関しては、目に見えるパフォーマンスの違いはありません。操作上の違いがあります。実際のユースケースはOracleであり、ramfsを使用して、RAM内のデータをスワップのリスクなしに管理できるようにしました。tmpfsデータは、メモリ不足の状態でスワップアウトできます。また、設定のサイズ変更と変更をその場で行うことにも違いがあります。


1
素晴らしい小さなユーティリティ!+1
ジャンヌピッカライネン14

1
@ewwhiteすばらしい返信。数年前のケースの1つでは、ほとんどの場合使用されるファイルが既にキャッシュに常駐していることがわかりました。ヒント:最近のファイルシステムは、私が思うよりもはるかにインテリジェントです。
ジャンニサピ

13

これを考えすぎないでください。システムに十分なRAMを入れて、カーネルのディスクキャッシュで処理を行ってください。そうすることで、ディスクからデータを永続化しながら、メモリから直接読み取る読み取りの利点を得ることができます。


1
私のシステムには現在16 GBのRAMがあります。これらのイメージを提供するためにNginxを実行する単純なDebianインストールです。私は常に100%の負荷がかかる1 Gbitネットワーク接続を使用しており、これらの画像を特定の順序で提供していません。とにかく、このシナリオでは、カーネルがこれら10個のイメージのすべてをキャッシュにロードすると思いますか?
イヴァンコヴァセビッチ14

3
はい。システムに十分なRAMがあり、サーバー上の他のアプリケーションがRAMリソースを奪い合っていない場合、それらのファイルはキャッシュに残ります。
EEAA

2
私は〜15年にUNIX管理でてきた、と私はしまし決して tmpfsの/ ramfsが提供しているだろうな状況に遭遇していない任意のネイティブカーネルFSキャッシュを超える利益を。それは、彼らが保証される状況がそこに存在しないと言うことではありませんが、それらは非常にまれです。通常、物事のためにRAMキャッシュが必要な場合、目的ビルドキャッシングレイヤー(Redis / Memcache /など)を使用します。
EEAA 14

4
画像を読み込む必要がある場合、ディスクキャッシュは確かに機能しますが、ランダム/小さな書き込みを高速化したいが、ランダムI / O. マシンがクラッシュしたり電源障害が発生したりすると、tmpfsの内容はメモリ内にある(のみ)ために消えてしまうことに注意してください。
マーティン14

1
@Martijnは正しい。tmpfsとramfsは確かに便利です。たとえば、gitリポジトリの集中的な書き換え(フィルター分岐)を行っています。メモリで実行するのは、SSDで実行するよりも高速です。(通常)Linuxはディスク操作の永続性に関するいくつかの保証を満たす必要があるため、キャッシュは書き込みではなく読み取りに役立ちます。
ポールドレイパー

7

1)パフォーマンスベンチマーク。

このページを参照として使用し、tmpfsとramfsのI / O比較を行いました。結果は、パフォーマンスの点でほとんど同じです。

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2)このページによると、tmpfsはスワップを使用し、ramfsはスワップを使用しません。


2
あなたの答えは正しい軌道に乗っています。ただし、パフォーマンスに関するあなたの結論には同意しません。テストでは、ramfsに有利な0.2 GB / sと0.1 GB / sの違いがあることを示しています。有効な統計サンプルを提供するには、これをさらにテストする必要があると思います。2)はい、わかっていますが、スワップがいつ使用されるかについての正確な洞察を得たいと思います。
イヴァンコバセビッチ14

さまざまなサイズのファイルを使用してこのベンチマークを何度も実行した場合、違いはないと思います。サイズを4倍上げたときに、実際には差が広がるのではなく狭くなっていることがわかります。
マイケルマルティネス14

1
小さなファイルがたくさんある場合はどうでしょうか。たとえば、100から200 KBのファイルを100万個書き込む場合。また、同じファイルサイズに対して0.2 GB /秒の差が繰り返し発生しますか?これは間違いなくパフォーマンスの違いを指摘するでしょう。スケジュール通りになったら自分でテストするでしょう。しかし、それが私がここで尋ねた理由です。だから他の誰かがすでにやっていれば、私は多分それをto-doリストから渡せます。
イヴァンコバ

確かに確実に知る唯一の方法は、テストを行うことです。
マイケルマルティネス14

1

あなたはRAMの十分な量は、様々なカーネルバッファをホストするためにインストールしている場合、アプリケーションは、スタックとヒープ、通常のファイル・システム・キャッシュおよびそれに入れて、あなたが意図するすべてのファイルは、ramfsより遅いことはありませんtmpfsの危険が生じないよう設計による物理I / O。物理I / Oは、間違いなくその領域のパフォーマンス低下の主な原因です。

ただし、その量のRAMがインストールされていない場合、後者は仮想メモリヒューリスティックを使用してディスク上(スワップ領域など)にあるものとRAMにあるものを決定ramfsする場合よりも、使用が遅くなる可能性がありtmpfsます。を使用するtmpfsと、ファイルシステムのデータがRAMに残ってしまい、リソースの浪費になる可能性があります。

2番目の質問に答えるために、はい、tmpfs最後の「ホット」データではなく、最初に古いデータをスワップ領域に移動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.