什么是默认的交换大小?

安装程序如何计算要创建的交换分区的大小? 据推测它是基于已安装的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; } } } 

欲了解更多信息:

这将是相当技术性的,但很有趣的发现所以这里…

  • 我找到了一个包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。