默认交换大小是多少?


16

安装程序如何计算要创建的交换分区的大小?大概是基于已安装的RAM大小,但这是否取决于多少RAM?


没有默认值,它取决于您有多少RAM。
Uri Herrera

1
是的,但是我在寻找比“取决于”更多的细节。它是否总是RAM大小的设定倍数,还是取决于有多少RAM?例如,大型RAM永远不需要足够多的空间来启用休眠状态,但是非常小的RAM大小可以受益于大于1:1的交换。
Seret

Answers:


5

实际上,dphys-swapfile默认的Ubuntu安装CD上没有程序,它也不用于计算交换大小。

发生的是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;
      }
   }
}

有关更多信息,请参见:


有趣的辩论:比陌生的debian网站更好的参考?
enzotib

好吧,我在搜索它时也发现了它,但是该软件包具有“警告:该软件包仅用于构建debian-installer映像。请勿将其安装在普通的Ubuntu系统上。”。我以为没有使用它,所以我进行了搜索,发现dphys-swapfile>:-D的代码确实很有趣。
Rinzwind 2011年

@enzotib:为什么奇怪?
安排

@arrange:奇怪,因为不是正式的ubuntu站点,而且作为debian站点也似乎不是官方的。
enzotib 2011年

我发现了另外两种计算交换大小D的方法:该方法使用grep ^ Mem:/ proc / meminfo或如果它是0 grep ^ MemTotal:/ proc / meminfo,然后乘以2(默认值)或3(大多数设置为300%),每个体系结构最少。mipsel-sb1-bcm91250a使用固定的512。i386-efi使用200%。
Rinzwind

19

这将是相当技术性的,但是很有趣,因此可以找到...

  • 我找到了一个包dphys-swapfile,这是源代码。Option 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
  • 实际大小进一步计算:

    如果[“ $ {CONF_SWAPSIZE}” =“”]; 然后
      #计算自动最佳大小
      echo -n“计算大小”
      #这似乎是最接近物理RAM的大小,大约缺少60k
      KCORESIZE =“`ls -l / proc / kcore | awk'{print $ 5}'`”
      #使向下舍入的兆字节正好为1个太少,因此加1
      MEMSIZE =“`expr” $ {KCORESIZE}“ / 1048576 + 1`”
      #默认值,不覆盖配置文件,swap = 2 * RAM
      CONF_SWAPSIZE =“`expr” $ {MEMSIZE}“'*'” $ {SWAPFACTOR}“`”
    科幻

如您所见,他们在此程序包中计算它的方式取决于的大小/proc/kcore,然后除以1048576,再将+1舍入,然后乘以swapfactor。从我的机器上:

在此处输入图片说明

因此,此系统的默认值为1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.