Mastering the Shift: cgroup v1 CPU Shares to v2 CPU Weight in Kubernetes
The move from cgroup v1 to cgroup v2 addresses limitations in resource management, particularly in how CPU shares are defined. In cgroup v1, CPU shares were simply assigned in millicpu form, which lacked the flexibility and granularity needed for modern containerized applications. Cgroup v2 introduces CPU weight, which provides a more sophisticated approach to resource distribution, allowing for better performance tuning and fairness across containers.
The conversion from cgroup v1 CPU shares to cgroup v2 CPU weight is governed by a specific formula: $$cpu.weight = \lceil 10^{(L^{2}/612 + 125L/612 - 7/34)} \rceil, \text{ where: } L = \log_2(cpu.shares)$$. This quadratic function effectively maps the old linear shares to a new weight system, ensuring that containers are allocated CPU resources in a more balanced manner. The formula is designed to cross key values, such as (2, 1) and (1024, 100), which helps maintain consistency during the transition.
In production, you need to be aware of the implications of this change. The new formula is enabled from version 1.3.2 for runc and from version 1.23 for crun. Be cautious if you're relying on the older linear conversion formula, as it may lead to unexpected resource allocations. Understanding these nuances will help you optimize your Kubernetes deployments effectively.
Key takeaways
- →Understand the new formula for CPU weight: $$cpu.weight = \lceil 10^{(L^{2}/612 + 125L/612 - 7/34)} \rceil$$.
- →Recognize that cgroup v1 CPU shares are replaced by CPU weight in cgroup v2.
- →Be aware that the new conversion formula is enabled from version 1.3.2 for runc and 1.23 for crun.
- →Avoid assuming the older linear conversion formula; it may lead to resource allocation issues.
- →Know that KEP-2254 introduced this conversion to improve resource distribution.
Why it matters
This shift impacts how resources are allocated in Kubernetes, leading to more efficient use of CPU and better performance for containerized applications. Understanding this change is essential for maintaining optimal resource management in production environments.
When NOT to use this
The official docs don't call out specific anti-patterns here. Use your judgment based on your scale and requirements.
Want the complete reference?
Read official docsUnified observability — logs, uptime monitoring, and on-call in one place. Used by 50,000+ engineering teams to ship faster and sleep better.
Try Better Stack free →Mastering Workload-Aware Scheduling in Kubernetes v1.36
Kubernetes v1.36 introduces powerful workload-aware scheduling features that can transform how you deploy applications. With the new Workload and PodGroup APIs, you can prevent resource wastage and deadlocks through gang scheduling. This is a game changer for managing complex workloads effectively.
Unlocking Kubernetes v1.36: PSI Metrics for Proactive Resource Management
Kubernetes v1.36 introduces Pressure Stall Information (PSI) metrics, a game changer for monitoring resource saturation. With cumulative totals and moving averages, you can now detect issues before they escalate into outages.
Unlocking Kubernetes v1.36: Dynamic Resource Allocation and Its Game-Changing Features
Kubernetes v1.36 introduces Dynamic Resource Allocation (DRA), revolutionizing how you manage hardware accelerators. With features like prioritized lists and device taints, you can optimize resource utilization and improve system reliability.
Get the daily digest
One email. 5 articles. Every morning.
No spam. Unsubscribe anytime.