/dev/shm は /tmp よりも高速ですか?

/dev/shm は /tmp よりも高速ですか?

この質問/dev/shmとのどちらを使用するかについての質問です/tmp。提供された回答から、はディスクではなく RAM に書き込むため/dev/shm、 の方が高速であるという一般的な印象が生まれます/tmp。このトピックについて Web を検索すると、この印象が漠然と確認できます。残念ながら、どちらがより高性能であるかを、たとえば測定によって確実に示す信頼できるソースを見つけることができません。

たとえば、最初の回答からのこの引用:

RAMはディスクストレージよりも大幅に高速なので、パフォーマンス向上のため、/tmp の代わりに /dev/shm を使用するプロセスが I/O 集約型であり、一時ファイルを頻繁に使用する場合は、

リンクされた記事には次のように書かれています。

/dev/shm は、従来の共有メモリの概念を実装したものに過ぎません。プログラム間でデータを渡すための効率的な手段です。1 つのプログラムがメモリ部分を作成し、他のプロセス (許可されている場合) がそれにアクセスできます。これにより、Linux の速度が向上します。

これは、この Web サイトを引用した回答を確認するものではなく、/dev/shmとのパフォーマンスを比較するものでもありません/tmp。むしろ、 が何であるかを単に説明しているだけです/dev/shm

それでも、一つだけコメント最初の回答では、次のように述べています(今日現在):

/dev/shm を使用してもパフォーマンスは向上しません。/dev/shm はディスク (スワップ) によってバックアップされたメモリ (tmpfs) です。/var/tmp はディスク (オンディスク ファイルシステム) によってバックアップされたメモリ (ディスク キャッシュ) です。実際には、パフォーマンスはほぼ同じです (tmpfs の方がわずかに優れていますが、問題になるほどで​​はありません)。/tmp は、管理者の設定方法に応じて tmpfs になる場合とそうでない場合があります。スクリプトで /dev/shm を使用する理由はありません。

/dev/shmこのコメントは反論されず、他の回答やコメントは別のことを示唆しているため、より速いかどうかという疑問が残ります/tmp

注意:答えはおそらく「場合による」だろうということは承知しています。SU:SEでの質問どのファイルシステムを使用するかについては/tmpSOの関連質問

答え1

使用する場合、/dev/shmRAMに直接書き込むわけではありません。tmpfsファイルシステム、tmpfsすべてのファイルを仮想メモリ (RAM の拡張としてのディスク) に保存します。

からカーネル.org:

これを ramfs (tmpfs を作成するためのテンプレート) と比較すると、スワップと制限チェックが可能になります。もう 1 つの類似点は RAM ディスク (/dev/ram*) です。これは物理 RAM で固定サイズのハード ディスクをシミュレートしますが、その上に通常のファイル システムを作成する必要があります。Ramdisk はスワップできず、サイズを変更できません。

tmpfs はページ キャッシュとスワップ上に完全に存在するため、すべての tmpfs ページは /proc/meminfo では「Shmem」、free(1) では「Shared」と表示されます。これらのカウンターには共有メモリ (shmem、ipcs(1) を参照) も含まれることに注意してください。カウントを取得する最も信頼性の高い方法は、df(1) と du(1) を使用することです。

ラムスRAMベースのファイルシステムです:

Ramfs は、Linux のディスク キャッシュ メカニズム (ページ キャッシュと dentry キャッシュ) を動的にサイズ変更可能な RAM ベースのファイルシステムとしてエクスポートする非常にシンプルなファイルシステムです。

したがって、あなたの質問に答えると、両方 (/dev/shm と /tmp) がディスクを使用しているため、パフォーマンスは向上しません。

次の例を使用して、RAM に書き込むタイミングを確認できます。

mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free

関連情報