什么是默认的交换大小?
安装程序如何计算要创建的交换分区的大小? 据推测它是基于已安装的RAM大小,但这取决于RAM多少?
实际上在默认的Ubuntu安装CD上没有dphys-swapfile
程序,它不用于计算交换大小。
会发生什么是ubiquity
安装程序使用partman-auto
脚本和配置文件(称为配方 )来确定所有分区的大小。 它的工作原理如下:
- Partman根据计算机类型和用户选择的选项找到正确的配方文件。
- 在那里,它找到分区的最小和最大大小及其优先级。 对于交换,它可以是96(最小 – 以MB为单位)512(优先级)300%(最大)。
- 然后它获得RAM大小(通过
/proc/meminfo
)。 - 它使用自己的算法来计算大小。
细节:
配方文件可能如下所示:
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{ } .
计算大小的算法:
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; } } }
欲了解更多信息:
-
partman-auto-recipe.txt 返回机器
这将是相当技术性的,但很有趣的发现所以这里…
- 我找到了一个包
dphys-swapfile
,这里是源代码 。 选项setup
用于设置它:
setup - 告诉dphys-swapfile计算最佳交换文件大小和 (重新)生成拟合交换文件。 默认为RAM大小的2倍。 这可以在启动时调用,因此文件始终保持不变 适用于当前RAM的正确大小,或者RAM大小时手动运行 改变。
- 在
dphys-swapfile
里面是一个设置conf_swapsize
的预定义大小(在Natty中这是空的):
我们想强制它的大小,默认(空)给2 * RAM CONF_SWAPSIZE =
和swapfactor
的设置……
this is what we want, 2 times RAM size SWAPFACTOR=2
-
实际大小进一步计算:
if [“$ {CONF_SWAPSIZE}”=“”]; 然后 #calcu自动最佳尺寸 echo -n“计算大小” #这似乎是最接近物理RAM的大小,缺少大约60k KCORESIZE =“`ls -l / proc / kcore | awk'{print $ 5}'`” 向下舍入的#by MBytes正好是1太少,所以加1 MEMSIZE =“`expr”$ {KCORESIZE}“/ 1048576 + 1`” #default,没有配置文件覆盖,swap = 2 * RAM CONF_SWAPSIZE =“`expr”$ {MEMSIZE}“'*'”$ {SWAPFACTOR}“`” 科幻
正如你可以看到他们在这个包中计算它的方式取决于/proc/kcore
的大小,然后除以1048576,+ 1来将其四舍五入然后乘以swapfactor。 从我的机器:
因此,此系统的默认值为1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes。