Este contenido no está disponible en el idioma seleccionado.
Chapter 19. Creating a performance profile
Learn about the Performance Profile Creator (PPC) and how you can use it to create a performance profile.
19.1. About the Performance Profile Creator Copiar enlaceEnlace copiado en el portapapeles!
The Performance Profile Creator (PPC) is a command-line tool, delivered with the Performance Addon Operator, used to create the performance profile. The tool consumes
must-gather
The tool is run by one of the following methods:
-
Invoking
podman - Calling a wrapper script
19.1.1. Gathering data about your cluster using the must-gather command Copiar enlaceEnlace copiado en el portapapeles!
The Performance Profile Creator (PPC) tool requires
must-gather
must-gather
Prerequisites
-
Access to the cluster as a user with the role.
cluster-admin - Access to the Performance Addon Operator image.
-
The OpenShift CLI () installed.
oc
Procedure
-
Navigate to the directory where you want to store the data.
must-gather Run
on your cluster:must-gather$ oc adm must-gather --image=<PAO_image> --dest-dir=<dir>NoteThe
command must be run with themust-gatherimage. The output can optionally be compressed. Compressed output is required if you are running the Performance Profile Creator wrapper script.performance-addon-operator-must-gatherExample
$ oc adm must-gather --image=registry.redhat.io/openshift4/performance-addon-operator-must-gather-rhel8:v4.8 --dest-dir=must-gatherCreate a compressed file from the
directory:must-gather$ tar cvaf must-gather.tar.gz must-gather/
19.1.2. Running the Performance Profile Creator using podman Copiar enlaceEnlace copiado en el portapapeles!
As a cluster administrator, you can run
podman
Prerequisites
-
Access to the cluster as a user with the role.
cluster-admin - A cluster installed on bare metal hardware.
-
A node with and OpenShift CLI (
podman) installed.oc
Procedure
Check the machine config pool:
$ oc get mcpExample output
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-acd1358917e9f98cbdb599aea622d78b True False False 3 3 3 0 22h worker-cnf rendered-worker-cnf-1d871ac76e1951d32b2fe92369879826 False True False 2 1 1 0 22hUse Podman to authenticate to
:registry.redhat.io$ podman login registry.redhat.ioUsername: myrhusername Password: ************Optional: Display help for the PPC tool:
$ podman run --entrypoint performance-profile-creator registry.redhat.io/openshift4/performance-addon-rhel8-operator:v4.8 -hExample output
A tool that automates creation of Performance Profiles Usage: performance-profile-creator [flags] Flags: --disable-ht Disable Hyperthreading -h, --help help for performance-profile-creator --info string Show cluster information; requires --must-gather-dir-path, ignore the other arguments. [Valid values: log, json] (default "log") --mcp-name string MCP name corresponding to the target machines (required) --must-gather-dir-path string Must gather directory path (default "must-gather") --power-consumption-mode string The power consumption mode. [Valid values: default, low-latency, ultra-low-latency] (default "default") --profile-name string Name of the performance profile to be created (default "performance") --reserved-cpu-count int Number of reserved CPUs (required) --rt-kernel Enable Real Time Kernel (required) --split-reserved-cpus-across-numa Split the Reserved CPUs across NUMA nodes --topology-manager-policy string Kubelet Topology Manager Policy of the performance profile to be created. [Valid values: single-numa-node, best-effort, restricted] (default "restricted") --user-level-networking Run with User level Networking(DPDK) enabledRun the Performance Profile Creator tool in discovery mode:
NoteDiscovery mode inspects your cluster using the output from
. The output produced includes information on:must-gather- The NUMA cell partitioning with the allocated CPU ids
- Whether hyperthreading is enabled
Using this information you can set appropriate values for some of the arguments supplied to the Performance Profile Creator tool.
$ podman run --entrypoint performance-profile-creator -v /must-gather:/must-gather:z registry.redhat.io/openshift4/performance-addon-rhel8-operator:v4.8 --info log --must-gather-dir-path /must-gatherNoteThis command uses the performance profile creator as a new entry point to
. It maps thepodmandata for the host into the container image and invokes the required user-supplied profile arguments to produce themust-gatherfile.my-performance-profile.yamlThe
option can be the path to either:-v-
The output directory
must-gather -
An existing directory containing the decompressed tarball
must-gather
The
option requires a value which specifies the output format. Possible values are log and JSON. The JSON format is reserved for debugging.infoRun
:podman$ podman run --entrypoint performance-profile-creator -v /must-gather:/must-gather:z registry.redhat.io/openshift4/performance-addon-rhel8-operator:v4.8 --mcp-name=worker-cnf --reserved-cpu-count=20 --rt-kernel=true --split-reserved-cpus-across-numa=false --topology-manager-policy=single-numa-node --must-gather-dir-path /must-gather --power-consumption-mode=ultra-low-latency > my-performance-profile.yamlNoteThe Performance Profile Creator arguments are shown in the Performance Profile Creator arguments table. The following arguments are required:
-
reserved-cpu-count -
mcp-name -
rt-kernel
The
argument in this example is set tomcp-namebased on the output of the commandworker-cnf. For Single Node OpenShift (SNO) useoc get mcp.--mcp-name=master-
Review the created YAML file:
$ cat my-performance-profile.yamlExample output
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,59-79 reserved: 0,2,4,6,8,10,12,14,16,18,40,42,44,46,48,50,52,54,56,58 nodeSelector: node-role.kubernetes.io/worker-cnf: "" numa: topologyPolicy: single-numa-node realTimeKernel: enabled: trueApply the generated profile:
NoteInstall the Performance Addon Operator before applying the profile.
$ oc apply -f my-performance-profile.yaml
19.1.2.1. How to run podman to create a performance profile Copiar enlaceEnlace copiado en el portapapeles!
The following example illustrates how to run
podman
Node hardware configuration:
- 80 CPUs
- Hyperthreading enabled
- Two NUMA nodes
- Even numbered CPUs run on NUMA node 0 and odd numbered CPUs run on NUMA node 1
Run
podman
$ podman run --entrypoint performance-profile-creator -v /must-gather:/must-gather:z registry.redhat.io/openshift4/performance-addon-rhel8-operator:v4.8 --mcp-name=worker-cnf --reserved-cpu-count=20 --rt-kernel=true --split-reserved-cpus-across-numa=true --must-gather-dir-path /must-gather > my-performance-profile.yaml
The created profile is described in the following YAML:
apiVersion: performance.openshift.io/v2
kind: PerformanceProfile
metadata:
name: performance
spec:
cpu:
isolated: 10-39,50-79
reserved: 0-9,40-49
nodeSelector:
node-role.kubernetes.io/worker-cnf: ""
numa:
topologyPolicy: restricted
realTimeKernel:
enabled: true
In this case, 10 CPUs are reserved on NUMA node 0 and 10 are reserved on NUMA node 1.
19.1.3. Running the Performance Profile Creator wrapper script Copiar enlaceEnlace copiado en el portapapeles!
The performance profile wrapper script simplifies the running of the Performance Profile Creator (PPC) tool. It hides the complexities associated with running
podman
Prerequisites
- Access to the Performance Addon Operator image.
-
Access to the tarball.
must-gather
Procedure
Create a file on your local machine named, for example,
:run-perf-profile-creator.sh$ vi run-perf-profile-creator.shPaste the following code into the file:
#!/bin/bash readonly CONTAINER_RUNTIME=${CONTAINER_RUNTIME:-podman} readonly CURRENT_SCRIPT=$(basename "$0") readonly CMD="${CONTAINER_RUNTIME} run --entrypoint performance-profile-creator" readonly IMG_EXISTS_CMD="${CONTAINER_RUNTIME} image exists" readonly IMG_PULL_CMD="${CONTAINER_RUNTIME} image pull" readonly MUST_GATHER_VOL="/must-gather" PAO_IMG="registry.redhat.io/openshift4/performance-addon-rhel8-operator:v4.8" MG_TARBALL="" DATA_DIR="" usage() { print "Wrapper usage:" print " ${CURRENT_SCRIPT} [-h] [-p image][-t path] -- [performance-profile-creator flags]" print "" print "Options:" print " -h help for ${CURRENT_SCRIPT}" print " -p Performance Addon Operator image" print " -t path to a must-gather tarball" ${IMG_EXISTS_CMD} "${PAO_IMG}" && ${CMD} "${PAO_IMG}" -h } function cleanup { [ -d "${DATA_DIR}" ] && rm -rf "${DATA_DIR}" } trap cleanup EXIT exit_error() { print "error: $*" usage exit 1 } print() { echo "$*" >&2 } check_requirements() { ${IMG_EXISTS_CMD} "${PAO_IMG}" || ${IMG_PULL_CMD} "${PAO_IMG}" || \ exit_error "Performance Addon Operator image not found" [ -n "${MG_TARBALL}" ] || exit_error "Must-gather tarball file path is mandatory" [ -f "${MG_TARBALL}" ] || exit_error "Must-gather tarball file not found" DATA_DIR=$(mktemp -d -t "${CURRENT_SCRIPT}XXXX") || exit_error "Cannot create the data directory" tar -zxf "${MG_TARBALL}" --directory "${DATA_DIR}" || exit_error "Cannot decompress the must-gather tarball" chmod a+rx "${DATA_DIR}" return 0 } main() { while getopts ':hp:t:' OPT; do case "${OPT}" in h) usage exit 0 ;; p) PAO_IMG="${OPTARG}" ;; t) MG_TARBALL="${OPTARG}" ;; ?) exit_error "invalid argument: ${OPTARG}" ;; esac done shift $((OPTIND - 1)) check_requirements || exit 1 ${CMD} -v "${DATA_DIR}:${MUST_GATHER_VOL}:z" "${PAO_IMG}" "$@" --must-gather-dir-path "${MUST_GATHER_VOL}" echo "" 1>&2 } main "$@"Add execute permissions for everyone on this script:
$ chmod a+x run-perf-profile-creator.shOptional: Display the
command usage:run-perf-profile-creator.sh$ ./run-perf-profile-creator.sh -hExpected output
Wrapper usage: run-perf-profile-creator.sh [-h] [-p image][-t path] -- [performance-profile-creator flags] Options: -h help for run-perf-profile-creator.sh -p Performance Addon Operator image1 -t path to a must-gather tarball2 A tool that automates creation of Performance Profiles Usage: performance-profile-creator [flags] Flags: --disable-ht Disable Hyperthreading -h, --help help for performance-profile-creator --info string Show cluster information; requires --must-gather-dir-path, ignore the other arguments. [Valid values: log, json] (default "log") --mcp-name string MCP name corresponding to the target machines (required) --must-gather-dir-path string Must gather directory path (default "must-gather") --power-consumption-mode string The power consumption mode. [Valid values: default, low-latency, ultra-low-latency] (default "default") --profile-name string Name of the performance profile to be created (default "performance") --reserved-cpu-count int Number of reserved CPUs (required) --rt-kernel Enable Real Time Kernel (required) --split-reserved-cpus-across-numa Split the Reserved CPUs across NUMA nodes --topology-manager-policy string Kubelet Topology Manager Policy of the performance profile to be created. [Valid values: single-numa-node, best-effort, restricted] (default "restricted") --user-level-networking Run with User level Networking(DPDK) enabledNoteThere two types of arguments:
-
Wrapper arguments namely ,
-hand-p-t - PPC arguments
-
Wrapper arguments namely
Run the performance profile creator tool in discovery mode:
NoteDiscovery mode inspects your cluster using the output from
. The output produced includes information on:must-gather- The NUMA cell partitioning with the allocated CPU IDs
- Whether hyperthreading is enabled
Using this information you can set appropriate values for some of the arguments supplied to the Performance Profile Creator tool.
$ ./run-perf-profile-creator.sh -t /must-gather/must-gather.tar.gz -- --info=logNoteThe
option requires a value which specifies the output format. Possible values are log and JSON. The JSON format is reserved for debugging.infoCheck the machine config pool:
$ oc get mcpExample output
NAME CONFIG UPDATED UPDATING DEGRADED MACHINECOUNT READYMACHINECOUNT UPDATEDMACHINECOUNT DEGRADEDMACHINECOUNT AGE master rendered-master-acd1358917e9f98cbdb599aea622d78b True False False 3 3 3 0 22h worker-cnf rendered-worker-cnf-1d871ac76e1951d32b2fe92369879826 False True False 2 1 1 0 22hCreate a performance profile:
$ ./run-perf-profile-creator.sh -t /must-gather/must-gather.tar.gz -- --mcp-name=worker-cnf --reserved-cpu-count=2 --rt-kernel=true > my-performance-profile.yamlNoteThe Performance Profile Creator arguments are shown in the Performance Profile Creator arguments table. The following arguments are required:
-
reserved-cpu-count -
mcp-name -
rt-kernel
The
argument in this example is set tomcp-namebased on the output of the commandworker-cnf. For Single Node OpenShift (SNO) useoc get mcp.--mcp-name=master-
Review the created YAML file:
$ cat my-performance-profile.yamlExample output
apiVersion: performance.openshift.io/v2 kind: PerformanceProfile metadata: name: performance spec: cpu: isolated: 1-39,41-79 reserved: 0,40 nodeSelector: node-role.kubernetes.io/worker-cnf: "" numa: topologyPolicy: restricted realTimeKernel: enabled: falseApply the generated profile:
NoteInstall the Performance Addon Operator before applying the profile.
$ oc apply -f my-performance-profile.yaml
19.1.4. Performance Profile Creator arguments Copiar enlaceEnlace copiado en el portapapeles!
| Argument | Description |
|---|---|
|
| Disable hyperthreading. Possible values:
Default:
Warning If this argument is set to
|
|
| This captures cluster information and is used in discovery mode only. Discovery mode also requires the
Possible values:
Default:
|
|
| MCP name for example
|
|
| Must gather directory path. This parameter is required. When the user runs the tool with the wrapper script
|
|
| The power consumption mode. Possible values:
Default:
|
|
| Name of the performance profile to create. Default:
|
|
| Number of reserved CPUs. This parameter is required. Note This must be a natural number. A value of 0 is not allowed. |
|
| Enable real-time kernel. This parameter is required. Possible values:
|
|
| Split the reserved CPUs across NUMA nodes. Possible values:
Default:
|
|
| Kubelet Topology Manager policy of the performance profile to be created. Possible values:
Default:
|
|
| Run with user level networking (DPDK) enabled. Possible values:
Default:
|