[原创]vmtune命令调整VM页面替换_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4610 | 回复: 0   主题: [原创]vmtune命令调整VM页面替换        下一篇 
紫狐狸988
注册用户
等级:上士
经验:261
发帖:29
精华:0
注册:2012-3-5
状态:离线
发送短消息息给紫狐狸988 加好友    发送短消息息给紫狐狸988 发消息
发表于: IP:您无权察看 2012-3-5 10:13:44 | [全部帖] [楼主帖] 楼主

vmtune命令调整VM页面替换北京联动北方科技有限公司

讨论在实时内存管理,内存管理算法,试图保持空间列表的大小和指定范围内的持久段页面所占用的实际内存的百分比。这些边界可以被只能被超级用户运行的vmtune命令改变,这个工具所做的更改仍然有效,直到下次重新启动系统。确定是否vmtune命令安装和可用,运行以下命令:

# lslpp –lI bos.adt.samples


: vmtune命令的样本目录,是因为它是非常依赖VMM的实施。

每一个版本的操作系统vmtune代码,是专门针对该版本的VMM。在不同版本上运行vmtune命令,可能会导致操作系统错误。不同版本之间的vmtune命令的功能可能不同。不要传播SHELL脚本或/etc/inittab条目,以确保该脚本仍会有预期的效果。在AIX 4.3.3执行没有选项的vmtune命令,输出结果如下:

# /usr/samples/kernel/vmtune  vmtune:  current values:    -p       -P        -r          -R         -f       -F       -N        -W  minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt    52190   208760       2          8        120      128     524288        0       -M      -w      -k      -c        -b         -B           -u        -l    -d  maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps     209581    4096    1024       1      93         96          9      131072     1             -s              -n         -S           -h  sync_release_ilock  nokillroot  v_pinshm  strict_maxperm          0               0           0             0     number of valid memory pages = 261976   maxperm=79.7% of real memory  maximum pinable=80.0% of real memory    minperm=19.9% of real memory  number of file memory pages = 19772     numperm=7.5% of real memory


输出显示当前所有参数的设置。

选择minfreemaxfree的设置

实时终止进程释放内存页面帧的空闲列表的目的是为了保持跟踪,并立即向请求者提供页帧,而不强迫他们等待页面抢断和所附的I / O完成。

调整这些限制的目的是要确保:

关键响应时间目标的任何活动,总是可以得到的页面帧,它需要从空闲列表。Minfreemaxfree默认值依赖于机器的内存。Maxfree的默认值通过以下公式确定:

maxfree = minimum (# of memory pages/128, 128)


默认情况下,minfree的值是maxfree的价值 - 8。然而,minfreemaxfree之间的差异,应该始终等于或大于maxpgahead更大。或者换句话说,maxfree的价值应该总是大于或等于minfreemaxpgahead的大小。如果有不止一个内存池,那么minfree/maxfree的值将会不同。在AIX 4.3.3中引入了大量的RAM MP系统内存池。每个内存池都将有其自己的minfree/ maxfree的,这是由以前的公式确定,但一下minfree/ maxfree的显示值由vmtune命令将所有的内存池的minfree/ maxfree的总和。

请记住,minfree的网页,在某种意义上说是一种浪费,因为它们是可用的,但没在使用。如果你要使一个短小的程序运行的更快,你可以使用svmon命令查询你的内存(看看有多少内存正被使用),并设置minfree的最大值。这种技术肯能过于保守,因为并不是所有的页面… …同时,你可能会丢失来自程序而不是你的列表的动态需求,可能会降低您的关键程序运行时的空闲列表的平均大小。

一个不太精确但更全面的调查minfree的适当规模的工具是vmstat命令。以下是在一个空闲的系统上运行一个C编译的vmstat命令输出的一部分:

# vmstat 1  kthr     memory             page              faults        cpu  ----- ----------- ------------------------ ------------ -----------   r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa   0  0  3085   118   0   0   0   0    0   0 115    2  19  0  0 99  0   0  0  3086   117   0   0   0   0    0   0 119  134  24  1  3 96  0   2  0  3141    55   2   0   6  24   98   0 175  223  60  3  9 54 34   0  1  3254    57   0   0   6 176  814   0 205  219 110 22 14  0 64   0  1  3342    59   0   0  42 104  249   0 163  314  57 43 16  0 42   1  0  3411    78   0   0  49 104  169   0 176  306  51 30 15  0 55   1  0  3528   160   1   0  10 216  487   0 143  387  54 50 22  0 27   1  0  3627    94   0   0   0  72  160   0 148  292  79 57  9  0 34   1  0  3444   327   0   0   0  64  102   0 132  150  41 82  8  0 11   1  0  3505   251   0   0   0   0    0   0 128  189  50 79 11  0 11   1  0  3550   206   0   0   0   0    0   0 124  150  22 94  6  0  0   1  0  3576   180   0   0   0   0    0   0 121  145  30 96  4  0  0   0  1  3654   100   0   0   0   0    0   0 124  145  28 91  8  0  1   1  0  3586   208   0   0   0  40   68   0 123  139  24 91  9  0  0


因为编译器目前还没有运行,所以编译器本身的代码必须被读入。总之,编译器在6秒内编译2M,在这个32M的系统中,maxfree64Mminfree56M。编译器几乎马上驱动低于minfree空闲列表的大小,几秒后就会发生页面盗取活动。一些盗页要求脏工作段页写到空闲页面。如果盗页引起脏永久段的写操作,I/O没有出现在vmstat的报告中。

这个例子说明一个fork()exec()环境(不是一个进程长期生存的环境,就像在数据库中),也不打算建议你设置minfree500以适应大量的编译。本例说明如何使用VMSTAT命令鉴别当程序等待空闲空间时,空闲列表必须被补充的情况。在这种情况下,编译器的执行时间大约为两秒,因为没有足够可用的页框。如果你在正常处理期间或者初始化期间观察你的程序的页框的使用,你很快就会了解在空闲列表中需要多少页框以满足继续等待内存的程序。

如果我们从上面的例子中得出这样的结论:minfree需要被设置成128,我们设置maxpgahead=16以提高连续的性能,我们应该使用如下的VMSTAT命令:

# /usr/samples/kernel/vmtune -f 128 -F 144


调整内存池

在比AIX 4.3.3更新的版本的操作系统中,命令vmtune -mnumber_of_memory_pools 允许你

在系统启动时改变内存池号。-m标志不能动态变化。如果是MP内核,此改变将会被写入内核文件。内存池的默认号恢复至0.

默认情况下,命令vmtune –m写入到文件/usr/lib/boot/unix_mp中,但是这种情况可以被命令vmtune -U path_to_unix_file 改变,在改变内核文件之前,命令vmtunename_of_original_file.sav.形式保存源文件。

调整lrubucket以减少内存扫描开销

在大内存系统中,调整lrubucket可以减少内存扫描开销。在AIX 4.3.3版本中,增加了一个新的参数:lrubucke。页面替换算法扫描内存框以寻找空页框。这个扫描过程中,页面的参考位复位,如果一直没有找到一个空闲页面,则进行第二次扫描。在第二次扫描,如果仍然是关闭的参考位,帧将被用于一个新的页面。

在一个拥有大内存的系统中,有太多的帧需要被扫描,所以现在内存被划分成帧桶,页面替换算法将桶中的帧扫描,然后在移动到下一个帧桶之前开始第二次扫描。在这个桶中的默认号码是131072或者是512M RAM。帧的数量是可调的,你可以使用vmtune –l命令。帧数在4K以内。

选择minpermmaxperm设置

操作系统通过将被读或写过的文件叶留在内存中的方式充分利用对于实际内存不同的要求。

如果该文件的页面再次请求重新分配页帧之前,这项技术节省了一次I / O操作。这些文件页面可能来自本地的或者远程的文件系统。用于这些文件与用于计算(工作或程序文本)段的页面帧的比例是被minpermmaxperm的值松散的控制着。

如果被占用的文件页的内存比例上升到maxperm的值,页面替换只替换文件页。

如果内存中文件页所占有的比例在参数minpermmaxperm之间,页面置换仅仅置换文件页,除非文件repagesfile repages)的数量高于计算repages的数量。在一个特定的工作负载,它可能是值得文件I/O的避免。在另一个工作负载,计算段的页面保存在内存,可能更重要。了解有多大比例处于未调整状态,可以使用不带参数的vmtune命令。

