CPU
1. 软限制
cpu share
注:
cpu.shares是一个相对值,同一层次的cgroup之前会按照cpu.shares值共享cpu。
cpu.sharess值最小为2,所以kubelet给best effort pod的cpu.shares设置的值为2。
2. 硬限制
2.1 通过cfs_period_us和cfs_quota_us限制
https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt
注:
每个cgroup下的period值可以不一样
如果cpu.cfs_period_us值太小,且进程太多,可能影响程序的性能
例:
限制只能使用0.2个cpu,则可设置:cpu.cfs_period_us=100ms, cpu.cfs_quota=20ms
限制可以使用2个cpu,则可设置:cpu.cfs_period_us=100ms, cpu.cfs_quota=200ms
2.2 通过cpuset限制
通过cpuset可以限制进程运行在哪些cpu和mem上(cpuset.cpus用于设置cpu,cpuset.mems用于设置内存),通过以下命令cat /proc/$PID/stats
可以查看进程的cpuset情况,例:
简单的测试用例:
2.3 cpu quota VS cpuset
对于延时敏感的应用,用cpuset可能更合适,参考Avoiding CPU Throttling in a Containerized Environment。
3. Kubelet中的cpu管理
Cpu manager: https://kubernetes.io/blog/2018/07/24/feature-highlight-cpu-manager/
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/cpu-manager.md
https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/#cpu-management-policies
4. 参考资料
CFS Bandwidth Control: https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt
cpushare: https://kernel.googlesource.com/pub/scm/linux/kernel/git/glommer/memcg/+/cpu_stat/Documentation/cgroups/cpu.txt
cpuset: https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt
Last updated