测试使用的系统版本
[iyunv@desktop2 ~]# cat /proc/version
Linux version 2.6.32-220.el6.x86_64 (mockbuild@x86-004.build.bos.redhat.com) (gcc version 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) ) #1 SMP Wed Nov 9 08:03:13 EST 2011
You have new mail in /var/spool/mail/root
[iyunv@desktop2 ~]#
安装libcgroup和libvirt两个包
[iyunv@desktop2 ~]# yum list libcgroup
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Updating certificate-based repositories.
Installed Packages
libcgroup.x86_64 0.37-3.el6 @anaconda-RedHatEnterpriseLinux-201111171049.x86_64/6.2
Available Packages
libcgroup.i686 0.37-3.el6 base
[iyunv@desktop2 ~]# yum list libvirt
Loaded plugins: product-id, refresh-packagekit, security, subscription-manager
Updating certificate-based repositories.
Installed Packages
libvirt.x86_64 0.9.4-23.el6 @anaconda-RedHatEnterpriseLinux-201111171049.x86_64/6.2
Available Packages
libvirt.x86_64 0.9.4-23.el6_2.1 Updates
[iyunv@desktop2 ~]#
启动cgconfig和libvirtd服务
[iyunv@desktop2 ~]# service cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: [ OK ]
[iyunv@desktop2 ~]# service libvirtd restart
Stopping libvirtd daemon: [ OK ]
Starting libvirtd daemon: [ OK ]
[iyunv@desktop2 ~]#
[iyunv@desktop2 ~]# ls /cgroup/cpuset/libvirt/qemu/
cgroup.procs cpuset.memory_spread_page
cpuset.cpu_exclusive cpuset.memory_spread_slab
cpuset.cpus cpuset.mems
cpuset.mem_exclusive cpuset.sched_load_balance
cpuset.mem_hardwall cpuset.sched_relax_domain_level
cpuset.memory_migrate notify_on_release
cpuset.memory_pressure tasks
You have new mail in /var/spool/mail/root
[iyunv@desktop2 ~]#
现在看到虚拟机使用host上的cpu0和cpu1
[iyunv@desktop2 ~]# watch -n .1 "virsh vcpuinfo vserver" #为方便观察,建议新起一个终端后执行此命令
You have new mail in /var/spool/mail/root
[iyunv@desktop2 ~]# virsh vcpuinfo vserver
VCPU: 0
CPU: 1
State: running
CPU time: 23.7s
CPU Affinity: -y
VCPU: 1
CPU: 0
State: running
CPU time: 13.5s
CPU Affinity: yy
[iyunv@desktop2 etc]# vim /etc/cgconfig.conf
.....
group libvirt/qemu/vserver {
memory{
memory.limit_in_bytes=512M;
}
}
但是限制只使用某个物理cpu时,采用写配置文件的方法一直出错:
这样写可以(语法是正确的)
group vserver {
cpuset{
cpuset.cpus=0;
cpuset.mems=0;
}
}
下面这样就不行(以下配置会让cgconfig服务无法启动,删除后cgconfig服务可以正常启动):
group libvirt/qemu/vserver {
cpuset{
cpuset.cpus=0;
cpuset.mems=0;
}
}
错误信息如下:
[iyunv@desktop2 init.d]# service cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: Loading configuration file /etc/cgconfig.conf failed
Value setting does not succeed
Failed to parse /etc/cgconfig.conf [FAILED]
[iyunv@desktop2 init.d]#
再翻了翻书,发现对于有些controllers来说(如cpuset),光限制nested cgroup还不够,还应限制其所有父亲controllers(不包括根controller),要想通过配置文件cgconfig.conf限制虚拟机只使用某个cpu,需按照如下写法:
* PAGE247: With Some controllers just placing limits on a nested cgroup is not enough. The cpuset controller for instance requires you to at least set cpuset.cpus and cpuset.mems on all parents leading up to (but not including)root.
... ...
group libvirt {
cpuset{
cpuset.cpus=0;
cpuset.mems=0;
}
}
group libvirt/qemu {
cpuset{
cpuset.cpus=0;
cpuset.mems=0;
}
}
group libvirt/qemu/vserver {
cpuset{
cpuset.cpus=0;
cpuset.mems=0;
}
}
查看结果:
[iyunv@desktop2 init.d]# service cgconfig restart
Stopping cgconfig service: [ OK ]
Starting cgconfig service: [ OK ]
[iyunv@desktop2 init.d]# cat /cgroup/cpuset/libvirt/qemu/vserver/cpuset.cpus
0
[iyunv@desktop2 init.d]#