<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DRA Driver for CPU</title><link>https://dra-driver-cpu.sigs.k8s.io/</link><description>Recent content on DRA Driver for CPU</description><generator>Hugo</generator><language>en</language><atom:link href="https://dra-driver-cpu.sigs.k8s.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Overview</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/overview/</guid><description>&lt;p&gt;&lt;span id="dra-driver-cpu"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;dra-driver-cpu is a Kubernetes Dynamic Resource Allocation (DRA) driver that assigns exclusive CPUs
to workloads through &lt;code&gt;ResourceClaims&lt;/code&gt;.
This driver provides an alternative to the &lt;a href="https://kubernetes.io/docs/tasks/administer-cluster/cpu-management-policies/"&gt;CPUManager&lt;/a&gt; functionality implemented in the kubelet, offering additional benefits such as advanced topology selection through the rich DRA API and alignment with other DRA-managed resources (like GPUs and high-speed NICs).&lt;/p&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;The recommended way to install the driver is via the provided Helm chart:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install dra-driver-cpu oci://registry.k8s.io/dra-driver-cpu/charts/dra-driver-cpu -n kube-system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="td-alert td-alert--md alert alert-important" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Important&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;ul&gt;
&lt;li&gt;Your cluster&amp;rsquo;s container runtime must support NRI and CDI — see &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/#compatibility"&gt;Compatibility&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The kubelet&amp;rsquo;s CPUManager and this DRA driver are mutually incompatible, and only one can be enabled at a time on any
given node — see &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/"&gt;Configuration&lt;/a&gt; for how to disable the CPUManager.&lt;/li&gt;
&lt;/ul&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/quickstart/"&gt;Quickstart&lt;/a&gt; walks through installing the driver and running a pod on exclusive CPUs, with a verification step after each stage. See the &lt;a href="https://github.com/kubernetes-sigs/dra-driver-cpu/blob/main/deployment/helm/dra-driver-cpu/README.md"&gt;Helm chart README&lt;/a&gt; for the full list of configuration options, and
&lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/"&gt;Installation&lt;/a&gt; for compatibility, upgrade, and uninstall details.&lt;/p&gt;</description></item><item><title>Quickstart</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/quickstart/</guid><description>&lt;p&gt;&lt;span id="quickstart"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This guide takes you from an empty cluster to a pod running on exclusive, pinned CPUs, with a
verification step after each stage. It requires:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;strong&gt;Kubernetes 1.34+ cluster&lt;/strong&gt; (with &lt;code&gt;DRAConsumableCapacity&lt;/code&gt; enabled).&lt;/li&gt;
&lt;li&gt;A container runtime with &lt;strong&gt;NRI and CDI enabled&lt;/strong&gt; (containerd 2.0+ or CRI-O 1.30+).&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;kubelet CPUManager disabled&lt;/strong&gt; (&lt;code&gt;cpuManagerPolicy: none&lt;/code&gt;) on driver nodes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;See &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/#compatibility"&gt;Compatibility&lt;/a&gt; for the more details.&lt;/p&gt;
&lt;h2 id="create-a-test-cluster"&gt;Create a test cluster&lt;/h2&gt;
&lt;p&gt;If you do not already have a compatible cluster, you can create a local &lt;a href="https://kind.sigs.k8s.io/"&gt;kind&lt;/a&gt; cluster configured for DRA from a checkout of this repository:&lt;/p&gt;</description></item><item><title>Testing</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/testing/</guid><description>&lt;p&gt;&lt;span id="testing"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="running-the-tests"&gt;Running the tests&lt;/h2&gt;
&lt;h3 id="unit-tests"&gt;Unit Tests&lt;/h3&gt;
&lt;p&gt;To run the node-local unit tests, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make test-unit
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="chart-render-tests"&gt;Chart render tests&lt;/h3&gt;
&lt;p&gt;To check what the Helm chart renders, without a cluster, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make helm-render-check
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;hack/ci/helm-render-check.sh&lt;/code&gt; renders each case and hands the DaemonSet to the
validator in &lt;code&gt;test/render&lt;/code&gt;. It needs Helm and the project&amp;rsquo;s Go toolchain, but no
cluster. The cluster-side counterpart is the &lt;code&gt;helm e2e&lt;/code&gt; workflow, which installs
the chart against both the default and a relocated kubelet root.&lt;/p&gt;</description></item><item><title>Installation</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/</guid><description>&lt;p&gt;&lt;span id="installation"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/quickstart/"&gt;Quickstart&lt;/a&gt; walks through an install with a
verification step after each stage, ending with a pod running on exclusive CPUs. This page
is the reference: compatibility, runtime setup, security, uninstall, and migration.&lt;/p&gt;
&lt;h2 id="compatibility"&gt;Compatibility&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Requirement&lt;/th&gt;
 &lt;th&gt;Minimum&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Kubernetes&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;1.34&lt;/strong&gt; (DRA &lt;code&gt;resource.k8s.io/v1&lt;/code&gt; is GA and enabled by default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Container runtime&lt;/td&gt;
 &lt;td&gt;containerd &lt;strong&gt;2.0&lt;/strong&gt; or CRI-O &lt;strong&gt;1.30&lt;/strong&gt; (NRI and CDI enabled by default)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Kubelet&lt;/td&gt;
 &lt;td&gt;CPUManager disabled: &lt;code&gt;cpuManagerPolicy: none&lt;/code&gt; — see &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/#kubelet-configuration-prerequisites"&gt;Configuration&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Optional features need additional cluster feature gates:&lt;/p&gt;</description></item><item><title>Linting</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/linting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/linting/</guid><description>&lt;p&gt;&lt;span id="linting"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Run the linter against the codebase:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;make lint
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To automatically fix lint issues, pass &lt;code&gt;--fix&lt;/code&gt; via the &lt;code&gt;GOLANGCI_LINT_EXTRA_ARGS&lt;/code&gt; variable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;GOLANGCI_LINT_EXTRA_ARGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;--fix make lint
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;GOLANGCI_LINT_EXTRA_ARGS&lt;/code&gt; is forwarded verbatim to &lt;code&gt;golangci-lint run&lt;/code&gt;, so any other supported flags can be passed the same way.&lt;/p&gt;</description></item><item><title>Logging Guidelines</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/logging/</guid><description>&lt;p&gt;&lt;span id="logging-guidelines"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="picking-a-verbosity-level"&gt;picking a verbosity level&lt;/h2&gt;
&lt;p&gt;V(0): high-signal operational logs and errors always visible at default verbosity
V(2): normal operation, important decisions, summary, container lifecycle
V(4): allocation internals, fine details about decisions
V(6): debug messages, very fine details, mostly for developers&lt;/p&gt;
&lt;p&gt;V(7) or more is reserved for future usage.&lt;/p&gt;
&lt;h2 id="when-to-use-error"&gt;when to use Error()&lt;/h2&gt;
&lt;p&gt;Summary: use Error() if we need to log an unrecoverable error which leads
to a failed state, not to a degraded-but-operational state.&lt;/p&gt;</description></item><item><title>Upgrading</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/upgrade/</guid><description>&lt;p&gt;&lt;span id="upgrading"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This document detail the upgrade actions that are specific to releases of
the CPU DRA driver. It complements the general &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/installation/"&gt;installation&lt;/a&gt;
and &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/"&gt;configuration&lt;/a&gt; documentation.&lt;/p&gt;
&lt;p&gt;Upgrades must preserve the &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/how-it-works/#how-it-works"&gt;singleton ownership
invariant&lt;/a&gt;.
An upgrade may temporarily leave a node without an active driver, but it must
not create overlapping active owners.&lt;/p&gt;
&lt;h2 id="upgrade-from-030-to-040-early-warning"&gt;Upgrade from 0.3.0 to 0.4.0 (EARLY WARNING)&lt;/h2&gt;
&lt;p&gt;Before the driver enters beta stage, a batch of &lt;strong&gt;breaking&lt;/strong&gt; changes are planned.
The idea is to coalesce together all the known backward incompatible changes in release 0.4.0.
We advice users wishing to prepare early to track the linked issues.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/</guid><description>&lt;p&gt;&lt;span id="configuration"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This page covers configuring the driver itself, the kubelet prerequisites required to run it,
and the command-line flags currently being deprecated in favour of the configuration file.&lt;/p&gt;
&lt;h2 id="driver-configuration"&gt;Driver configuration&lt;/h2&gt;
&lt;p&gt;The driver supports two configuration mechanisms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The config file - the main, preferred way to configure the driver.&lt;/li&gt;
&lt;li&gt;Command-line flags — kept for a small set of important, mostly behavior altering settings and for backward compatibility. Some flags are being deprecated in favor of their config file equivalent (see &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/#helm-deprecated-args-values-vs-driverconfig"&gt;Helm: deprecated args values vs driverConfig&lt;/a&gt; below).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the same setting is provided both ways, the explicit command-line flag wins, so avoid mixing
the two for the same field.&lt;/p&gt;</description></item><item><title>Configuration Guidelines</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/configuration/</guid><description>&lt;p&gt;&lt;span id="adding-configuration-tunables"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The configurable behavior of the DRA CPU driver can be changed using two approaches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;command line flags&lt;/li&gt;
&lt;li&gt;configuration file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The preferred way to add or extend the configurable behavior is through the
configuration file. The reasons why we prefer this approach are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;user friendliness: adding options quickly makes the command line long and awkward&lt;/li&gt;
&lt;li&gt;auditable, reviewable artifact: the configuration file can be versioned, compared
and verified more easily&lt;/li&gt;
&lt;li&gt;extensibility: it&amp;rsquo;s usually easier to process configuration files with programs
than command line options&lt;/li&gt;
&lt;li&gt;configuration files are easier to version and evolve compatibly than command
line flags.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Configuration values are applied incrementally:&lt;/p&gt;</description></item><item><title>Deep Dive: Cgroup v2, QoS Classes, and CPU Enforcement in Kubernetes</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/kubelet-cgroups-and-qos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/kubelet-cgroups-and-qos/</guid><description>&lt;p&gt;&lt;span id="deep-dive-cgroup-v2-qos-classes-and-cpu-enforcement-in-kubernetes"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This document provides a technical deep-dive into how Kubernetes organizes Linux control groups under &lt;strong&gt;cgroup v2&lt;/strong&gt;, calculates and applies Quality of Service (QoS) classes, manages cgroup hierarchies at node, QoS, pod, and container levels, and enforces CPU allocations. It also documents the architectural relationship between Kubelet&amp;rsquo;s cgroup management and out-of-tree Dynamic Resource Allocation (DRA) drivers such as &lt;code&gt;dra-driver-cpu&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="1-the-linux-cgroup-v2-hierarchy-in-kubernetes"&gt;1. The Linux Cgroup v2 Hierarchy in Kubernetes&lt;/h2&gt;
&lt;p&gt;Under cgroup v2 with the &lt;code&gt;systemd&lt;/code&gt; cgroup driver, Kubernetes organizes container processes into a strictly hierarchical tree under &lt;code&gt;/sys/fs/cgroup/kubepods.slice&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>How it Works</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/how-it-works/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/how-it-works/</guid><description>&lt;p&gt;&lt;span id="how-it-works"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The driver is deployed as a DaemonSet. A single executable implements the DRA
and NRI interfaces, and it owns the node-local CPU allocation state.
Exactly one active driver instance is expected to manage each node.
The driver manages all the available CPUs except those configured as reserved.
The driver manages a single CPU pool, and partitioning that pool is currently
unsupported.
The singleton invariant is not currently enforced by the driver and must be
guaranteed by the deployment.&lt;/p&gt;</description></item><item><title>Feature Support</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/feature-support/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/feature-support/</guid><description>&lt;p&gt;&lt;span id="feature-support"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="currently-supported"&gt;Currently Supported&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exclusive CPU Allocation&lt;/strong&gt;: Pods that request CPUs via a ResourceClaim are allocated exclusive CPUs based on the chosen mode and topology.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared CPU Pool Management&lt;/strong&gt;: All other containers without a ResourceClaim are confined to a shared pool of CPUs that are not reserved.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Topology Awareness&lt;/strong&gt;: The driver discovers detailed CPU topology including sockets, NUMA nodes, cores, SMT siblings, L3 cache (UncoreCache), and core types (Performance/Efficiency).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced CPU Allocation Strategies&lt;/strong&gt;: When in &lt;code&gt;&amp;quot;grouped&amp;quot;&lt;/code&gt; mode, the driver utilizes allocation logic adapted from the Kubelet&amp;rsquo;s CPU Manager, including:
&lt;ul&gt;
&lt;li&gt;NUMA aware best-fit allocation.&lt;/li&gt;
&lt;li&gt;Packing or spreading CPUs across cores.&lt;/li&gt;
&lt;li&gt;Preference for aligning allocations to UncoreCache boundaries.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Grouped Device Exposure&lt;/strong&gt;: NUMA/socket/machine aggregates are exposed as consumable
capacity, reducing API objects and scaling to large systems. The driver also support a &lt;code&gt;individual&lt;/code&gt; device exposure mode which is
&lt;strong&gt;deprecated&lt;/strong&gt;; see &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/opaque-cpuset-overrides/#migrate-from-individual-mode"&gt;Migrating from individual mode&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device Health Reporting&lt;/strong&gt;: The driver reports per-device health to the kubelet via the DRA &lt;code&gt;WatchHealthStatus&lt;/code&gt; gRPC API, reflected in &lt;code&gt;pod.status.containerStatuses[].allocatedResourcesStatus&lt;/code&gt;. Devices are reported &lt;code&gt;Healthy&lt;/code&gt; and go &lt;code&gt;Unknown&lt;/code&gt; if the driver stops sending updates. &lt;code&gt;Unhealthy&lt;/code&gt; is reserved for future use. See &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/workload-requirements/#device-health-reporting"&gt;Device Health Reporting&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="not-supported"&gt;Not Supported&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Admin Access is not supported. A ResourceClaim allocated with &lt;code&gt;adminAccess: true&lt;/code&gt; for a CPU device will fail claim preparation.&lt;/li&gt;
&lt;li&gt;This driver currently only manages CPU resources. Memory allocation and management are not supported.&lt;/li&gt;
&lt;li&gt;While the driver is topology-aware, the grouped mode currently abstracts some of the fine-grained details within the group. Future enhancements may explore combining &lt;a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/5075-dra-consumable-capacity/README.md"&gt;consumable capacity&lt;/a&gt; with &lt;a href="https://github.com/kubernetes/enhancements/blob/master/keps/sig-scheduling/4815-dra-partitionable-devices/README.md"&gt;partitionable devices&lt;/a&gt; for more hierarchical control.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sharing-resource-claims"&gt;Sharing resource claims&lt;/h3&gt;
&lt;p&gt;This driver strictly enforces a 1-to-1 mapping between Claims and Containers.
It does not support sharing a single ResourceClaim among multiple containers or multiple pods,
if that claims includes a resource (&lt;code&gt;dra.cpu&lt;/code&gt;) managed by this driver.
Attempting to share a claim among containers or pods will make all but the first pod consuming
the claim to fail to start with the error &lt;code&gt;CreateContainerError&lt;/code&gt; and remain in &lt;code&gt;Pending&lt;/code&gt; state.
When the driver runs with &lt;code&gt;publishNodeAllocatableResourceMapping&lt;/code&gt;, sharing across pods is
rejected earlier by &lt;code&gt;kube-scheduler&lt;/code&gt;: the second pod stays unschedulable with the message
&lt;code&gt;node allocatable resource claim ... has a mapped device and cannot be shared across pods&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Deep dive: how linux reports topology attributes</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/topology-linux-sysfs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/topology-linux-sysfs/</guid><description>&lt;p&gt;&lt;span id="deep-dive-how-linux-reports-topology-attributes"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;disclosure: this document was created with AI assistance.
The research was human-steered by LLM-operated; the document was then reviewed by humans
for correctness and edited extensively.&lt;/p&gt;
&lt;p&gt;This document assumes kernel code, architecture and hardware management knowledge.&lt;/p&gt;
&lt;p&gt;This document tries to be architecture agnostic whenever possible, but the author can only claim sufficient
knowledge about the &lt;code&gt;x86_64&lt;/code&gt; architecture.
The reader must assume the &amp;ldquo;silicon&amp;rdquo; and hardware is assumed to be &lt;code&gt;x86_64&lt;/code&gt; unless clearly specified otherwise.&lt;/p&gt;</description></item><item><title>Deep dive: finding and exploring PCI/PCIe root buses</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/pci-bus-linux-sysfs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/pci-bus-linux-sysfs/</guid><description>&lt;p&gt;&lt;span id="deep-dive-finding-and-exploring-pcipcie-root-buses"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;disclosure: this document was created with AI assistance.
The research was human-steered by LLM-operated; the document was then reviewed by humans
for correctness and edited extensively.&lt;/p&gt;
&lt;p&gt;This document assumes kernel code, architecture and hardware management knowledge.&lt;/p&gt;
&lt;p&gt;This document tries to be architecture agnostic whenever possible, but the author can only claim sufficient
knowledge about the &lt;code&gt;x86_64&lt;/code&gt; architecture.
The reader must assume the &amp;ldquo;silicon&amp;rdquo; and hardware is assumed to be &lt;code&gt;x86_64&lt;/code&gt; unless clearly specified otherwise.&lt;/p&gt;</description></item><item><title>Workload Configuration Requirements</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/workload-requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/workload-requirements/</guid><description>&lt;p&gt;&lt;span id="workload-configuration-requirements"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Currently, Kubernetes has two separate systems for requesting CPU resources: standard requests in pod/container fields (&lt;code&gt;pod.spec.resources&lt;/code&gt; or &lt;code&gt;pod.spec.containers[].resources&lt;/code&gt;) and DRA &lt;code&gt;ResourceClaim&lt;/code&gt;s.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The Kube-scheduler uses different plugins to account for these requests, and these plugins are mutually independent. This can lead to node CPU overcommitment because the scheduler might not have a complete picture of all allocated CPUs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kubelet only considers the standard CPU requests in the PodSpec for critical node-level enforcements like &lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/"&gt;QoS class&lt;/a&gt; assignment and cgroup hierarchy setup, ignoring CPUs allocated via DRA claims.&lt;/p&gt;</description></item><item><title>Custom Opaque CPUSet Allocation Overrides</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/opaque-cpuset-overrides/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/opaque-cpuset-overrides/</guid><description>&lt;p&gt;&lt;span id="custom-opaque-cpuset-allocation-overrides"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id="migrate-from-individual-mode"&gt;Migrate from individual mode&lt;/h2&gt;
&lt;p&gt;To keep scheduler-controlled selection of exact CPUs that the deprecated &lt;code&gt;Individual&lt;/code&gt; mode enabled,
use grouped mode with the external allocator.
Note that also NUMA-node or Socket grouping supports external allocator like the Machine grouping.
All grouping modes publish the external-allocator attributes, but the NUMA-node or Socket grouping
also retain a useful topology boundary:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;driverConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;cpuDeviceMode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;grouped&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;groupBy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;numanode&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# or socket&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allocator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;external&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The external allocator reads the selected grouped device&amp;rsquo;s
&lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/device-attributes/#external-allocator-attributes"&gt;external-allocator attributes&lt;/a&gt;, selects
CPUs from that group, and writes the cpuset in the opaque configuration described below. The
driver validates and enforces the selection. &lt;code&gt;groupBy: machine&lt;/code&gt; is also supported, but is less
preferred because it removes that topology boundary; use it only when the allocator must select
from the entire node.&lt;/p&gt;</description></item><item><title>SMT layout encoding</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/dev/smt-layout/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/dev/smt-layout/</guid><description>&lt;p&gt;&lt;span id="smt-layout-encoding"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;dra.cpu/smtLayout&lt;/code&gt; is a compact representation of logical-CPU sibling pairs.&lt;/p&gt;
&lt;p&gt;We reserve the option to version the encoding, adding new versions with
the &lt;code&gt;Vxxx&lt;/code&gt; suffix appended. The reason for this decision is because,
albeit aiming to be correct and completed, the encoding format didn&amp;rsquo;t
get sufficient testing and validation to be called confidently final.
Therefore we version to enable smooth future upgrades.
Users should consider then unversioned name &lt;code&gt;dra.cpu/smtLayout&lt;/code&gt; effectively
as synonym for &lt;code&gt;V1&lt;/code&gt;.
The V1 format represents only two-way SMT; see the user-facing
&lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/device-attributes/"&gt;attribute reference&lt;/a&gt; for more details.&lt;/p&gt;</description></item><item><title>Metrics</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/metrics/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/metrics/</guid><description>&lt;p&gt;&lt;span id="metrics"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The driver exposes Prometheus metrics on the existing HTTP &lt;code&gt;/metrics&lt;/code&gt; endpoint served by &lt;code&gt;--bind-address&lt;/code&gt; (default &lt;code&gt;:8080&lt;/code&gt;).&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-note" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Note&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Driver custom metrics are ALPHA. They are useful for early observability, but metric names, labels, buckets, and semantics may change in future releases.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Custom driver metrics can also be listed programmatically without starting the driver:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dracpu introspect metrics
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command prints JSON metadata for custom &lt;code&gt;dra_cpu_*&lt;/code&gt; metrics only. It does not include default Go runtime, process, or Prometheus client metrics.&lt;/p&gt;</description></item><item><title>Device Attributes and Selectors</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/device-attributes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/device-attributes/</guid><description>&lt;p&gt;&lt;span id="device-attributes-and-selectors"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Every CPU device the driver publishes carries topology attributes that claims can select on
with &lt;a href="https://kubernetes.io/docs/reference/using-api/cel/"&gt;CEL expressions&lt;/a&gt;.
This page is the attribute reference, with worked selector examples and sample
&lt;code&gt;ResourceSlice&lt;/code&gt; objects for each device mode.&lt;/p&gt;
&lt;div class="td-alert td-alert--md alert alert-note" role="alert"&gt;&lt;div class="td-alert-heading alert-heading" role="heading"&gt;Note&lt;/div&gt;
 &lt;div class="td-alert-body"&gt;
 &lt;p&gt;Attribute names and semantics are not yet a stable API: they may still change between
driver minor releases while the project is pre-1.0.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="attribute-reference"&gt;Attribute reference&lt;/h2&gt;
&lt;p&gt;Which attributes a device carries depends on the driver&amp;rsquo;s device mode
(&lt;code&gt;cpuDeviceMode&lt;/code&gt; in &lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/configuration/"&gt;Configuration&lt;/a&gt;): &lt;code&gt;grouped&lt;/code&gt; exposes one device per
CPU group. &lt;code&gt;individual&lt;/code&gt; exposes one device per CPU, but is &lt;strong&gt;deprecated&lt;/strong&gt;; see
&lt;a href="https://dra-driver-cpu.sigs.k8s.io/docs/user/opaque-cpuset-overrides/#migrate-from-individual-mode"&gt;Migrating from individual mode&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Troubleshooting &amp; Diagnostics</title><link>https://dra-driver-cpu.sigs.k8s.io/docs/user/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dra-driver-cpu.sigs.k8s.io/docs/user/troubleshooting/</guid><description>&lt;p&gt;&lt;span id="troubleshooting--diagnostics"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The repository includes a diagnostic tool available as &lt;code&gt;dracpu gatherinfo&lt;/code&gt; to collect node-local CPU topology and driver configuration information. The legacy &lt;code&gt;dracpu-gatherinfo&lt;/code&gt; alias remains supported in versions 0.2.z and 0.3.z. This is helpful for debugging CPU allocation issues or validating that the host topology is discovered correctly.&lt;/p&gt;
&lt;h2 id="dracpu-gatherinfo-overview"&gt;&lt;code&gt;dracpu gatherinfo&lt;/code&gt; Overview&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dracpu gatherinfo&lt;/code&gt; is a node-local diagnostic tool for collecting CPU information from the host where it runs. The command entrypoint is thin; the collection logic lives in &lt;code&gt;internal/gatherinfo&lt;/code&gt; and writes a YAML report with a top-level &lt;code&gt;layoutVersion&lt;/code&gt;.&lt;/p&gt;</description></item></channel></rss>