Can we expose Hyper threaded to VM?

최근들어 요 내용에 대한 질문들을 많이 받았습니다.

 

AWS 의 EC2 인스턴스와의 비교부터 시작해서… 기타 등등.. 

 

제가 AWS 는 잘 몰라서 제대로 비교하기는 뭐하지만, AWS 의 EC2 상품은 일부를 제외하고는 8 CPU 상품은 4 Core, 8 Thread 상품인것 같습니다.

 

이러다보니까 VMware 와의 비교를 하면서 문의들이 시작이 되었죠.. 제가 알기로는 KVM Hypervisor 에서는 VM 의 소켓과 Thread 수를 조절할 수 있다고 합니다. 

AWS 의 Nitro 기반 EC2 도 KVM 기반의 hypervisor 이기 때문에 가능한 것으로 보입니다.

 

결론부터 말씀드리면 ESXi 상에서는 VM 에다가 Hyper-threaded 를 노출시키지 않습니다.

만약 24 vCPU 를 할당했다라고 하면 VM 이 바라보는 것은 24 Core 24 Thread 이지, 12 Core 24 Thread 가 아닙니다. 

그렇기 때문에 VM 에 대한 사이징을 할때는 Thread 수가 아닌 Core 수를 기준으로 하라고 말씀을 드리는 것입니다.

 

관련해서 따라 나오는 옵션이 PreferHT 옵션입니다. 이 옵션을 VM 에다가 Hyper-threaded 를 노출시키는 기능이다 라고 오해하시는 경우가 있는데, 그렇지 않습니다.

PreferHT 는 NUMA client (VM) 의 NUMA 토플로지와 연관된 옵션입니다.

 

아주 심플하게 말씀드리면, 제가 위에서 이렇게 말씀드렸죠.

 

  • 그렇기 때문에 VM 에 대한 사이징을 할때는 Thread 수가 아닌 Core 수를 기준으로 하라고 말씀을 드리는 것입니다.

 

그 이유는 vNUMA 가 동작하는 조건과 연관이 있습니다.

 

vNUMA 가 동작하기 위해서는 다음 두가지 조건이 “AND” 로 만족되어야 합니다.

  1. VM 에 vCPU 를 9개 이상 할당했을 때
  2. VM 에 할당한 vCPU 수가 단일 소켓의 Core 수보다 많을 때

위 두가지가 만족이 되어야 합니다. 그렇다면 14 Cores x 2 socket 시스템 (HT=on 으로 56 thread) 에서 24 vCPU 를 VM 에다가 할당하면 어떻게 될까요?  위 두가지 조건을 만족하기 때문에 vNUMA 가 동작합니다.

