tmpfs ( T e temporary F ile S ystemの略) は、多くのUnix 系オペレーティングシステムに実装されている一時ファイルストレージ パラダイムです。マウントされたファイル システムとして表示されますが、データは永続的なストレージ デバイスではなく、 揮発性メモリに保存されます。
tmpfs の背後にある考え方は、どちらも揮発性メモリに保存されるファイル システムを提供するという点で、RAM ディスクの概念に似ていますが、実装は異なります。tmpfs は論理ファイル システムレイヤーで実装されますが、RAM ディスクは物理ファイル システムレイヤーで実装されます。つまり、RAM ディスクは、その上で通常のファイル システムが実行されている仮想ブロック デバイスですが、tmpfs は、基礎となるブロック デバイスがない仮想ファイル システムです。
セマンティクス
tmpfs に保存されるものはすべて一時的なもので、ハード ドライブなどの不揮発性ストレージにはファイルが直接作成されません(ただし、オペレーティング システムのページ置換ポリシーに従って、スワップ領域がバックアップ ストアとして使用されます)。再起動すると、tmpfs 内のすべての内容が失われます。
tmpfs が使用するメモリは、そこに含まれるファイルに合わせて増減します。
多くの Unixディストリビューションでは、ファイルシステムの/tmpブランチまたは共有メモリに対して、デフォルトで tmpfs を有効にして使用します。これは、次の例のように dfで確認できます。
ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 tmpfs 256M 688K 256M 1% /tmp
一部の Linux ディストリビューション (例: Debian ) では、デフォルトで/tmpに tmpfs がマウントされません。この場合、/tmpの下のファイルは/と同じファイル システムに保存されます。
また、ほとんどすべての Linux ディストリビューションでは、 PID ファイルやUnix ドメイン ソケットなどの一時的なランタイム ファイルを格納するために、tmpfs が/run/または/var/run/にマウントされます。
実装
tmpfs コンセプトには、いくつかの独立したバリエーションがあります。最も初期のものの 1 つはSun MicrosystemsによってSunOS 用に開発され、BSD や Linux などの他のオペレーティング システムでも独自のものが提供されました。
サンOS
SunOS 4には、おそらく最も初期のtmpfs実装が含まれています。これは、任意のオブジェクトをメモリマップできるようにする新しい直交アドレス空間管理とともに、1987年後半のSunOS 4.0で初めて登場しました。[1] [2]
Solarisの /tmpディレクトリは、 1992年12月にリリースされたSolaris 2.1 [3]以降、デフォルトでtmpfsファイルシステムになりました。 [4] Solarisのdfコマンドの出力には、tmpfsボリュームのバックグラウンドストレージとしてswap が表示されます。
# df -k ファイルシステムの使用済みキロバイト数 使用可能容量 マウント先 スワップ 601592 0 601592 0% /tmp/test
リナックス
tmpfs はLinux カーネルのバージョン 2.4 (2001 年 1 月 4 日) 以降でサポートされています。 [5] Linux tmpfs (以前はshm fsと呼ばれていました) [6] は起動時に使用される ramfs コードに基づいており、ページ キャッシュも使用しますが、ramfs とは異なり、あまり使用されていないページをスワップ スペースにスワップアウトしたり、メモリ不足の状況を防ぐためにファイルシステムのサイズと inode の制限を設定したりすることができます (デフォルトでは、それぞれ物理 RAM の半分と RAM ページ数の半分に設定されています)。[7]
BSDA の
4.2BSDではMFS [8]が導入されました。MFSは、既存のFFSディスクファイルシステムを仮想メモリ領域に 適用して実装されたメモリベースのファイルシステムです。
tmpfsは、MFSのパフォーマンスを向上させるために従来のメモリ内データ構造を使用して実装されたメモリファイルシステムであり、2005年9月10日に公式NetBSDソースツリーに統合されました。 [9] 4.0以降のバージョンで利用できます。
FreeBSDはNetBSDの実装を移植しており、バージョン7.0以降で利用可能である。[10]
DragonFly BSD はNetBSD の実装も移植しており、2.5.1 以降のバージョンで利用できます。
OpenBSDはNetBSDのtmpfs実装も移植した。これは当初Pedro Martellettoによって開始され、他の多くの人々によって改良された。これは2013年12月17日のビルドから有効化された。[11] tmpfsが組み込まれたOpenBSDの最初のリリースは5.5であった。[12] OpenBSD 6.0ではメンテナンス不足のためtmpfsが無効化された。
マイクロソフトウィンドウズ
Microsoft Windowsでは、FILE_ATTRIBUTE_TEMPORARYフラグを使用してファイルを作成すると、十分なキャッシュメモリが利用可能な場合、ファイルシステムはデータを不揮発性ストレージに書き戻すことを回避します。[13]
利点
RAM はディスク ストレージよりも高速であるため、tmpfs ではキャッシュをRAM に保存するとはるかに高速になり、システム全体の効率が向上します。ただし、空きメモリが十分であれば最近使用したファイル ページがメモリ内に残るため、ページ キャッシュを備えたオペレーティング システムではメリットが少なくなります。再起動時に RAM がクリアされるため、tmpfs ではユーザーが一時ファイルを手動で削除しなくても、システムが乱雑になるのを防ぎます。さらに、ファイルを RAM に保存すると、ディスクがすぐにいっぱいになるのを防ぎ、書き込み回数を減らすことで フラッシュ ベースのストレージの寿命を延ばすことができます。
デメリット
スワップ領域がないシステム、またはスワップ領域が不足しているシステムでは、tmpfs が大量のメモリを消費する可能性があります。
キャッシュ ファイルが tmpfs に保存されている場合、プログラムは再起動するとキャッシュされたデータを失います。
参考文献
- ^ Peter Snyder. 「tmpfs: 仮想メモリファイルシステム」(PDF) 。2007 年 5 月 7 日閲覧。
- ^ Hal L. Stern. 「SunOS 4.1 パフォーマンスチューニング」。2012 年 2 月 7 日にオリジナル( GZipped PostScript)からアーカイブ。2007 年 5 月 7 日に取得。
- ^ 「SPARC: Solaris ソフトウェアのインストール」(PDF)。SunSoft。1992 年 12 月。p. 9 。2019 年4 月 23 日閲覧。
- ^ 「Solaris オペレーティングシステム (Unix)」. operating-system.org .
- ^ Daniel Robbins (2001-09-01). 「Common threads: Advanced filesystem implementor's guide, Part 3」. IBM DeveloperWorks. 2012-02-03 にオリジナルからアーカイブ。2013-02-15に取得。
- ^ Daniel Robbins (2001-09-01). 「Common threads: Advanced filesystem implementor's guide, Part 3」. IBM DeveloperWorks. 2012-02-03 にオリジナルからアーカイブ。2013-02-15に取得。
- ^ Christoph Rohland、Hugh Dickins、KOSAKI Motohiro. 「tmpfs.txt」. kernel.org . 2010-03-16閲覧。
- ^ 「NetBSD mount_mfs(8) マニュアルページ」 2007-12-08 . 2013-02-15閲覧。
- ^ Julio M. Merino Vidal (2006-02-24). 「NetBSD-SoC: 効率的なメモリファイルシステム」。2013-02-15閲覧。
- ^ Xin LI (2013-04-23). 「FreeBSD tmpfs(5) manpage」 . 2008-12-02閲覧。
- ^ 「CVS: cvs.openbsd.org: src - tmpfs を有効にして、さらにテストします」。
- ^ “OpenBSD 5.5”. 2014年5月1日. 2014年5月1日閲覧。
- ^ alvinashcraft (2023-02-09). 「CreateFileA 関数 (fileapi.h) - Win32 アプリ」. learn.microsoft.com . 2024-06-27に取得。
外部リンク
- 「Solaris tmpfs(7FS) マニュアルページ」 。 2013年2月25日閲覧。
- 「Kernel.org tmpfs ドキュメント」。2015年 10 月 5 日に取得。
