虚拟机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 | cgset -h |
先获取虚拟机进程的子系统相对路径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 |