DICT                  numvcpus = "24"
DICT                   memSize = "32768"
DICT               displayName = "DVDStore_DB"
DICT      numa.autosize.cookie = "280001"
DICT numa.autosize.vcpu.maxPerVirtualNode = "14"
numaHost: NUMA config: consolidation= 1 preferHT= 0
numa: coresPerSocket= 1 maxVcpusPerVPD= 12
numaHost: 24 VCPUs 2 VPDs 2 PPDs
numaHost: VCPU 0 VPD 0 PPD 0
numaHost: VCPU 1 VPD 0 PPD 0
numaHost: VCPU 2 VPD 0 PPD 0
numaHost: VCPU 3 VPD 0 PPD 0
numaHost: VCPU 4 VPD 0 PPD 0
numaHost: VCPU 5 VPD 0 PPD 0
numaHost: VCPU 6 VPD 0 PPD 0
numaHost: VCPU 7 VPD 0 PPD 0
numaHost: VCPU 8 VPD 0 PPD 0
numaHost: VCPU 9 VPD 0 PPD 0
numaHost: VCPU 10 VPD 0 PPD 0
numaHost: VCPU 11 VPD 0 PPD 0
numaHost: VCPU 12 VPD 1 PPD 1
numaHost: VCPU 13 VPD 1 PPD 1
numaHost: VCPU 14 VPD 1 PPD 1
numaHost: VCPU 15 VPD 1 PPD 1
numaHost: VCPU 16 VPD 1 PPD 1
numaHost: VCPU 17 VPD 1 PPD 1
numaHost: VCPU 18 VPD 1 PPD 1
numaHost: VCPU 19 VPD 1 PPD 1
numaHost: VCPU 20 VPD 1 PPD 1
numaHost: VCPU 21 VPD 1 PPD 1
numaHost: VCPU 22 VPD 1 PPD 1
numaHost: VCPU 23 VPD 1 PPD 1


    2103975     2103975 U    vmx-vcpu-0:DVDStore_       135.239 WAIT             5.339      0.000 IDLE                  130.425       130.200         0.080      0     -1      pct  24000 vm.2103942   16390  26    0    1 0-27        
    2103977     2103975 U    vmx-vcpu-1:DVDStore_       135.235 WAIT             1.081      0.000 IDLE                  134.193       133.852         0.041      0     -1      pct  24000 vm.2103942   16390   8    0    1 0-27        
    2103978     2103975 U    vmx-vcpu-2:DVDStore_       135.235 WAIT             0.492      0.000 IDLE                  134.698       134.328         0.054      0     -1      pct  24000 vm.2103942   16390  16    0    1 0-27        
    2103979     2103975 U    vmx-vcpu-3:DVDStore_       135.235 WAIT             0.574      0.000 IDLE                  134.634       134.195         0.054      0     -1      pct  24000 vm.2103942   16390  12    0    1 0-27        
    2103980     2103975 U    vmx-vcpu-4:DVDStore_       135.234 WAIT             0.698      0.000 IDLE                  134.549       134.144         0.048      0     -1      pct  24000 vm.2103942   16390   2    0    1 0-27        
    2103981     2103975 U    vmx-vcpu-5:DVDStore_       135.234 WAIT             1.910      0.000 IDLE                  133.429       133.042         0.055      0     -1      pct  24000 vm.2103942   16390  10    0    1 0-27        
    2103982     2103975 U    vmx-vcpu-6:DVDStore_       135.234 WAIT             2.175      0.000 IDLE                  133.334       132.911         0.037      0     -1      pct  24000 vm.2103942   16390   5    0    1 0-27        
    2103983     2103975 U    vmx-vcpu-7:DVDStore_       135.234 WAIT             2.287      0.000 IDLE                  133.293       132.878         0.029      0     -1      pct  24000 vm.2103942   16390  26    0    1 0-27        
    2103984     2103975 U    vmx-vcpu-8:DVDStore_       135.234 WAIT             2.744      0.000 IDLE                  132.873       132.426         0.036      0     -1      pct  24000 vm.2103942   16390   7    0    1 0-27        
    2103985     2103975 U    vmx-vcpu-9:DVDStore_       135.233 WAIT             2.015      0.000 IDLE                  133.486       133.040         0.025      0     -1      pct  24000 vm.2103942   16390   0    0    1 0-27        
    2103986     2103975 U    vmx-vcpu-10:DVDStore       135.233 WAIT             2.489      0.000 IDLE                  133.041       132.593         0.034      0     -1      pct  24000 vm.2103942   16390  20    0    1 0-27        
    2103987     2103975 U    vmx-vcpu-11:DVDStore       135.233 WAIT             1.972      0.000 IDLE                  133.457       133.032         0.030      0     -1      pct  24000 vm.2103942   16390  17    0    1 0-27        
    2103988     2103975 U    vmx-vcpu-12:DVDStore       135.233 WAIT             1.084      0.000 IDLE                  134.188       133.780         0.026      0     -1      pct  24000 vm.2103942   16390  34    0    1 28-55      
    2103989     2103975 U    vmx-vcpu-13:DVDStore       135.233 WAIT             0.638      0.000 IDLE                  134.552       134.099         0.029      0     -1      pct  24000 vm.2103942   16390  40    0    1 28-55      
    2103990     2103975 U    vmx-vcpu-14:DVDStore       135.232 WAIT             0.973      0.000 IDLE                  134.333       133.890         0.014      0     -1      pct  24000 vm.2103942   16390  47    0    1 28-55      
    2103991     2103975 U    vmx-vcpu-15:DVDStore       135.232 WAIT             1.481      0.000 IDLE                  133.666       133.256         0.022      0     -1      pct  24000 vm.2103942   16390  44    0    1 28-55      
    2103992     2103975 U    vmx-vcpu-16:DVDStore       135.232 WAIT             0.596      0.000 IDLE                  134.657       134.208         0.012      0     -1      pct  24000 vm.2103942   16390  36    0    1 28-55      
    2103993     2103975 U    vmx-vcpu-17:DVDStore       135.232 WAIT             2.162      0.000 IDLE                  133.350       132.900         0.015      0     -1      pct  24000 vm.2103942   16390  29    0    1 28-55      
    2103994     2103975 U    vmx-vcpu-18:DVDStore       135.232 WAIT             2.047      0.000 IDLE                  133.486       133.118         0.011      0     -1      pct  24000 vm.2103942   16390  32    0    1 28-55      
    2103995     2103975 U    vmx-vcpu-19:DVDStore       135.231 WAIT             2.121      0.000 IDLE                  133.385       132.946         0.016      0     -1      pct  24000 vm.2103942   16390  48    0    1 28-55      
    2103996     2103975 U    vmx-vcpu-20:DVDStore       135.231 WAIT             1.761      0.000 IDLE                  133.710       133.254         0.032      0     -1      pct  24000 vm.2103942   16390  54    0    1 28-55      
    2103997     2103975 U    vmx-vcpu-21:DVDStore       135.231 WAIT             2.793      0.000 IDLE                  132.637       132.180         0.012      0     -1      pct  24000 vm.2103942   16390  53    0    1 28-55      
    2103998     2103975 U    vmx-vcpu-22:DVDStore       135.231 WAIT             2.044      0.000 IDLE                  133.413       132.978         0.018      0     -1      pct  24000 vm.2103942   16390  50    0    1 28-55      
    2103999     2103975 U    vmx-vcpu-23:DVDStore       135.231 WAIT             1.269      0.000 IDLE                  133.979       133.545         0.019      0     -1      pct  24000 vm.2103942   16390  31    0    1 28-55  

 

