Manage node-level performance profiling with Performance Profile Controller
Intro
The Performance Profile controller
, formerly known as Performance-Addon Operator
, is now part of Node Tuning Operator
.
Performance Profile controller allows you to optimize nodes in your hosted cluster for applications sensitive to CPU and network latency.
In HyperShift, node profiling can be configured by creating ConfigMaps which contain PerformanceProfile
objects, and referencing these ConfigMaps in your NodePools.
Steps
-
Create a ConfigMap which contains a valid
PerformanceProfile
manifest and reference it in a NodePool. The examplePerformanceProfile
manifest defines several parameters like how to partition your CPUs into housekeeping and workload partitions, what topology policy to use, and more. Save this ConfigMap asperfprof-1.yaml
.apiVersion: v1 kind: ConfigMap metadata: name: perfprof-1 namespace: clusters data: tuning: | apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: performance spec: additionalKernelArgs: - nmi_watchdog=0 - audit=0 - mce=off - processor.max_cstate=1 - intel_idle.max_cstate=0 - idle=poll cpu: isolated: "1,3,5,7,9,11,13,15,17,19-39,41,43,45,47,49,51,53,55,57" reserved: "0,2,4,6,8,10,12,14,16,18,40,42,44,46,48,50,52,54,56,58" offlined: "59-79" nodeSelector: node-role.kubernetes.io/worker-cnf: "" numa: topologyPolicy: single-numa-node realTimeKernel: enabled: true workloadHints: highPowerConsumption: true realTime: true
NOTE: See PerformanceProfile Creator for help in creating this
PerformanceProfile
manifests. -
Create the ConfigMap in the management cluster:
oc --kubeconfig="$MGMT_KUBECONFIG" create -f perfprof-1.yaml
-
Reference the ConfigMap in the NodePools
spec.tuningConfig
field, either by editing an existing NodePool or creating a new NodePool. In this example we assume we only have one NodePool callednodepool-1
, containing 2 Nodes.apiVersion: hypershift.openshift.io/v1alpha1 kind: NodePool metadata: ... name: nodepool-1 namespace: clusters ... spec: ... tuningConfig: - name: perfprof-1 status: ...
NOTE: Remember one NodePool can only reference at most one
PerformanceProfile
-
Now that the ConfigMap containing a
PerformanceProfile
manifest has been created and referenced in a NodePool, the Performance Profile Controller will handle thePerformanceProfile
object and will create the following elements:MachineConfig
: This will be embedded into a ConfigMap that will be handled by NTO as any other ConfigMap with MachineConfig embedded (see this PR for further info)KubeletConfig
: This will be embedded into a ConfigMap that will be handled by NTO in a simillar way as a ConfigMap with a MachineConfig embeddedTuned
: This will be embedded into a ConfigMap and so handled directly by the NTO.RuntimeClass
: This will be created directly inside the guest cluster.