libvirt-使用cgroup做资源分割控制

时间:2022-05-07
本文章向大家介绍libvirt-使用cgroup做资源分割控制,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

使用libvirt可以把创建的虚拟机放到cgroup划分的资源区中,从而实现所有虚拟机、部分虚拟机、单个虚拟机的资源控制,例如控制虚拟机的cpu使用情况、控制虚拟机在host上内存的使用大小等。

libvirt默认资源划分:

默认的libvirt使用cgroup创建一个名为machine的组:/sys/fs/cgroup/cpuset/machine/。

然后使用libvrit创建的虚拟机都在这个machine组中。

控制或改变machine组中的各个资源就可以控制虚拟机。

例如:

改变/sys/fs/cgroup/memory/machine/memory.limit_in_bytes的大小,就可以改变使用libvirt创建的所有虚拟机的实际占用host的总内存大小。

libvirt指定资源划分:

如果需要把部分虚拟机划分的一个资源组中,单独对这个资源组进行资源的控制,则需要手动创建资源组。

例如建立一个新的资源组名字为openstack.partition,步骤

1.在RESOURCE中建立目录:/sys/fs/cgroup/$RESOURCE/machine/openstack.partition/

(这里RESOURCE的取值为blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event)

2.根据需求修改/sys/fs/cgroup/$RESOURCE/machine/openstack.partition/中的资源,例如修改/sys/fs/cgroup/memory/machine/openstack.partition/memory.limit_in_bytes的大小。

3.在openstack.partition资源组中创建虚拟机。

libvirt的domain的xml:

<domain type='kvm' id='6'>  ....  <resource>    
<partition>/machine/openstack.partition</partition>  
</resource>  ....</domain>

4.启动虚拟机后,虚拟机的资源就收到了openstack.partition资源组的控制。

可以看到在/sys/fs/cgroup/memory/machine/openstack.partition/目录下多了此虚拟机的文件夹:instance-00000049.libvirt-qemu

注:

1./sys/fs/cgroup/中资源的控制是可以嵌套的,子目录的资源定制可以覆盖掉父目录的资源定制。

2.在上面例子是在ubuntu这种非systemd启动的系统中实践。在centos等systemd启动的系统中配置方式有所区别。

具体可参考libvirt文档:https://libvirt.org/cgroups.html


关注本公众号,了解更多关于云计算虚拟化的知识。