メモリの断片化とシステムでスワップが有効になっているかどうかに関係がありますか?

メモリの断片化とシステムでスワップが有効になっているかどうかに関係がありますか?

答えの一つ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オブジェクト。

関連情報