Gibt es einen Zusammenhang zwischen der Speicherfragmentierung und der Frage, ob der Swap auf einem System aktiviert ist oder nicht?

8

Eine der Antworten auf Benötige ich Swap-Speicherplatz, wenn ich mehr als genug RAM habe? Ich habe mich gefragt, ob es einen Zusammenhang zwischen der Speicherfragmentierung gibt, gemessen an cat /proc/buddyinfo und ob Swap verwendet wird oder nicht. Um genauer zu sein, frage ich mich, ob die Verwendung von Swap die Speicherfragmentierung reduzieren kann. Während eines normalen Arbeitstages mit ausgeschaltetem Swap auf meinem System habe ich Folgendes:

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

Hinweis: Dieses System hat eine Betriebszeit von nie mehr als 18 Stunden.

Auf einem stärker ausgelasteten System habe ich Folgendes:

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

Sie werden feststellen, dass für keines dieser Systeme der Austausch aktiviert ist.

Elder Geek
quelle
4
Warum sollte es aus Neugier wichtig sein, wenn die Erinnerung fragmentiert wäre? Es ist nicht wie bei einer Festplatte, auf der Suchzeit wichtig ist. Der Speicher wird im virtuellen Adressraum des Prozesses ohnehin immer logisch zusammenhängend angezeigt, sodass der Benutzerbereich nicht einmal erkennen kann, ob der Speicher auf physischer Ebene fragmentiert ist. Liegt es daran, dass die Seitenübersetzungstabellen komplizierter werden?
Celada
Gute Frage. Die Bedingung wurde als Grund für die Verwendung von Swap angeführt. Ich bin weiterhin skeptisch und suche nach einem Zusammenhang zwischen der Verwendung von Swap und der Speicherfragmentierung. Ich erwarte nicht, einen zu finden, aber ich bin immer bereit, meine Haltung angesichts neuer Informationen zu ändern. Möglicherweise beantworte ich diese Frage nach weiteren Tests selbst.
Elder Geek

Antworten:

3

Durch das Austauschen können physische Seiten verschoben werden, in dem Sinne, dass der Inhalt einer Seite, die für einen bestimmten Zweck verwendet wird, ausgetauscht und dann für einen anderen Zweck verwendet werden kann.

Unter einem virtuellen Speichermanagementsystem der Gartenvielfalt gibt es keine Fragmentierung des physischen Speichers in Bezug auf Anwendungen. Jede von einer Anwendung zugewiesene Seite kann an einer beliebigen Stelle im physischen Speicher abgelegt werden. Es gibt keinen Grund, warum zwei aufeinanderfolgende Seiten im virtuellen Speicher eine bestimmte Nähe im physischen Speicher aufweisen müssten.

Es gibt viele Fälle, in denen die Speicherfragmentierung ein Problem darstellt: alle Umstände, unter denen der physische Speicherort von Bedeutung ist. Das beinhaltet:

  • Paravirtualisierung , bei der virtuelle Maschinen entscheiden, wem welche physische Seite gehört, und zwar mit einer Granularität, die gröber als eine Seite ist.
  • Ebenso Cluster, in denen mehrere Knoten denselben RAM-Pool verwenden.
  • Von Peripheriegeräten verwendeter Speicher, für den normalerweise große zusammenhängende Puffer erforderlich sind.
  • Optimierungen wie große Seiten .

Wenn keine „komplexen“ Szenarien vorliegen, kann die Fragmentierung des physischen Speichers zu Problemen beim Anschließen eines neuen Geräts führen, für das ein Pool zusammenhängender Speicher erforderlich ist (der Kernel behält solche Pools dafür bei, sie müssen jedoch möglicherweise vergrößert werden, wenn ein Treiber plötzlich einen großen Speicher erstellt Anfrage). Wenn die Gerätenutzung konstant ist, spielt die physische Fragmentierung keine Rolle und führt insbesondere nicht dazu, dass eine Anwendung langsamer ausgeführt wird oder nicht genügend Speicherplatz zur Verfügung steht.

Es ist möglich, dass eine Fragmentierung des physischen Adressraums dazu führt, dass mehr Speicher im Kernel verwendet wird, um die freie Liste darzustellen. Ich glaube nicht, dass dies unter Linux der Fall ist, aber ich bin weit davon entfernt, ein Experte für die Speicherverwaltung zu sein.

Zusammenfassend lässt sich sagen, dass durch das Zulassen des Austauschs eines Teils einer Anwendung dieser Anwendung nicht mehr Speicher zugewiesen werden kann. Einige Hardwaretreiber können jedoch den erforderlichen Speicher zuweisen.

Das Hinzufügen von Swap hat keine Auswirkungen auf den virtuellen Speicherplatz der Anwendung. Das ist schließlich der Punkt des Austauschs - er ist für Anwendungen transparent.

Es ist jedoch möglich, dass das Hinzufügen von Swap zu einer Maschine einen indirekten Einfluss auf die Fragmentierung im virtuellen Speicherbereich einer Anwendung hat. Wenn dem System der virtuelle Speicher ausgeht, muss die Anwendung mit dem auskommen, was sie hat. Wenn die Anwendung den größten Teil des vom Betriebssystem zugewiesenen Speichers verwendet, führt dies im Laufe der Zeit zu einer Fragmentierung innerhalb dieses Bereichs, da hier und da kleine Blöcke freigegeben werden. Wenn die Anwendung über mehr virtuellen Speicher verfügt (von dem einige ausgelagert sind), hat der Speichermanager mehr Spielraum und verringert das Risiko, dass der Anwendung der Speicher ausgeht. Drei separate 2-KB-Blöcke stehen zur Verfügung, wenn ein einzelner gewünscht wird 4kB Objekt.

Gilles 'SO - hör auf böse zu sein'
quelle
Ist es nicht interessant, wie jede Antwort zu einer neuen Frage führt? Jetzt bin ich neugierig auf die Reihenfolge der Speicherverwaltung und darauf, welche Techniken zum Freigeben von Speicher fehlschlagen müssen, bevor ein Zustand ohne Speicher erreicht wird. Ich gehe davon aus, dass der Cache am wenigsten wichtig ist und zuerst ausgegeben wird. Ich weiß, dass hier irgendwo ein Kern der Wahrheit ist (Wortspiel beabsichtigt). ;-)
Elder Geek
@ElderGeek - Documentation / cgroups / memory.txt ist wahrscheinlich ein guter Anfang. Obwohl es hoffnungslos veraltet ist, gibt es einen guten Überblick über den Kernel-Speichercontroller.
Mikeserv
@mikeserv Danke dafür. Ich fand auch - landley.net/writing/memory-faq.txt, das ebenfalls "hoffnungslos veraltet" zu sein scheint, aber zumindest scheint es meine Theorie bezüglich des logischen Dumpings des Caches zuerst zu sein, um RAM freizugeben, bevor auf das Töten zurückgegriffen wird Prozesse sind genau. Ich bezweifle, dass ich viel mehr darüber lernen werde, ohne mich mit dem Code selbst zu befassen. Das könnte ein bisschen über mich hinausgehen, da ich seit Jahrzehnten keinen Code mehr geschrieben habe, der über Bash-Skripte hinausgeht ...
Elder Geek