numa ksm 及Winguest相关

       先说说遇到的问题吧。先说下环境吧。服务器是fujistu SIRIUS,2个socket,每个socket 6个core,内存是32GB.硬盘什么就不说了,关系不大。guest的环境是设置6个vcpu,分别绑定到host的6,7,8,910,11号core上(即socket 1)。host是RHEL 6.2GA,native自然是window 2008 R2 standard(native 没问题,没啥好说的)。其实遇到了两个问题,先说第一个。

      其中有个case的环境是:分配给windows guest 28GB的内存,然后guest的程序写24GB的内存。然后统计host上numastat命令的时候发现,node 0 的numa_miss比较高,而node 1 的numa_miss为0.这和预想的正好相反,因为一般想当然的认为是socket 0和node 0 对应,而socket 1和node 1对应。后来做了几个实验,发现原来socket 0是和node 1对应,socket 1和node0对应,简单的说交叉了,真是怪别扭。至于数据,不太好找就不贴了。

      另一个问题就好玩了,调查了快两天。虽然发现后觉得也就这样,但过程艰辛啊。说表现:未启动winguest的时候,在host上用free命令看mem used(下面free看到的都是指mem used)差不多用了1GB,然后启动winguest(28GB),host上用free看差不多是30GB,这有点问题,待会说。然后winguest什么都不做,host上再用free看,mem used越来越小,最后差不多到2GB左右。这里有两个问题,第一为什么winguest申请28GB内存启动的时候就真的占用28GB,因为linux有个特性叫“写时复制(copy on write)”,问前辈们也说linuxguest的时候也是guest申请内存的时候才会占用真正的物理内存的。第二个问题是为什么mem used会下降(分配8,16GB的时候不会下降)。

       好了,找了n久的资料,总算是找到第一个问题的原因了,在KVM官网的FAQ【1】里有这句话:A. KVM only allocates memory as the guest tries to use it. Once it's allocated, KVM keeps it. Some guests (namely Microsoft guests) zero all memory at boot time. So they will use all memory. 好吧,我只能鄙视windows了,开机就给所有的内存填零,闹哪样啊。好了,然后接着看下面一句话:C. Some hosts (presently only RHEL5.4 / CentOS 5.4) have a feature called KSM (Kernel Sharedpage Merging), which collapses together identical pages; this requires kernel support on the host, as well as a kvm new enough to opt in to the behavior. As some guest platforms (most notably Windows) zero out free'd memory, such pages are trivially collapsed. The ksmctl command needs to be used to enable KSM; alternately, the ksmtuned service found in Fedora 12 can be run to dynamically adjust KSM's aggressiveness based on the amount of free memory available。第二个问题也有点眉目了。于是搜了一把KSM的资料,再做了几个实验,果然如此,当内存不多的时候linux有个ksmtuned服务就会启动ksm服务(严格的说是让ksm服务开始优化内存,ksm服务默认开启)。然后找到相同的内存就合并,当要用的时候在分配,完全是和copy on write反过来干,总之就是这样的。然后果断的吧ksm和ksmtuned服务给关了,在测试一遍winguest,爽,性能几乎和native差不多了。估计是ksm执行的时候和测试程序竞争导致性能下降。当然关闭那两个服务后启动winguest后host上的mem used就不会下降了。由此看来,ksm确实是在节省内存方面很有用的,至少是用时间换空间了,至于要时间还是要内存就看用户怎么选了。

    特此记下,以便以后查阅。当然red hat文档【2】里也有ksm描述。哎,写的都是文字,真不爽。


  总结:1:跨node访问其实会对性能(写内存速度)有所影响,但貌似不大,要注意node号不一定和socket号一一对应。

              2:关闭KSM(Kernel Shared Memory / Kernel Samepage Merging)需要关闭ksmtuned和ksm两个服务,尤其是ksmtuned。

              3:windows在启动时会给所以内存填“0”。

 

 

【1】http://www.linux-kvm.org/page/FAQ#Is_dynamic_memory_management_for_guests_supported.3F

【2】http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Virtualization_Administration_Guide/chap-KSM.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值