Berapa ukuran swap default?

16

Bagaimana cara pemasang menghitung berapa ukuran partisi swap yang akan dibuat? Mungkin ini didasarkan pada ukuran RAM yang diinstal, tetapi apakah itu tergantung pada berapa banyak RAM?

Seret
sumber
Tidak ada nilai Default tergantung pada berapa banyak RAM yang Anda miliki.
Uri Herrera
1
Ya, tapi saya mencari sedikit lebih detail daripada "itu tergantung". Apakah selalu merupakan kelipatan dari ukuran RAM, atau apakah itu tergantung pada berapa banyak RAM yang ada? Sebagai contoh, ukuran RAM yang besar tidak akan pernah membutuhkan lebih dari cukup untuk mengaktifkan hibernasi, tetapi ukuran RAM yang sangat kecil dapat mengambil manfaat dari swap yang jauh lebih besar dari 1: 1.
Seret

Jawaban:

5

Sebenarnya tidak ada dphys-swapfileprogram pada CD instalasi Ubuntu default dan tidak digunakan untuk menghitung ukuran swap .

Yang terjadi adalah ubiquitypenginstal menggunakan partman-autoskrip dan file konfigurasi (disebut resep ) untuk menentukan ukuran semua partisi. Ini berfungsi seperti ini:

  • Partman menemukan file resep yang tepat sesuai dengan jenis komputer dan opsi yang dipilih pengguna.
  • Di sana ia menemukan ukuran minimum dan maksimum dari partisi dan prioritasnya. Untuk swap bisa 96 (min - in MB) 512 (prioritas) 300% (maks).
  • Kemudian ia mendapatkan ukuran RAM (via /proc/meminfo).
  • Ini menggunakan algoritma sendiri untuk menghitung ukuran.

Detail:

Sebuah resep file yang bisa terlihat seperti ini:

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

Algoritma untuk menghitung ukuran:

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

Untuk lebih lanjut lihat:

mengatur
sumber
Debat yang menarik: referensi yang lebih baik daripada situs web debian yang aneh?
enzotib
Yah saya menemukan itu juga ketika saya mencarinya tetapi paket itu memiliki "Peringatan: Paket ini dimaksudkan untuk digunakan dalam membangun gambar installer debian saja. Jangan menginstalnya pada sistem Ubuntu yang normal.". Saya berasumsi ini tidak digunakan jadi saya mencari dan menemukan kode untuk dphys-swapfile>: - D Hmm memang menarik.
Rinzwind
@enzotib: kenapa aneh?
mengatur
@ mengatur: aneh karena bukan situs ubuntu resmi, dan juga sebagai situs debian sepertinya tidak resmi.
enzotib
Saya menemukan 2 metode lagi untuk menghitung ukuran swap D: Metode ini menggunakan grep ^ Mem: / proc / meminfo atau jika 0 grep ^ MemTotal: / proc / meminfo dan kemudian dikalikan dengan 2 (default) atau 3 (sebagian besar disetel untuk 300%) dengan minimum per arsitektur. Mipsel-sb1-bcm91250a menggunakan 512 tetap. I386-efi menggunakan 200%.
Rinzwind
19

Ini akan menjadi agak teknis tetapi menyenangkan untuk mencari tahu jadi begini ...

  • Saya menemukan paket dphys-swapfiledan di sini adalah kode Sumber . Opsi setupdigunakan untuk mengaturnya:
setup - memberitahu dphys-swapfile untuk menghitung ukuran file swap optimal dan
(kembali) menghasilkan file swap yang pas. Default-nya 2 kali ukuran RAM.
Ini dapat dipanggil pada saat boot, sehingga file selalu tetap
ukuran yang tepat untuk RAM saat ini, atau dijalankan dengan tangan kapan pun ukuran RAM terjadi
berubah.
  • Di dalamnya dphys-swapfileadalah pengaturan conf_swapsizeuntuk ukuran yang ditentukan sebelumnya (di Natty ini kosong):
ukuran yang kita ingin paksa, default (kosong) memberikan 2 * RAM
CONF_SWAPSIZE =

dan pengaturan untuk swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • Ukuran sebenarnya dihitung sedikit lebih jauh pada:

    jika ["$ {CONF_SWAPSIZE}" = ""]; kemudian
      # Menghitung ukuran optimal otomatis
      echo -n "ukuran komputasi,"
      # ini tampaknya yang terdekat dengan ukuran RAM fisik, kurang sekitar 60k
      KCORESIZE = "` ls -l / proc / kcore | awk '{print $ 5}' `"
      # buat MBytes yang dibulatkan menjadi tepat 1 terlalu sedikit, jadi tambahkan 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # default, tanpa menimpa file konfigurasi, swap = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `"
    fi

Seperti yang Anda lihat cara mereka menghitungnya dalam paket ini tergantung pada ukurannya /proc/kcore, kemudian dibagi dengan 1048576, +1 untuk mengumpulkannya dan kemudian dikalikan dengan swapfactor. Dari mesin saya:

masukkan deskripsi gambar di sini

Jadi default untuk sistem ini adalah 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.

Rinzwind
sumber