Jaki jest domyślny rozmiar zamiany?

16

W jaki sposób instalator oblicza, jaki rozmiar partycji wymiany należy utworzyć? Prawdopodobnie opiera się na wielkości zainstalowanej pamięci RAM, ale czy zależy to od ilości pamięci RAM?

Seret
źródło
Nie ma wartości domyślnej, zależy to od ilości pamięci RAM.
Uri Herrera
1
No tak, ale szukałem trochę więcej szczegółów niż „to zależy”. Czy zawsze jest to wielokrotność wielkości pamięci RAM, czy zależy to od ilości pamięci RAM? Na przykład duże rozmiary pamięci RAM nigdy nie wymagałyby więcej niż wystarczającej ilości, aby umożliwić hibernację, ale bardzo małe rozmiary pamięci RAM mogłyby skorzystać z zamiany znacznie większej niż 1: 1.
Seret

Odpowiedzi:

5

W rzeczywistości dphys-swapfilena domyślnym instalacyjnym dysku CD z systemem Ubuntu nie ma programu i nie jest on używany do obliczania wielkości wymiany .

To, co się dzieje, polega na tym, że ubiquityinstalator używa partman-autoskryptów i plików konfiguracyjnych (zwanych przepisami ) do określania rozmiarów wszystkich partycji. Działa to tak:

  • Partman znajduje odpowiedni plik receptury zgodnie z typem komputera i opcją wybraną przez użytkownika.
  • Tam znajduje minimalny i maksymalny rozmiar partycji oraz jej priorytet. W przypadku wymiany może wynosić 96 (min - w MB) 512 (priorytet) 300% (maks.).
  • Potem dostaje rozmiar pamięci RAM (przez /proc/meminfo).
  • Używa własnego algorytmu do obliczania rozmiarów.

Detale:

Plik przepisu może wyglądać następująco:

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{ } .

Algorytm do obliczania rozmiarów:

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;
      }
   }
}

Więcej informacji:

zorganizować
źródło
Interesująca debata: lepsza referencja niż dziwna strona debiana?
enzotib
Cóż, znalazłem to również, kiedy szukałem, ale pakiet ma „Ostrzeżenie: Ten pakiet jest przeznaczony do użytku tylko w budowaniu obrazów instalatora Debiana. Nie instaluj go w normalnym systemie Ubuntu.”. Założyłem, że to nie zostało użyte, więc poszukałem kodu dphys-swapfile>: - D Hmm, naprawdę interesujące.
Rinzwind
@enzotib: dlaczego dziwny?
umówić
@arrange: dziwne, ponieważ nie jest to oficjalna strona Ubuntu, a także jako strona debian nie wydaje się oficjalna.
enzotib
Znalazłem 2 kolejne metody obliczania wielkości wymiany D: Ta metoda używa grep ^ Mem: / proc / meminfo lub jeśli jest to 0 grep ^ MemTotal: / proc / meminfo, a następnie mnoży się przez 2 (domyślnie) lub 3 (większość jest ustawiona na 300%) z minimum na architekturę. Mipsel-sb1-bcm91250a używa stałej 512. i386-efi używa 200%.
Rinzwind
19

To będzie raczej techniczne, ale fajnie było się tego dowiedzieć, więc proszę ...

  • Znalazłem pakiet, dphys-swapfilea tutaj jest kod źródłowy . Opcja setupsłuży do konfiguracji:
setup - informuje dphys-swapfile, aby obliczył optymalny rozmiar pliku wymiany i
(ponownie) wygeneruj odpowiedni plik wymiany. Domyślnie jest to 2 razy rozmiar pamięci RAM.
Można to wywołać podczas uruchamiania, więc plik zawsze pozostaje
odpowiedni rozmiar dla bieżącej pamięci RAM lub uruchamiany ręcznie, gdy tylko rozmiar pamięci RAM ma
zmienione.
  • Wewnątrz dphys-swapfileznajduje się ustawienie conf_swapsizedla z góry określonego rozmiaru (w Natty jest to puste):
rozmiar, który chcemy wymusić, to domyślny (pusty) daje 2 * RAM
CONF_SWAPSIZE =

i ustawienie dla swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • Rzeczywisty rozmiar jest obliczany nieco dalej na:

    if ["$ {CONF_SWAPSIZE}" = ""]; następnie
      # obliczyć automatyczny optymalny rozmiar
      echo -n „rozmiar komputera”
      # wydaje się, że jest to najbliższy rozmiar fizyczny RAM, brakuje około 60k
      KCORESIZE = "` ls -l / proc / kcore | awk '{print 5 $}' '
      # make MBytes, który w zaokrągleniu w dół będzie dokładnie o 1 za mało, więc dodaj 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # default, bez zastępowania pliku konfiguracyjnego, zamiana = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '* * „$ {SWAPFACTOR}” „”
    fi

Jak widać sposób ich obliczania w tym pakiecie zależy od wielkości /proc/kcore, a następnie jest dzielony przez 1048576, +1, aby zaokrąglić w górę, a następnie zostaje pomnożony przez współczynnik zamiany. Z mojej maszyny:

wprowadź opis zdjęcia tutaj

Domyślna wartość dla tego systemu to 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MB.

Rinzwind
źródło