Was ist die Standard-Swap-Größe?


16

Wie berechnet das Installationsprogramm die Größe der zu erstellenden Swap-Partition? Vermutlich basiert es auf der installierten RAM-Größe. Aber hängt das davon ab, wie viel RAM vorhanden ist?


Es gibt keinen Standardwert. Dies hängt davon ab, wie viel RAM Sie haben.
Uri Herrera

1
Nun ja, aber ich habe nach etwas mehr Details gesucht als "es kommt darauf an". Ist es immer ein festes Vielfaches der RAM-Größe oder hängt es davon ab, wie viel RAM vorhanden ist? Beispielsweise würden große RAM-Größen niemals mehr als genug benötigen, um den Ruhezustand zu ermöglichen, aber sehr kleine RAM-Größen könnten von einem Swap profitieren, der beträchtlich größer als 1: 1 ist.
Seret

Antworten:


5

Tatsächlich befindet sich kein dphys-swapfileProgramm auf einer Ubuntu-Standardinstallations-CD, und es wird nicht zur Berechnung der Swap- Größe verwendet.

Das ubiquityInstallationsprogramm verwendet die partman-autoSkripts und Konfigurationsdateien (so genannte Rezepte ), um die Größe aller Partitionen zu bestimmen. Das funktioniert so:

  • Partman findet die richtige Rezeptdatei entsprechend dem Computertyp und der vom Benutzer gewählten Option.
  • Dort findet es die minimale und maximale Größe der Partition und deren Priorität. Für den Tausch kann er 96 (min - in MB) 512 (Priorität) 300% (max) betragen.
  • Dann erhält es die RAM-Größe (via /proc/meminfo).
  • Es verwendet einen eigenen Algorithmus, um die Größen zu berechnen.

Einzelheiten:

Eine Rezeptdatei kann folgendermaßen aussehen:

1 1 1 free
    $iflabel{ gpt }
    method{ biosgrub } .

500 10000 -1 $default_filesystem
    $lvmok{ }
    method{ format }
    format{ }
    mountpoint{ / } .

96 512 300% linux-swap
    $lvmok{ }
    method{ swap }
    format{ } .

Der Algorithmus zur Berechnung der Größen:

for(i=1;i<=N;i++) {
   factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
   minsum = min[1] + min[2] + ... + min[N];
   factsum = factor[1] + factor[2] + ... + factor[N];
   ready = TRUE;
   for(i=1;i<=N;i++) {
      x = min[i] + (free_space - minsum) * factor[i] / factsum;
      if (x > max[i])
         x = max[i];
      if (x != min[i]) {
         ready = FALSE;
         min[i] = x;
      }
   }
}

Für mehr sehen Sie:


Interessante Debatte: Eine bessere Referenz als eine fremde Debian-Website?
Enzotib

Nun, ich habe das auch gefunden, als ich danach gesucht habe, aber das Paket hat eine "Warnung: Dieses Paket ist nur für die Erstellung von Debian-Installer-Images gedacht. Installieren Sie es nicht auf einem normalen Ubuntu-System." Ich nahm an, dass dies nicht verwendet wurde, also suchte ich weiter und fand den Code für dphys-swapfile>: - D Hmm in der Tat interessant.
Rinzwind

@enzotib: warum seltsam?
vereinbaren Sie den

@arrange: seltsam, weil keine offizielle Ubuntu-Site und auch als Debian-Site keine offizielle zu sein scheint.
Enzotib

Ich habe 2 weitere Methoden zur Berechnung der Swap-Größe D gefunden: Diese Methode verwendet grep ^ Mem: / proc / meminfo oder wenn das 0 ist grep ^ MemTotal: / proc / meminfo und multipliziert dann mit 2 (Standard) oder 3 (die meisten sind auf gesetzt) 300%) mit einem Minimum pro Architektur. Ein mipsel-sb1-bcm91250a verwendet eine feste 512. i386-efi verwendet 200%.
Rinzwind

19

Dies wird eher technisch sein, aber es hat Spaß gemacht, es herauszufinden, und so geht es weiter ...

  • Ich habe ein Paket gefunden dphys-swapfileund hier ist der Quellcode . Option setupwird verwendet, um es einzurichten:
setup - weist dphys-swapfile an, die optimale Größe der Auslagerungsdatei zu berechnen und
Eine passende Auslagerungsdatei (neu) generieren. Standardmäßig 2-fache RAM-Größe.
Dies kann beim Booten aufgerufen werden, so dass die Datei immer die
Die richtige Größe für den aktuellen Arbeitsspeicher oder die Ausführung von Hand, wann immer dies der Fall ist
geändert.
  • Darin dphys-swapfilebefindet sich eine Einstellung conf_swapsizefür eine vordefinierte Größe (in Natty ist diese leer):
Größe, die erzwungen werden soll, Standard (leer) ergibt 2 * RAM
CONF_SWAPSIZE =

und eine Einstellung für eine swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • Die tatsächliche Größe wird etwas weiter unten berechnet:

    if ["$ {CONF_SWAPSIZE}" = ""]; dann
      # Automatische optimale Größe berechnen
      echo -n "Rechengröße"
      # Dies scheint der physischen RAM-Größe am nächsten zu sein, es fehlen etwa 60 KB
      KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `"
      # mache MByte, die abgerundet sind, genau 1 zu wenig, also addiere 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1 "
      # Standard, ohne dass die Konfigurationsdatei überschrieben wird, swap = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `"
    fi

Wie Sie sehen können, hängt die Art und Weise, wie sie in diesem Paket berechnet wird, von der Größe von ab /proc/kcore, wird dann durch 1048576, +1 geteilt, um es aufzurunden, und wird dann mit dem Swap-Faktor multipliziert. Von meiner Maschine:

Bildbeschreibung hier eingeben

Die Standardeinstellung für dieses System wäre 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MByte.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.