虚拟机vcpu pin优化与vcpu能力精细化控制

CGROUP

Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu、memory、IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。

cgroup子系统控制组路径

安装好cgroup之后,可以使用mount命令查看cgroup子系统的路径。该路径为cgroup的根路径,标记为CG_ROOT

使用lscgroup命令可以查看虚拟机进程对应的子系统相对路径,该路径标记为CG_RELATIVE

以上两个路径合起来,可以得到一个完整的进程子系统控制组路径,标记为CG_COMPLETE

虚拟机的vcpu pin功能,用到的是cpuset子系统中的cpuset.cpus。可以进入cpuset子系统组的CG_COMPLETE,一般情况下会针对虚拟机的每个vcpu而创建一个子目录,进入对应的vcpu目录,查看其cpuset.cpus的值,该值即为此vcpu绑定的物理核。

虚拟机vcpu精细化控制功能,用到的是cpu,cpuacct子系统中的cpu.cfs_quota_us。可以进入cpu,cpuacct子系统组的CG_COMPLETE,同样进入对应的vcpu目录,查看其cpu.cfs_quota_us值,默认为-1,表示cpu运行时间不受限制。

设置参数

使用cgset命令设置子系统控制组的配置。

1
2
3
4
5
6
# cgset -h
Usage: cgset [-r <name=value>] <cgroup_path> ...
or: cgset --copy-from <source_cgroup_path> <cgroup_path> ...
Set the parameters of given cgroup(s)
-r, --variable <name> Define parameter to set
--copy-from <source_cgroup_path> Control group whose parameters will be copied

先获取虚拟机进程的子系统相对路径CG_RELATIVE,这个路径即为cgset中的cgroup_path,如设置vcpu pin绑定至物理核4:

1
cgset -r cpuset.cpus=4 CG_RELATIVE

控制vcpu运行时间为1/2:

1
cgset -r cpu.cfs_quota_us=50000 CG_RELATIVE

参考资料