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?
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?
Jawaban:
Sebenarnya tidak ada dphys-swapfile
program pada CD instalasi Ubuntu default dan tidak digunakan untuk menghitung ukuran swap .
Yang terjadi adalah ubiquity
penginstal menggunakan partman-auto
skrip dan file konfigurasi (disebut resep ) untuk menentukan ukuran semua partisi. Ini berfungsi seperti ini:
/proc/meminfo
).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:
Ini akan menjadi agak teknis tetapi menyenangkan untuk mencari tahu jadi begini ...
dphys-swapfile
dan di sini adalah kode Sumber . Opsi setup
digunakan 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.
dphys-swapfile
adalah pengaturan conf_swapsize
untuk 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:
Jadi default untuk sistem ini adalah 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.