[NSX] top-cpu difference between vm and baremetal edge
NSX 환경에서 가장 중추적인 역할을 하는 요소 중 하나가 Edge 입니다.
이 Edge는 ESXi Hypervisor 환경 위에 VM으로 배포될 수도 있고, 일반 x86 서버에 Baremetal 형식으로 배포될 수도 있습니다.
이렇게 서로 다른 두 환경에서 배포가 될 수 있는데, 동일하게 High CPU 현상이 발생할 때는 봐야하는 Metric이 다를 수 있는 부분에 유의해야 합니다.
간단하게 설명하자면, VM 형태로 배포된 Edge의 경우에는 OS에서 제공하는 도구인 top 명령어를 통해 datapath 프로세스의 개별 CPU 사용량을 확인하면 되지만, Baremetal의 경우에는 top 에서 확인할 수 있는 CPU 사용량은 항상 고정되어 있어 CPU 사용량을 확인하기에는 유용하지 않습니다.
아래 실례를 통해 확인해보겠습니다.
1. VM Edge의 경우
Live
# ps -aux | grep datapathd root 168644 57.5 0.6 35051168 208128 ? Sl Apr20 30547:16 /opt/vmware/nsx-edge/sbin/datapathd --no-chdir --unixctl=/var/run/vmware/edge/dpd.ctl --pidfile=/var/run/vmware/edge/dpd.pid -vconsole:err -vsyslog:info --syslog-method=udp:127.0.0.1 --cfgfile=/config/vmware/edge/config.json root 2224274 0.0 0.0 6772 2200 pts/1 S+ 08:17 0:00 grep --color=auto datapathd # top -o %CPU top - 08:22:40 up 37 days, 6:51, 2 users, load average: 1.79, 1.64, 1.52 Tasks: 286 total, 2 running, 284 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.3 us, 7.0 sy, 0.0 ni, 87.6 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem : 32636656 total, 2223912 free, 16854964 used, 13557780 buff/cache KiB Swap: 0 total, 0 free, 0 used. 15336760 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ TGID COMMAND 168644 root 20 0 33.4g 208128 64876 S 58.2 0.6 30549:58 168644 dp-fp:0 2226112 root 20 0 37056 28124 9440 R 9.2 0.1 0:00.28 2226112 ip.py 168637 lb 20 0 494796 37844 33984 S 7.2 0.1 3762:48 168637 lb-dispatcher 1218 nsx-sha 20 0 4731204 82540 21696 S 4.9 0.3 2654:59 1218 python3 167635 root 20 0 127080 18728 16608 S 4.9 0.1 2228:07 167635 nsd 169876 root 20 0 0 0 0 S 4.6 0.0 2471:57 169876 kni_single # top -H -p 168644 top - 08:18:49 up 37 days, 6:48, 2 users, load average: 2.13, 1.58, 1.49 Threads: 71 total, 0 running, 71 sleeping, 0 stopped, 0 zombie %Cpu(s): 4.1 us, 6.2 sy, 0.0 ni, 89.5 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st KiB Mem : 32636656 total, 2249444 free, 16839456 used, 13547756 buff/cache KiB Swap: 0 total, 0 free, 0 used. 15352320 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ TGID COMMAND 168644 root 20 0 33.4g 208128 64876 S 10.5 0.6 5492:09 168644 dp-fp:0 168672 root 20 0 33.4g 208128 64876 S 0.0 0.6 0:00.00 168644 eal-intr-thread 168673 root 20 0 33.4g 208128 64876 S 0.0 0.6 0:00.00 168644 rte_mp_handle 169697 root 20 0 33.4g 208128 64876 S 10.5 0.6 5458:44 168644 dp-fp:1 169698 root 20 0 33.4g 208128 64876 S 10.2 0.6 5433:15 168644 dp-fp:2 169699 root 20 0 33.4g 208128 64876 S 10.5 0.6 5446:23 168644 dp-fp:3 169700 root 20 0 33.4g 208128 64876 S 6.2 0.6 3134:46 168644 dp-fp:4 169701 root 20 0 33.4g 208128 64876 S 5.9 0.6 3217:47 168644 dp-fp:5 ... |
Support Bundle
Support Bundle에서는 /var/log/vmware 폴더 하위에 있는 top-cpu.log 파일을 참고할 수 있습니다.
해당 파일은 일정 기간 동안 top 명령어 결과를 보여주기 때문에 이슈가 발생한 시점이 Support Bundle 수집 시점 이전이라도 High CPU Usage 현상을 확인하는데에는 도움이 될 수 있습니다.
2. Baremetal Edge의 경우
Live
Baremetal의 경우에는 datapath 프로세스의 %CPU Column이 fastpath로 사용되는 Core 수에 100%를 곱한 정도의 값을 계속 유지합니다.
아래 예제의 경우에는 총 48 Processor 중 fastpath로 24개의 Core가 사용되는 경우입니다.
top - 10:34:09 up 67 days, 19:51, 0 users, load average: 26.12, 26.19, 26.19 Tasks: 1033 total, 4 running, 1029 sleeping, 0 stopped, 0 zombie %Cpu(s): 52.1 us, 2.5 sy, 0.0 ni, 45.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 10557173+total, 96383481+free, 79713936 used, 12168576 buff/cache KiB Swap: 0 total, 0 free, 0 used. 96843648+avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ TGID COMMAND 8721 root 20 0 67.6g 2.4g 254476 R 2371 0.2 39144,29 8721 /opt/vmware/nsx-edge/sbin/datapathd --no-chdir --unixctl=/var/run/vmware/edge/dpd.ctl --pidfile=/va+ 8692 lb 20 0 974264 297068 292828 R 100.0 0.0 97646:37 8692 /opt/vmware/nsx-edge/sbin/lb-dispatcher --no-chdir --pidfile=/var/run/vmware/edge/dispatcher.pid -v+ 10074 root 20 0 0 0 0 R 100.0 0.0 97652:34 10074 [kni_single] 136 root 20 0 0 0 0 I 5.9 0.0 21:15.52 136 [kworker/24:0-events] 1947715 root 20 0 10664 4492 2960 R 5.9 0.0 0:00.02 1947715 top -n 1 -b -c -o %CPU -w180 1 root 20 0 173348 15104 8048 S 0.0 0.0 29:43.91 1 /sbin/init splash 2 root 20 0 0 0 0 S 0.0 0.0 0:07.05 2 [kthreadd] 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 3 [rcu_gp] 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 4 [rcu_par_gp] 5 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 5 [slub_flushwq] 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 6 [netns] 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 8 [kworker/0:0H-kblockd] 10 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 10 [mm_percpu_wq] |
따라서, Baremetal의 경우에는 top 대신에 admin session에서 "get dataplane cpu stats" 명령어를 확보해야 합니다.
Support Bundle
Support Bundle에서 edge 폴더 하위에 datapath-cpu-stats 파일이 수집되지만 Support Bundle이 수집되기 때문에 Baremetal의 경우에는 문제 시점에 "get dataplane cpu stats" 명령어 수집이 반드시 필요합니다.
정리해보자면,
1) VM Edge이 경우에 top 명령어에서 datapath 프로세스의 CPU 사용률은 실제 사용률이지만,
2) Baremetal Edge의 경우에는 fastpath에 사용되는 Core 수 * 100%이기 때문에 High CPU Usage 확인에 의미가 없으므로 "get dataplane cpu stats" 명령어 확인이 필수
라고 생각할 수 있습니다.
Edge에서 High CPU Usage를 Troubleshooting 하기 위해서는 "get dataplane cpu stats" 명령어 결과 이외에도 다른 여러 정보가 필요합니다. 이 부분은 추후에 다시 한 번 다뤄보겠습니다.