答えの一つRAMが十分な場合は、スワップスペースが必要ですか?cat /proc/buddyinfo
測定されたメモリの断片化とスワップを使用するかどうかの間にどのような関係があるのか疑問に思います。より具体的に言えば、スワップを利用することでメモリの断片化を減らすことができるかどうかを知りたいです。通常、私のシステムでスワップが機能すると、次の結果が表示されます。
tvbox@tvbox-G31M-ES2L:~$ cat /proc/buddyinfo
Node 0, zone DMA 3 3 4 14 16 6 2 0 0 1 0
Node 0, zone Normal 1564 1052 462 356 240 109 33 21 6 1 0
Node 0, zone HighMem 43 1972 839 285 183 109 98 34 16 0 0
tvbox@tvbox-G31M-ES2L:~$ free
total used free shared buffers cached
Mem: 2053888 1821904 231984 171376 299908 812940
-/+ buffers/cache: 709056 1344832
Swap: 0 0 0
注:システムの稼働時間は18時間を超えません。
より一般的なシステムには次のものがあります。
me@me-zippy:~$ cat /proc/buddyinfo
Node 0, zone DMA 149 106 70 26 15 5 4 0 0 2 0
Node 0, zone Normal 2455 3527 4651 1421 367 157 61 19 14 3 0
Node 0, zone HighMem 7 43 75 266 166 162 91 43 27 0 0
me@me-zippy:~$ free -h
total used free shared buffers cached
Mem: 7.4G 7.0G 351M 281M 116M 6.0G
-/+ buffers/cache: 967M 6.4G
Swap: 0B 0B 0B
me@me-zippy:~$ uptime
12:01:49 up 3 days, 3:20, 2 users, load average: 0.52, 0.23, 0.17
これらのシステムのどれもスワップが有効になっていないことがわかります。
答え1
スワッピングを使用すると、物理ページを移動できます。つまり、ある目的で使用されているページの内容を置き換えてから、別の目的で使用できることを意味します。
さまざまな仮想メモリ管理システムでは、アプリケーションに関する限り、物理メモリの断片化などはありません。アプリケーションによって割り当てられた各ページは物理メモリ内の任意の場所に配置でき、仮想メモリの2つの連続したページは物理メモリに特定の近接性を持つ必要はありません。
メモリの断片化は、物理メモリの場所が重要なすべての状況など、さまざまな状況で問題になります。これには以下が含まれます。
- 半仮想化ここで、仮想マシンは、誰がどのページを所有するのかを、1ページよりもおおよその詳細レベルで決定します。
- 同様に、群れ複数のノードが同じ RAM プールを共有します。
- 周辺機器で使用されるメモリには、通常、大規模な連続バッファが必要です。
- たとえば、最適化大きなページ。
「複雑な」シナリオがないと、物理メモリの断片化のために連続したメモリプールを必要とする新しいデバイスを接続するときに問題が発生する可能性があります。 (カーネルはこのためにこれらのプールを予約しますが、ドライバが突然大量のメモリを生成する場合はそれを拡張する必要があるかもしれません)。デバイス使用量が一定の場合、物理的な断片化は重要ではありません。特に、これによりアプリケーションの実行が遅くなったり、スペースが足りなくなったりする場合は、さらにそうです。
物理アドレス空間の断片化のために、使用可能なリストを表示するために、カーネル内でより多くのメモリを使用することができる。私はこれがLinuxの場合だとは思わないが、メモリ管理の専門家からは遠い。
要約すると、アプリケーションの一部を置き換えることができても、アプリケーションがより多くのメモリを割り当てるわけではありませんが、特定のハードウェアドライバが必要なメモリを割り当てることになります。
スワップを追加しても、アプリケーションの仮想メモリ空間には影響しません。結局、これは交換の核心です。これはアプリケーションにとって透明です。
ただし、マシンにスワップを追加すると、アプリケーションの仮想メモリ空間内の断片化に間接的な影響を与える可能性があります。システムに仮想メモリが不足している場合、アプリケーションは保持したメモリを使用する必要があります。アプリケーションがオペレーティングシステムによって割り当てられたメモリの大部分を使用している場合、時間の経過とともにあちこちに小さなチャンクが解放されるため、その領域内で断片化が発生します。アプリケーションに仮想メモリが多い場合(一部は置き換えられます)、メモリマネージャにはより多くのワークスペースが用意されているため、別々の2kBブロックが必要な場合にアプリケーションにメモリが不足するリスクが軽減されます。使用されます。 4kBオブジェクト。