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


8

回答の一つドI必要スワップ領域Iは、RAMのに十分な量以上のものを持っている場合は?によって測定されたメモリの断片化とcat /proc/buddyinfo スワップが使用されているかどうかの間に関係があるかどうか疑問に思いました。より具体的には、スワップを利用してメモリの断片化を減らすことができるかどうか疑問に思っています。通常の日は、私のシステムでswap offを使って作業していますが、次のようになっています。

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

これらのシステムはどちらもスワップが有効になっていないことに注意してください。


4
好奇心から、メモリが断片化されているとなぜ問題になるのでしょうか?シーク時間が重要なハードディスクのようなものではありません。とにかく、メモリは常にプロセスの仮想アドレス空間で論理的に連続しているように見えるため、ユーザー空間はメモリが物理レベルで断片化されているかどうかさえわかりません。それは、ページ変換テーブルがより複雑になるためでしょうか?
Celada、

良い質問。この条件は、スワップを使用する理由として発生しました。私は懐疑的であるので、スワップの使用とメモリの断片化との間の関係を探しています。見つけるつもりはありませんが、新しい情報に直面した場合でも、スタンスを変えていくつもりです。さらなるテストの後で、私はこれに自分で答えることになるかもしれません。
オタク長老

回答:


3

スワッピングを使用すると、ある目的に使用されているページのコンテンツをスワップアウトして別の目的に使用できるという意味で、物理ページを移動できます。

園芸品種の仮想メモリ管理システムでは、アプリケーションに関する限り、物理メモリの断片化などはありません。アプリケーションによって割り当てられた各ページは、物理メモリ内の任意の場所で取得できます。仮想メモリ内の2つの連続するページが物理メモリ内で特定の接近性を持つ必要がある理由はありません。

メモリの断片化が懸念される多くのケースがあります。物理メモリの場所が重要であるあらゆる状況です。これも:

  • 準仮想化。仮想マシンは、1ページよりも粗い粒度で、どの物理ページを誰が所有するかを決定します。
  • 同様に、複数のノードが同じRAMプールを共有するクラスター
  • ペリフェラルが使用するメモリ。通常、連続した大きなバッファが必要です。
  • 巨大ページなどの最適化。

「複雑な」シナリオがない場合、物理メモリの断片化により、隣接するメモリのプールを必要とする新しいデバイスの接続に問題が発生する可能性があります(カーネルはそのためのプールを保持しますが、ドライバーが突然大きくした場合、それらを拡大する必要がある可能性がありますリクエスト)。デバイスの使用率が一定の場合、物理的な断片化は問題にならず、特にアプリケーションの実行速度が低下したり、領域が不足したりすることはありません。

物理アドレス空間の断片化により、カーネルでより多くのメモリが使用され、空きリストを表す可能性があります。Linuxの場合はそうではないと思いますが、私はそのメモリ管理の専門家にはほど遠いです。

要約すると、アプリケーションの一部をスワップできるようにしても、このアプリケーションはより多くのメモリを割り当てることができませんが、一部のハードウェアドライバーは必要なメモリを割り当てることができます。

swapを追加しても、アプリケーションの仮想メモリ空​​間には影響しません。結局のところ、それがスワップのポイントです。アプリケーションにとって透過的です。

ただし、スワップをマシンに追加すると、アプリケーションの仮想メモリ空​​間内の断片化に間接的に影響を与える可能性があります。システムが仮想メモリを使い果たした場合、アプリケーションはそれが持っているもので間に合わなければなりません。アプリケーションがオペレーティングシステムから割り当てたメモリの大部分を使用している場合、時間の経過とともに、小さなブロックがあちこちに解放されるため、そのスペース内で断片化が発生します。アプリケーションがより多くの仮想メモリを持っている場合(一部はスワップアウトされます)、これによりメモリマネージャーが操作する余地が増え、アプリケーションがメモリ不足になるリスクが軽減されます。 4kBオブジェクト。


すべての答えがどのように新しい質問につながるのか興味深いではありませんか?今、私は、メモリ管理の操作の順序と、メモリ不足状態に達する前にメモリを解放するために失敗しなければならないテクニックに興味を持っています。私の想定では、キャッシュは最も重要ではなく、最初にダンプされます。私はここのどこかに真実の核があることを知っています(しゃれた意図)。;-)
オタク長老

@ElderGeek- おそらく、Documentation / cgroups / memory.txtから始めるのがよいでしょう。それは絶望的に時代遅れですが、それはカーネルメモリコントローラの概要をかなりよくします。
mikeserv 2015年

@mikeservありがとうございます。また、landley.net / writing / memory - faq.txtも見つかりましたが、これは「絶望的に古くなっている」ように見えますが、少なくとも、殺害に頼る前にRAMを解放するためにキャッシュを論理的にダンプすることに関する私の理論のようですプロセスは正確です。コード自体を掘り下げることなく、それについてもっと学ぶことはないと思います。私は何十年もbashスクリプト以外のコードを何も書いていないので、それは私を少し超えているかもしれません...
ギーク長老
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.