# /usr/samples/kernel/vmtune  vmtune:  current values:    -p       -P        -r          -R         -f       -F       -N        -W  minperm  maxperm  minpgahead maxpgahead  minfree  maxfree  pd_npages maxrandwrt    52190   208760       2          8        120      128     524288        0       -M      -w      -k      -c        -b         -B           -u        -l    -d  maxpin npswarn npskill numclust numfsbufs hd_pbuf_cnt lvm_bufcnt lrubucket defps  209581    4096    1024       1      93         96          9      131072     1             -s              -n         -S           -h  sync_release_ilock  nokillroot  v_pinshm  strict_maxperm          0               0           0             0     number of valid memory pages = 261976   maxperm=79.7% of real memory  maximum pinable=80.0% of real memory    minperm=19.9% of real memory  number of file memory pages = 19772     numperm=7.5% of real memory


默认值是由以下算法计算得来的:

minperm (in pages) = ((number of memory frames) - 1024) * .2  maxperm (in pages) = ((number of memory frames) - 1024) * .8


Numperm的值显示了内存中文件页的数量,19772,是真实内存的7.5%

如果我们知道我们的工作量,使得最近读取或写入的文件很少使用,我们可能要限制用于此目的的内存量。

# /usr/samples/kernel/vmtune -p 15 -P 50


设置minperm的值为真实内存的15%maxperm的值为真实内存的50%。这样将确保当文件页的比例超过总内存的50%时,VMM仅从文件页中盗取页框。这将在对永久存储不产生不利影响的情况下,减少分页页面空间。Maxperm的值不是一个严格的限制,它仅在VMM需要执行页面替换时才考虑。因此,在大多数系统上减少maxperm的值是安全的。另一方面,如果我们的应用程序频繁的参考一小部分的现有文件(尤其是如果这些文件存在于NFS-mounted文件系统),我们可能希望通过使用如下的命令允许为文件页的本地缓存预留更多的空间:

# /usr/samples/kernel/vmtune -p 30 -P 90


拥有大内存,主要用于读取工作的NFS服务器,可以从增大maxperm的值中获益。这样,允许更多的页面驻留在内存中,以至于NFS客户端可以在不强制NFS服务器再次从磁盘检索页面的情况下访问它们。

另一个例子是一个程序,此程序将一个1.5G的顺序文件数据读入到一个拥有2G真是内存的工作存储中。你可能希望将maxperm的值设置成50%或者更少,因为你不需要将文件数据保存在内存中。

使用strict_maxperm在永久文件缓存中配置一个硬性的限制

AIX 4.3.3开始,增加了一个新的名为stric_maxpermvmtune选项。这个选项,当将它设置为1时,通过设置maxperm的值为文件缓存的上限,来设置一个关于多少内存用于持久文件缓存。当达到上限时,LRU算法将在持久页面上执行。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论