私はこれが単純化/一般化された説明であることを知っていますが、ユーティリティはtop(1)
FreeBSDのメモリを6つのプールActive
(Inactive
、、、、Wired
およびCache
)に分割します。出力例:Buffers
Free
top(1)
Mem: 130M Active, 42M Inact, 51M Wired, 14M Cache, 34M Buf, 648K Free
Swap: 512M Total, 512M Free
Active
Wired
主にカーネルで実行されているプロセスに使用されます。Inactive
再使用が必要な場合に備えて、まだキャッシュされている閉じたプロセスのメモリ、キャッシュされたCache
データ、ディスクバッファ(Linux出力(?)Buffers
に似ていると思います)、完全に未使用のメモリです。 FreeBSDカーネルは、プール内または必要に応じて自動的にスペースを割り当てます。そうですか?cached
free(1)
Free
Inactive
Cache
Buffers
Active
Wired
答え1
要するに、ポジティブそして熱狂使用されているメモリは、使用可能なメモリと交換してはいけません。しかし、非アクティブ適切に置き換えることはできますが、まだプロセスやカーネルが所有しているため(解放されていない)、メモリをあまり使用しませんが、それでも使用されます。
新しいもの洗濯これは、スワップデバイスに書き込む必要があるダーティメモリページのリストです。ダーティメモリを交換する必要があるかどうかに関係なく、そのメモリは非アクティブキューに追加されます。
熱狂安全(カーネルの場合)やユーザー領域プロセスの最適化(ZFSなど)のためにメモリを交換しないでください。有線メモリはファイルシステムのキャッシュに使用され、カーネルによって解放される可能性があります。少なくともZFSの場合、これはほとんど空きメモリと見なすことができます。
無料メモリは完全に無料です。
隠れ家(現在は使用されていないようです)は交換されており、可能な再割り当てにのみ使用されるため、解除する準備ができています。
バッファーほとんどのファイルシステム(UFS、FAT ...)でキャッシュとして使用され、ファイルシステムで使用されるメモリ量。アクティブ、非アクティブ、または有線のいずれかです。
ホ(適応代替キャッシュ)はZFSによって使用されるキャッシュであり、必要に応じて解放できるメモリです。
メモリクラス
ポジティブ
- ユーザースペースの「アクティブ」(最近の)参照を含むページ
- きれいなページとダーティページが混在しています
- ページデーモンはページを定期的にスキャンします(各ページはvm.pageout_update_period秒ごとにアクセスされます)。
- スキャンは、最後のスキャン以降にページが参照されていることを確認します。
- 参照を見ずに十分なスキャンが完了すると、ページは非アクティブキューに移動されます。
- 擬似LRUの実装
非アクティブ
- アクティブなキューを超えたページが含まれています。
- バッファキャッシュから削除されたページを含みます。
- きれいなページとダーティページが混在しています
- メモリが不足すると、ページデーモンはページをスキャンします(キューの先頭から始まります)。
- 参照されたページは、アクティブキューまたは非アクティブキューの最後に戻ります。
- ダーティページはランドリーキューの最後に移動されます。
- 参照されていないクリーンページはすぐに解放され、再利用可能
- セカンドチャンスLRUの実装
洗濯
- 再利用する前にクリーンアップ(「洗浄」)する必要があるダーティ、非アクティブページを管理するために使用されるキュー
- ページデーモンの代わりに別々のスレッド(ランドリースレッド)として管理されます。
- ランドリースレッドは、非アクティブキューとランドリーキューのバランスをとるために少数のページをクリーンアップします。
- 清掃の頻度は次のとおりです。
- ページデーモンがどのくらいクリーンページを解放するか、より多くの自由度はより高い洗濯頻度につながります。
- 非アクティブキューに比べてランドリーキューのサイズ。洗濯キューが長くなると、服をより頻繁に洗濯することになります。
- ページはランドリースレッドによってスキャンされます(キューの先頭から始まります):
- 参照されたページは、アクティブキューまたはランドリーキューの最後に戻されます。
- ダーティページはクリーンアップされ、次に非アクティブキューの先頭に移動します。
無料
- システムの残りの部分で使用できるメモリです。
熱狂
- ページング不可能なメモリ:所有者が明示的に解放されるまで解放できません。
- ユーザーモードメモリはmlock(2)を介して接続できます(システムとユーザーによって制限されます)
- カーネルメモリアロケータは有線メモリを返します。
- ARCの内容とバッファキャッシュが接続されています。
- 一部のメモリは永久に接続されており、解放されません(カーネルファイル自体など)。
~からFreeBSDオペレーティングシステムの設計と実装6.12章ページの交換(もはや完全に正確ではなく、前の質問を参照するためにここにあります):
カーネルはメインメモリを5つのリストに分割します。
- 熱狂:リンクされたページがメモリにロックされているため、読み込めません。通常、これらのページはカーネルまたは物理メモリポケットベルで使用中またはロックされています。モルロック。ロードされた(つまり、置き換えられていない)プロセスのスレッドスタックを保持するすべてのページもリンクされます。
- ポジティブ: アクティブページが 1 つ以上の仮想メモリ領域で使用されています。カーネルはそれを呼び出すことができますが、そうするとアクティブプロセスが再び失敗する可能性があります。
- 非アクティブ:非アクティブページは汚れており、まだ既知のコンテンツを含めることができますが、通常アクティブ領域には属していません。ページのコンテンツが汚れている場合は、ページを再利用する前にそのコンテンツをバックアップストアに書き込む必要があります。ページがクリーンアップされると、キャッシュリストに移動します。システムメモリが不足している場合、ページングデーモンは実際に使用されていないページを見つけるためにアクティブページを非アクティブリストに移動しようとします。このセクションの後半では、アクティブリストから非アクティブリストに移動するページを選択するためにページコールアウトデーモンが使用する選択基準について説明します。使用可能なメモリとキャッシュのリストが低レベルに低下すると、ページングデーモンは、より多くのキャッシュと使用可能なページを生成するために非アクティブリストを巡回します。
- 隠れ家:キャッシュされたページの内容はまだ知られていますが、マッピングの一部ではありません。アクティブ領域に欠陥がある場合、どのマッピングにも属しません。アクティブ領域で失敗すると、キャッシュリストからアクティブリストに移動されます。読み取りまたは書き込みに使用される場合、まずキャッシュリストからバッファキャッシュに移動され、最終的に非アクティブリストに解放されます。一つモルロックシステムコールは、キャッシュリストからページを回収してリンクできます。キャッシュリストのページは、ページ化後に変更されていないか、バックアップストアに書き込まれたためダーティではないことを除いて、非アクティブページと似ています。ページが必要なときに新しい目的で宣言できます。
- 無料: アイドルページには有用なコンテンツがなく、新しいページエラーリクエストを満たすために使用されます。
元の質問に答えるには
必要に応じて、FreeBSDカーネルが自動的に非アクティブプール、キャッシュプール、およびバッファプールのスペースをアクティブプールまたは有線プールに割り当てることは正しいですか?
ポジティブページになることができます非アクティブしばらく使っていなかったら。カーネル非アクティブページこのページは次に移動されました。隠れ家リスト。ページは次の場所にあります。隠れ家リストはプロセスの仮想マップの一部ではありませんが、簡単にリサイクルできます。ポジティブまたは熱狂。またはI/Oが必要な場合バッファー隠れ家。
熱狂メモリはメインメモリで交換できません。プロセスによって接続されている場合は、呼び出しによってmunlock
接続をキャンセルする必要があります。ポジティブもう一度覚えてください。
ポジティブ、非アクティブそして熱狂メモリはプロセスまたはカーネルによって解放され、次に追加できます。無料リスト。