ESXTOP

 

그런데 VM 의 워크로드에 따라서, Core 보다 메모리 레이턴시에 민감하거나, 캐시에 민감한 workload 들이 있습니다. 그래서 vNUMA 가 동작하지 않도록 하는것이 유리한 경우가 있습니다. (간단한 예로 Big data workload 들) 

이때 PreferHT 옵션을 사용할 수 있는데요, 이 옵션을 사용하면 아래 두가지 vNUMA 조건중 2번째 조건에 대한 내용이 변경됩니다.

  1. VM 에 vCPU 를 9개 이상 할당했을 때
  2. VM 에 할당한 vCPU 수가 단일 소켓의 Core 수보다 많을 때 –> VM 에 할당한 vCPU 수가 단일 소켓의 Thread 수보다 많을 때

위에서 동일한 VM 에 PreferHT option 을 줘보겠습니다.

실제로 테스트를 해보실 때에는 VM power off 후, numa.vcpu.preferHT = TRUE 로 셋팅하신 뒤, VM 의 vCPU 숫자 변경 후 power on, 다시 power off, vCPU 숫자 원복후 Power on 의 과정이 필요합니다.

그 이유는 최초에 생성된 vNUMA 토폴로지는 vCPU 숫자가 바뀌지 않는 이상 변동되지 않기 때문입니다.

 

