Rin*_*ind 19
这将是相当技术性的,但很有趣,所以在这里......
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
Run Code Online (Sandbox Code Playgroud)
实际大小计算得更远一点:
if [ "${CONF_SWAPSIZE}" = ""] ; 然后
# 计算自动最佳尺寸
echo -n "计算大小, "
# 这似乎是最接近物理内存的大小,缺少大约 60k
KCORESIZE="`ls -l /proc/kcore | awk '{ print $5 }'`"
# 使四舍五入的 MBytes 正好是 1 太少了,所以加 1
MEMSIZE="`expr "${KCORESIZE}" / 1048576 + 1`"
# 默认,不覆盖配置文件,swap=2*RAM
CONF_SWAPSIZE="`expr "${MEMSIZE}" '*' "${SWAPFACTOR}"`"
菲正如您所看到的,他们在这个包中计算它的方式取决于 的大小/proc/kcore,然后除以 1048576,+1 将其四舍五入,然后乘以交换因子。从我的机器:

所以这个系统的默认值是 1065349120 / 1048576 = 1015+1 = 1016 * 2 = 2032 MB。
实际上dphys-swapfile默认的 Ubuntu 安装 CD 上没有程序,它不用于计算交换大小。
发生的情况是ubiquity安装程序使用partman-auto脚本和配置文件(称为recipes)来确定所有分区的大小。它是这样工作的:
/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{ } .
Run Code Online (Sandbox Code Playgroud)
计算大小的算法:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
更多请见:
| 归档时间: |
|
| 查看次数: |
9897 次 |
| 最近记录: |