Bug 2020694
| Summary: | SNO with realtimekernel enabled through PAO becomes unstable after running control plane churn workload and rebooting | ||||||
|---|---|---|---|---|---|---|---|
| Product: | OpenShift Container Platform | Reporter: | OpenShift BugZilla Robot <openshift-bugzilla-robot> | ||||
| Component: | Performance Addon Operator | Assignee: | Artyom <alukiano> | ||||
| Status: | CLOSED ERRATA | QA Contact: | Gowrishankar Rajaiyan <grajaiya> | ||||
| Severity: | high | Docs Contact: | |||||
| Priority: | urgent | ||||||
| Version: | 4.8 | CC: | aos-bugs, bhu, browsell, dblack, dgonyier, fromani, grajaiya, juri.lelli, keyoung, mniranja, murali, rkhan, rolove, shajmakh, smalleni | ||||
| Target Milestone: | --- | Keywords: | TestBlocker | ||||
| Target Release: | 4.7.z | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Fixed In Version: | performance-addon-operator-container-v4.7.7-2 | Doc Type: | If docs needed, set a value | ||||
| Doc Text: | Story Points: | --- | |||||
| Clone Of: | Environment: | ||||||
| Last Closed: | 2021-11-29 07:07:22 UTC | Type: | --- | ||||
| Regression: | --- | Mount Type: | --- | ||||
| Documentation: | --- | CRM: | |||||
| Verified Versions: | Category: | --- | |||||
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
| Cloudforms Team: | --- | Target Upstream Version: | |||||
| Embargoed: | |||||||
| Bug Depends On: | 1975348 | ||||||
| Bug Blocks: | |||||||
| Attachments: |
|
||||||
|
Comment 4
Dwaine Gonyier
2021-11-22 21:22:51 UTC
sh# oc version
Client Version: 4.9.7
Server Version: 4.7.37
Kubernetes Version: v1.20.10+bbbc079
sh# oc get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ocp47-master-0.demo.lab.shajmakh Ready master 4d7h v1.20.10+bbbc079 192.168.122.236 <none> Red Hat Enterprise Linux CoreOS 47.84.202111031903-0 (Ootpa) 4.18.0-305.25.1.rt7.97.el8_4.x86_64 cri-o://1.20.5-7.rhaos4.7.gite80c8db.el8
ocp47-master-1.demo.lab.shajmakh Ready master 4d7h v1.20.10+bbbc079 192.168.122.223 <none> Red Hat Enterprise Linux CoreOS 47.84.202111031903-0 (Ootpa) 4.18.0-305.25.1.rt7.97.el8_4.x86_64 cri-o://1.20.5-7.rhaos4.7.gite80c8db.el8
ocp47-master-2.demo.lab.shajmakh Ready master 4d7h v1.20.10+bbbc079 192.168.122.149 <none> Red Hat Enterprise Linux CoreOS 47.84.202111031903-0 (Ootpa) 4.18.0-305.25.1.rt7.97.el8_4.x86_64 cri-o://1.20.5-7.rhaos4.7.gite80c8db.el8
ocp47-worker-0.demo.lab.shajmakh Ready worker 4d7h v1.20.10+bbbc079 192.168.122.92 <none> Red Hat Enterprise Linux CoreOS 47.84.202111031903-0 (Ootpa) 4.18.0-305.25.1.rt7.97.el8_4.x86_64 cri-o://1.20.5-7.rhaos4.7.gite80c8db.el8
ocp47-worker-1.demo.lab.shajmakh Ready worker 4d7h v1.20.10+bbbc079 192.168.122.63 <none> Red Hat Enterprise Linux CoreOS 47.84.202111031903-0 (Ootpa) 4.18.0-305.25.1.rt7.97.el8_4.x86_64 cri-o://1.20.5-7.rhaos4.7.gite80c8db.el8
sh# oc describe pod performance-operator-6b6d55847d-dw82d | grep -Ei 'Image ID'
Image ID: registry.redhat.io/openshift4/performance-addon-rhel8-operator@sha256:6538c825c23adeeb44d0e58fe6a701b49d5475b0c696cd731d702cf45fd6fbd8
# Apply performance profile
# and wait for nodes to restart
apiVersion: performance.openshift.io/v2
kind: PerformanceProfile
metadata:
name: perf-example-master
spec:
cpu:
isolated: "2-29"
reserved: "0,1,30,31"
hugepages:
defaultHugepagesSize: 1G
pages:
- count: 16
size: 1G
node: 0
nodeSelector:
node-role.kubernetes.io/master: ""
machineConfigPoolSelector:
pools.operator.machineconfiguration.openshift.io/master: ""
numa:
topologyPolicy: "restricted"
realTimeKernel:
enabled: true
# Ran kube-burner for a long time (hours) with attached yaml files in
# api-intensive.tar.gz
$ oc login --username=kubeadmin --password=***
$ cd api-intensive
$ token=$(oc whoami -t)
$ uuid=$(uuidgen)
$ kube-burner init -c api-intensive.yml -t ${token} --uuid ${uuid}
# Run all of the following commands from debug shell
$ oc debug node/<master_node_name>
sh-4.4# chroot /host
sh-4.4# [...]
# verify reserved CPU mask from running performance profile
sh-4.4# taskset -c -p 1
pid 1's current affinity list: 0,1,30,31
sh-4.4# taskset -p 1
pid 1's current affinity mask: c0000003
# verify interface rps masks have the same value
sh-4.4# grep '^' /sys/devices/virtual/net/*/queues/rx-0/rps_cpus
/sys/devices/virtual/net/br0/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/lo/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/ovs-system/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/tun0/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth0f004795/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/veth1220ba0a/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth15e53c38/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/veth4be24c98/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth7a66effb/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/veth7f1f479a/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/vetha0e57016/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vetha4a532ff/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/vetha7a4349b/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vetha99cf039/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethad8423f5/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/vethb075958b/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethb2eeca9c/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethc28b7c1f/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethcb5a498e/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethcde19363/queues/rx-0/rps_cpus:00000000
/sys/devices/virtual/net/vethcece476a/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethe3bbcd02/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethe86a6c98/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethece93073/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vxlan_sys_4789/queues/rx-0/rps_cpus:c0000003
# Inspected each veth interface with bad mask (00000000) and determined that they either
# were not attached to a pod, or a pod with no running containers. Correlated
# interfaces to pods/containers by netns value
sh-4-4# cd /tmp
#netns in pods:
sh-4.4# for podid in $(crictl pods | grep -v POD | cut -f1 -d' ') ; do for netns in $(crictl inspectp ${podid} | grep -o '/var/run/netns/[-0-9a-f]\+' | cut -d'/' -f5) ; do echo "${podid} ${netns}" ; done ; done | sor -u | tee podid.txt
o
#netns for veths with broken rps masks:
sh--4.4# for intfx in $(grep '^' /sys/devices/virtual/net/*/queues/rx-0/rps_cpus | grep :000 | cut -d'/' -f6 ) ; do echo -n "$intfx " ; ip link show "$intfx" 2>>/dev/null grep -A1 "$intfx" | grep -E -o '[-0-9a-f]{1,36}$ ; done | tee broken.txt
# Reboot node
# Verify low-latency-hooks.sh includes the correct block of code
sh-4.4# cat /usr/local/bin/low-latency-hooks.sh
[...]
# Updates the RPS mask for the interface inside of the container network namespace
mode=$(ip netns exec "${ns}" [ -w /sys ] && echo "rw" || echo "ro" 2>&1)
[ $? -eq 0 ] || { logger "${0} Failed to determine if the /sys is writable: ${mode}"; exit 0; }
if [ "${mode}" = "ro" ]; then
res=$(ip netns exec "${ns}" mount -o remount,rw /sys 2>&1)
[ $? -eq 0 ] || { logger "${0}: Failed to remount /sys as rw: ${res}"; exit 0; }
fi
[...]
# Verify contents of 99-master-rps.rules
sh-4.4# cat /etc/udev/rules.d/99-netdev-rps.rules
SUBSYSTEM=="net", ACTION=="add", ENV{DEVPATH}!="/devices/virtual/net/veth*", TAG+="systemd", ENV{SYSTEMD_WANTS}="update-rps@%k.service"
# Verified after reboot there were no veth interfaces with broken rps masks
sh-4.4# grep '^' /sys/devices/virtual/net/*/queues/rx-0/rps_cpus
/sys/devices/virtual/net/br0/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/lo/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/ovs-system/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/tun0/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth051631d3/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth1d322ba9/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth266a49ad/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth43980cfe/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth50232f15/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth599beb1e/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth5d824e9f/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth814a76fd/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/veth83f46781/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethaf44f2ea/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethf3adc975/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vethfe9eff64/queues/rx-0/rps_cpus:c0000003
/sys/devices/virtual/net/vxlan_sys_4789/queues/rx-0/rps_cpus:c0000003
Created attachment 1843410 [details]
kube-burner YAML files
Attachement for verification
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory (OpenShift Container Platform 4.7.37 low-latency extras update), and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://access.redhat.com/errata/RHBA-2021:4756 |