DICT                  numvcpus = "24"
DICT                   memSize = "32768"
DICT               displayName = "DVDStore_DB"
DICT      numa.autosize.cookie = "280001"
DICT numa.autosize.vcpu.maxPerVirtualNode = "14"
DICT        numa.vcpu.preferHT = "TRUE"
numaHost: NUMA config: consolidation= 1 preferHT= 1
numa: coresPerSocket= 1 maxVcpusPerVPD= 24
numaHost: 24 VCPUs 1 VPDs 1 PPDs
numaHost: VCPU 0 VPD 0 PPD 0
numaHost: VCPU 1 VPD 0 PPD 0
numaHost: VCPU 2 VPD 0 PPD 0
numaHost: VCPU 3 VPD 0 PPD 0
numaHost: VCPU 4 VPD 0 PPD 0
numaHost: VCPU 5 VPD 0 PPD 0
numaHost: VCPU 6 VPD 0 PPD 0
numaHost: VCPU 7 VPD 0 PPD 0
numaHost: VCPU 8 VPD 0 PPD 0
numaHost: VCPU 9 VPD 0 PPD 0
numaHost: VCPU 10 VPD 0 PPD 0
numaHost: VCPU 11 VPD 0 PPD 0
numaHost: VCPU 12 VPD 0 PPD 0
numaHost: VCPU 13 VPD 0 PPD 0
numaHost: VCPU 14 VPD 0 PPD 0
numaHost: VCPU 15 VPD 0 PPD 0
numaHost: VCPU 16 VPD 0 PPD 0
numaHost: VCPU 17 VPD 0 PPD 0
numaHost: VCPU 18 VPD 0 PPD 0
numaHost: VCPU 19 VPD 0 PPD 0
numaHost: VCPU 20 VPD 0 PPD 0
numaHost: VCPU 21 VPD 0 PPD 0
numaHost: VCPU 22 VPD 0 PPD 0
numaHost: VCPU 23 VPD 0 PPD 0 

    2105058     2105058 U    vmx-vcpu-0:DVDStore_        51.388 WAIT            13.329      0.000 IDLE                   41.470        41.219         0.016      0     -1      pct  24000 vm.2105025   16390  35    0    1 28-55      
    2105060     2105058 U    vmx-vcpu-1:DVDStore_        51.386 WAIT             0.408      0.000 IDLE                   50.988        50.561         0.015      0     -1      pct  24000 vm.2105025   16390  45    0    1 28-55      
    2105061     2105058 U    vmx-vcpu-2:DVDStore_        51.386 WAIT             0.254      0.000 IDLE                   51.123        50.246         0.014      0     -1      pct  24000 vm.2105025   16390  41    0    1 28-55      
    2105062     2105058 U    vmx-vcpu-3:DVDStore_        51.386 WAIT             0.691      0.000 IDLE                   50.772        49.894         0.015      0     -1      pct  24000 vm.2105025   16390  55    0    1 28-55      
    2105063     2105058 U    vmx-vcpu-4:DVDStore_        51.385 WAIT             1.461      0.000 IDLE                   50.190        49.315         0.008      0     -1      pct  24000 vm.2105025   16390  31    0    1 28-55      
    2105064     2105058 U    vmx-vcpu-5:DVDStore_        51.385 WAIT             0.707      0.000 IDLE                   50.758        49.885         0.011      0     -1      pct  24000 vm.2105025   16390  45    0    1 28-55      
    2105065     2105058 U    vmx-vcpu-6:DVDStore_        51.385 WAIT             0.905      0.000 IDLE                   50.603        49.733         0.016      0     -1      pct  24000 vm.2105025   16390  42    0    1 28-55      
    2105066     2105058 U    vmx-vcpu-7:DVDStore_        51.385 WAIT             0.309      0.000 IDLE                   51.063        50.580         0.012      0     -1      pct  24000 vm.2105025   16390  53    0    1 28-55      
    2105067     2105058 U    vmx-vcpu-8:DVDStore_        51.385 WAIT             1.005      0.000 IDLE                   50.503        49.633         0.012      0     -1      pct  24000 vm.2105025   16390  50    0    1 28-55      
    2105068     2105058 U    vmx-vcpu-9:DVDStore_        51.385 WAIT             1.967      0.000 IDLE                   49.714        48.847         0.004      0     -1      pct  24000 vm.2105025   16390  46    0    1 28-55      
    2105069     2105058 U    vmx-vcpu-10:DVDStore        51.384 WAIT             2.243      0.000 IDLE                   49.522        48.651         0.007      0     -1      pct  24000 vm.2105025   16390  34    0    1 28-55      
    2105070     2105058 U    vmx-vcpu-11:DVDStore        51.384 WAIT             1.805      0.000 IDLE                   49.861        48.990         0.007      0     -1      pct  24000 vm.2105025   16390  42    0    1 28-55      
    2105071     2105058 U    vmx-vcpu-12:DVDStore        51.384 WAIT             1.794      0.000 IDLE                   49.846        49.365         0.011      0     -1      pct  24000 vm.2105025   16390  28    0    1 28-55      
    2105072     2105058 U    vmx-vcpu-13:DVDStore        51.384 WAIT             1.758      0.000 IDLE                   49.844        48.977         0.007      0     -1      pct  24000 vm.2105025   16390  33    0    1 28-55      
    2105073     2105058 U    vmx-vcpu-14:DVDStore        51.384 WAIT             1.691      0.000 IDLE                   49.874        49.000         0.007      0     -1      pct  24000 vm.2105025   16390  41    0    1 28-55      
    2105074     2105058 U    vmx-vcpu-15:DVDStore        51.384 WAIT             1.810      0.000 IDLE                   49.846        48.973         0.008      0     -1      pct  24000 vm.2105025   16390  29    0    1 28-55      
    2105075     2105058 U    vmx-vcpu-16:DVDStore        51.384 WAIT             1.787      0.000 IDLE                   49.830        48.954         0.008      0     -1      pct  24000 vm.2105025   16390  38    0    1 28-55      
    2105076     2105058 U    vmx-vcpu-17:DVDStore        51.383 WAIT             2.116      0.000 IDLE                   49.616        48.738         0.007      0     -1      pct  24000 vm.2105025   16390  30    0    1 28-55      
    2105077     2105058 U    vmx-vcpu-18:DVDStore        51.383 WAIT             1.802      0.000 IDLE                   49.870        48.998         0.005      0     -1      pct  24000 vm.2105025   16390  29    0    1 28-55      
    2105078     2105058 U    vmx-vcpu-19:DVDStore        51.383 WAIT             2.578      0.000 IDLE                   49.286        48.399         0.008      0     -1      pct  24000 vm.2105025   16390  37    0    1 28-55      
    2105079     2105058 U    vmx-vcpu-20:DVDStore        51.383 WAIT             3.524      0.000 IDLE                   48.506        47.655         0.008      0     -1      pct  24000 vm.2105025   16390  34    0    1 28-55      
    2105080     2105058 U    vmx-vcpu-21:DVDStore        51.383 WAIT             0.340      0.000 IDLE                   51.049        50.176         0.012      0     -1      pct  24000 vm.2105025   16390  55    0    1 28-55      
    2105081     2105058 U    vmx-vcpu-22:DVDStore        51.382 WAIT             0.240      0.000 IDLE                   51.113        50.238         0.012      0     -1      pct  24000 vm.2105025   16390  48    0    1 28-55      
    2105082     2105058 U    vmx-vcpu-23:DVDStore        51.382 WAIT             1.589      0.000 IDLE                   50.029        49.158         0.009      0     -1      pct  24000 vm.2105025   16390  33    0    1 28-55

 

