minfree 和 maxfree 参数的值
使用空闲列表的目的是保持跟踪进程终止释放的实内存的页帧,向请求者立即提供页帧,而不是等待窃取和与之相连的 I/O 的结束。
minfree 限制了空闲列表的容量,低于该数值时必须开始窃取页充入空闲列表。 当超过 maxfree 参数值大小时,就会结束窃取,minfree 值用来启动页面窃取。 当永久页面数小于或等于 maxfree 参数值与 minfree 参数值之间的差值时,或者当客户机页面数小于或等于 maxclient 参数值与 minfree 参数值之间的差值时,就会开始页面窃取。
调整这些限制的目的是为了确保:
- 任何有紧急响应时间的目标总是能从空闲列表中得到它所需要的页帧。
- 系统不要经历不必要的高等级的输入输出,因为早就发生的页窃取扩大的空闲列表。
minfree 和 maxfree 参数的缺省值取决于机器的内存大小。 如果您正在使用 JFS,那么 maxfree 和 minfree 参数之间的差值应该总是等于或大于 maxpgahead 参数的值。 对于增强型 JFS,maxfree 和 minfree 参数之间的差值应该总是等于或大于 j2_maxPageReadAhead 参数的值。 如果您正在使用 JFS 和增强型 JFS,那么应该将 minfree 参数的值设置成一个大于或等于两个文件系统中较大 pageahead 值的数字。
如果存在多个内存池,那么 minfree 和 maxfree 参数值会有所不同。 引入内存池的概念是为了有大量 RAM 的 MP 系统。 每个内存池都有其自己的 minfree 和 maxfree 值。 在较早的 AIX 版本中, vmo 命令显示的 minfree 和 maxfree 值是所有内存池的 minfree 和 maxfree 值的总和。 vmo 命令显示的值基于每个内存池。
# vmstat 1
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
2 0 70668 414 0 0 0 0 0 0 178 7364 257 35 14 0 51
1 0 70669 755 0 0 0 0 0 0 196 19119 272 40 20 0 41
1 0 70704 707 0 0 0 0 0 0 190 8506 272 37 8 0 55
1 0 70670 725 0 0 0 0 0 0 205 8821 313 41 10 0 49
6 4 73362 123 0 5 36 313 1646 0 361 16256 863 47 53 0 0
5 3 73547 126 0 6 26 152 614 0 324 18243 1248 39 61 0 0
4 4 73591 124 0 3 11 90 372 0 307 19741 1287 39 61 0 0
6 4 73540 127 0 4 30 122 358 0 340 20097 970 44 56 0 0
8 3 73825 116 0 18 22 220 781 0 324 16012 934 51 49 0 0
8 4 74309 26 0 45 62 291 1079 0 352 14674 972 44 56 0 0
2 9 75322 0 0 41 87 283 943 0 403 16950 1071 44 56 0 0
5 7 75020 74 0 23 119 410 1611 0 353 15908 854 49 51 0 0
在上述示例输出中可以看到经常都会达到 120 的 minfree 值。 因此,页面替换就会发生,并且在这种特殊情况下,空闲列表在某个时刻甚至将达到 0。 一旦发生这种情况,需要空闲帧的线程就会阻塞而无法运行,直到页面替换释放一些页面为止。 要阻止这种情况发生,可以考虑增加 minfree 和 maxfree 的值。
# vmo -o minfree=1000 -o maxfree=1008
要使其成为永久更改,须包括 -p 标志:# vmo -o minfree=1000 -o maxfree=1008 -p
minfree 参数的缺省值增加到每个内存池 960 页,maxfree 参数的缺省值增加到每个内存池 1088 页。