Networking

[NSX] top-cpu difference between vm and baremetal edge

haewon83 2024. 5. 27. 17:30

 

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" 명령어 결과 이외에도 다른 여러 정보가 필요합니다. 이 부분은 추후에 다시 한 번 다뤄보겠습니다.