ESXTOP

 

 

해당 옵션을 주게 되면 24 vCPU 가 vNUMA 가 동작하여 양쪽 소켓으로 분배되지 않고 한쪽에서 처리가 되도록 변경이 됩니다.

물론 이때에는 CPU 뿐만 아니라 메모리에 대한 사이징도 NUMA 노드를 넘어가지 않도록 사이징을 해야합니다.

 

PreferHT 옵션을 사용하게 되면 한쪽 NUMA 의 CPU 경합(Ready 등) 이 상승하게 됨으로 그 부분은 참고를 하셔야 합니다. 

위의 환경에서 28 vCPU 를 할당하고 preferHT 를 주더라도 14 vCPU VM 의 2배 성능이 나오는것은 아니라는 것이지요. 다만 L3 캐시 히트율이나 리모트 메모리 액세스에 의한 성능저하에 민감한 어플리케이션이라면 이점이 있을 수 있습니다.

 

요약하면

  1. ESXi 에서는 VM 에 Hyper Threaded core 를 노출시킬 수 없다. 
  2. preferHT 옵션은 VM 에 Hyper-Threaded core 를 노출시키기 위함이 아닌 NUMA Topology 를 조절할 때 쓰는 option 이다.
  3. workload 에 따라 preferHT 옵션이 성능에 도움이 될 수 있다. (디폴트는 off)
  4. preferHT 옵션 사용시 VM 사이징은 단일 NUMA 노드안에 들어올 수 있도록 해야한다. 

참고 링크

https://blogs.vmware.com/vsphere/2014/03/perferht-use-2.html

https://kb.vmware.com/s/article/2003582

NUMA, Hyperthreading and NUMA.PreferHT

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다