In this presentation we wanted to share our progress on enabling Intel RDT (Cache and Memory Bandwidth) and Block I/O controls for containerised applications.
be assigned to Block I/O class • Each class can define • Per device throttling on I/O ops / bandwidth • Priorities § Intel RDT • Containers can be assigned to RDT class • LLC and Memory Bandwidth • Shared and exclusive class allocations • User friendly configuration
Kubernetes QoS partitions: default: # Only one partition which gets all resources l3Allocation: "100%" mbAllocation: ["100%"] classes: # L3 cache lines are partially shared # between classes Guaranteed: # Guaranteed can use full cache and mem bw l3Allocation: "100%" mbAllocation: ["100%"] Burstable: # Burstable can use 60% of the cache # lines and 50% of mem bw l3Allocation: "60%" mbAllocation: ["50%"] Besteffort: # Besteffort can use 30% of the cache # lines but 50% of mem bw l3Allocation: "30%" mbAllocation: ["50%"]
“Billing QoS” partitions: exclusive: # Partition gets exclusively 60% of all cache lines l3Allocation: "60%" classes: gold: # This single class gets 100% what was allocated # for the partition (i.e. 60% of all cache lines) l3Allocation: "100%" shared: # Partition gets exclusively 40% of all cache lines l3Allocation: "40%" classes: silver: # "silver" gets 100% what was allocated for # the partition (i.e. 40% of all cache lines) l3Allocation: "100%" bronze: # "bronze" only gets 50% what was allocated for # the partition (i.e. 20% of all cache lines) l3Allocation: "50%"
containerd • Container Runtimes read RDT & Block I/O config file and configures resctrl via goresctrl • Container Runtime interprets both container and Pod annotations and assigns containers to classes accordingly – modification in generated OCI configs • goresctl library code to be moved under opencontainers to be re-usable across runtimes § PRs • CRI-O • https://github.com/cri-o/cri-o/pull/4830 - RDT • https://github.com/cri-o/cri-o/pull/4873 – Block I/O • Containerd • https://github.com/containerd/containerd/pull/5439 – RDT • https://github.com/containerd/containerd/pull/5490 – Block I/O
• Pod annotations and container (device plugins) annotations from Kubelet are propagated to Runtimes • Container Runtimes applying classes based on those annotations § Phase 1: CRI support • Support Cache & Block I/O classes in CRI protocol • Fields in Pod and Container resources to define classes • Runtimes still interpret annotations unless CRI field is not populated § Phase 2: “First class citizen” in Kubernetes Pod spec • Deprecate annotations • Cache & Block I/O classes becomes fields for Pod and Container scopes