본문 바로가기

Compute

Resource Group

VMKernel에서는 할당 및 사용되는 Memory를 관리하기 위해 Resource Group이라는 개념을 사용합니다.

Resource Group을 통해서 각 Group마다 속해있는 프로세스들은 Parent/Child 개념을 가지게 되며, 이는 memstats 명령어를 통해서 확인이 가능합니다.

 

# memstats -r group-stats -g 0 -l 1 -s gid:name:min:max:eMin:consumed -u mb
 
 GROUP STATS: Tue Aug  8 15:04:18 2023
 -------------------------------------
   Start Group ID   : 0
   No. of levels    : 1
   Unit             : MB
   Inclusion filter : (all)
   Exclusion filter : (none)
   Selected columns : gid:name:min:max:eMin:consumed
 
---------------------------------------------------------------------------------
     gid                         name        min        max       eMin   consumed
---------------------------------------------------------------------------------
       0                         host     261373     261373     261373     173371
---------------------------------------------------------------------------------
 
# memstats -r group-stats -g 0 -l 2 -s gid:name:min:max:eMin:consumed -u mb
 
 GROUP STATS: Tue Aug  8 09:54:40 2023
 -------------------------------------
   Start Group ID   : 0
   No. of levels    : 2
   Unit             : MB
   Inclusion filter : (all)
   Exclusion filter : (none)
   Selected columns : gid:name:min:max:eMin:consumed
 
---------------------------------------------------------------------------------
     gid                         name        min        max       eMin   consumed
---------------------------------------------------------------------------------
       0                         host     261373     261373     261373     169695
       1                       system       7027         -1       7027       3485
       2                          vim          0         -1       5651        448
       3                    iofilters          0         -1         25          8
       4                         user          0         -1      70427     165755
---------------------------------------------------------------------------------
 
# memstats -r group-stats -g 0 -l 3 -s gid:name:min:max:eMin:consumed -u mb
 
 GROUP STATS: Tue Aug  8 15:04:21 2023
 -------------------------------------
   Start Group ID   : 0
   No. of levels    : 3
   Unit             : MB
   Inclusion filter : (all)
   Exclusion filter : (none)
   Selected columns : gid:name:min:max:eMin:consumed
 
---------------------------------------------------------------------------------
     gid                         name        min        max       eMin   consumed
---------------------------------------------------------------------------------
       0                         host     261373     261373     261373     173372
       1                       system       7033         -1       7033       3491
       5                      minfree          0         -1       3229          0
       6                   retiredmem          0         -1          1          0
       7                       kernel          0         -1       3789       3491
       8                       helper          0          0          0          0
       9                     lfhelper          0          0          0          0
      10                      drivers          0          0          0          0
      11                           ft          0          0          0          0
      12                      vmotion          0          0          0          0
      13                     svmotion          0          0          0          0
     286                    vmkapimod          0          0          0          0
       2                          vim          0         -1       5651        457
      14                         vmci          0         -1          0          0
      15                      vmvisor          0         -1       5606        446
      16                      vimuser          0         -1         45         12
      17                          tmp          0         -1          0          0
       3                    iofilters          0         -1         25          8
     610                  iofiltervpd         25         25         25          8
    3935                          spm          0         -1          0          0
    4242                vmwarevmcrypt          0         -1          0          0
       4                         user          0         -1      70427     169417
   46774                   vm.2106264          0         -1        104       2387
   46779                   vm.2106265          0         -1        104      12288
   46792                   vm.2106267          0         -1        736      12184
   46801                   vm.2106268          0         -1       1062       1024
   46810                   vm.2106270          0         -1        160      12189
   46864                   vm.2106419          0         -1        735      19700
   46873                   vm.2106420          0         -1         81       3762
   46882                   vm.2106421          0         -1      66267      10260
   46891                   vm.2106422          0         -1         81       4356
   46896                   vm.2106423          0         -1        736      58377
   46909                   vm.2106424          0         -1        104      12287
   50185                   vm.2107110          0         -1         35        128
   63154                   vm.2109827          0         -1         83       8192
   63163                   vm.2109828          0         -1         83       8192
   63172                   vm.2109829          0         -1         61       4096
---------------------------------------------------------------------------------

 

아래 그림을 보시면, 위 결과에서 확인한 바와 같이 최상위 Layer에는 host가 있고, 그 하위 Layer로 system, vim, user, iofilters(생략)가 각각의 영역을 차지하고 있는 것을 알 수 있습니다.

Hierarchy가 있기 때문에 host -> system 밑으로 내려가면 kernel, minfree 등을 또한 확인할 수 있습니다.

 

이 Hierarchy를 도식화 하면 다음과 같습니다.

 

각각의 Resource Group을 이용하면 아래 정보들을 계산할 수 있습니다.

Total Physical Memory = host

Memory used by VMs = user

Memory Overhead = system + vim + opt + iofilters

Total Free Memory Available = host - (user + system + vim + opt + iofilters)

Maximum Memory for VMs = host - (system + vim + opt + iofilters)

 

Resource에는 CPU와 Memory가 있고, 이 중 Memory와 관련된 Admission Failure 현상이 대표적으로 Resource Group과 관련하여 자주 발생하는 현상 중 하나 입니다.

 

User World(Thread)는 자신이 속해 있는 Resource Group에 의해서 Memory Consumption Limit이 제한되며, 만약 Resource Group이 제공하는 Memory보다 더 큰 양을 필요로 하는 경우에는 Memory Admission Failure가 발생할 수 있습니다.

 

각각의 Resource Group의 Memory 사용량도 마찬가지고 memstats 도구를 이용하여 확인 가능합니다.

# memstats -r group-stats -l 3 -s name:parGid:min:memSize:memSizePeak:iMin:eMin:eMinPeak:rMinPeak:rMinChildPeak
 
 GROUP STATS: Wed Aug  9 03:35:59 2023
 -------------------------------------
   Start Group ID   : 0
   No. of levels    : 3
   Unit             : KB
   Inclusion filter : (all)
   Exclusion filter : (none)
   Selected columns : gid:name:parGid:min:memSize:memSizePeak:iMin:eMin:eMinPeak:rMinPeak:rMinChildPeak
 
------------------------------------------------------------------------------------------------------------------------------------------
     gid                         name   parGid        min    memSize memSizePeak       iMin       eMin   eMinPeak   rMinPeak rMinChildPeak
------------------------------------------------------------------------------------------------------------------------------------------
       0                         host       -1  267645940  371730412   371800192   85152580  267645940  267645940  267645940      89102040
       1                       system        0    7224640    6902832     6910872    7208256    7224640    7233900    7217516       7217516
       5                      minfree        1          0    3305616     3305616    3305616    3305616    3305616    3305616             0
       6                   retiredmem        1          0          0           0         64         64         64         64             0
       7                       kernel        1          0    3597216     3605256    3902576    3902576    3911836    3911836       3911836
       8                       helper        1          0          0           0          0          0          0          0             0
       9                     lfhelper        1          0          0           0          0          0          0          0             0
      10                      drivers        1          0          0           0          0          0          0          0             0
      11                           ft        1          0          0           0          0          0          0          0             0
      12                      vmotion        1          0          0           0          0          0          0          0             0
      13                     svmotion        1          0          0           0          0          0          0          0             0
     286                    vmkapimod        1          0          0           0          0          0          0          0             0
       2                          vim        0          0     740156      820688    5786056    5786056    6017680    6017680       6017680
      14                         vmci        2          0          0           0          0          0          0          0             0
      15                      vmvisor        2          0     734648      819564    5739976    5739976    5971600    5971600       5971600
      16                      vimuser        2          0       5508       54864      46080      46080     161656     161656        161656
      17                          tmp        2          0          0       13060          0          0      40960      40960         40960
       3                    iofilters        0          0      11800       11924      25600      25600      25600      25600         25600
     610                  iofiltervpd        3      25600      11800       11924      12744      25600      25600      25600         12996
    3935                          spm        3          0          0           0          0          0          0          0             0
    4242                vmwarevmcrypt        3          0          0           0          0          0          0          0             0
       4                         user        0          0  364075624   364076572   72116284   72116284   76044316   76044316      76044316
   46774                   vm.2106264        4          0   12684808    12684856     106272     106272     111068     111068        111068
   46779                   vm.2106265        4          0   12705960    12706376     106264     106264     111060     111060        111060
   46792                   vm.2106267        4          0   67343824    67344172     752800     752800     783264     783264        783264
   46801                   vm.2106268        4          0    1131704     1131832    1086972    1086972    1092760    1092760       1092760
   46810                   vm.2106270        4          0   16908448    16908880     163288     163288     178520     178520        178520
   46864                   vm.2106419        4          0   67384796    67385184     752620     752620    4947180    4947180       4947180
   46873                   vm.2106420        4          0    8462772     8462836      82736      82736      87532      87532         87532
   46882                   vm.2106421        4          0   67345992    67346248   67857160   67857160   67887624   67887624      67887624
   46891                   vm.2106422        4          0    8464224     8464424      82736      82736      87532      87532         87532
   46896                   vm.2106423        4          0   67545292    67546028     752724     752724     783188     783188        783188
   46909                   vm.2106424        4          0   12705704    12706136     106184     106184     110004     110004        110004
   63154                   vm.2109827        4          0    8472908     8473228      84680      84680      89476      89476         89476
   63163                   vm.2109828        4          0    8472776     8473224      84672      84672      89468      89468         89468
   63172                   vm.2109829        4          0    4266024     4266456      61788      61788      66584      66584         66584
  117417                   vm.2121391        4          0     180392      181116      35388      35388      40840      40840         40840
------------------------------------------------------------------------------------------------------------------------------------------

 

아래는 실제 Memory Admission Failure가 발생할 때, vmkernel.log에 기록되는 메시지 예제입니다.

2023-06-21T09:38:22.135Z cpu32:3054539)Admission failure in path: host/vim/vmvisor/plugins/smx:sfcb-ProviderMa.3054533:uw.3054533
2023-06-21T09:38:22.135Z cpu32:3054539)UserWorld 'sfcb-smx' with cmdline '/bin/sfcbd'
2023-06-21T09:38:22.135Z cpu32:3054539)uw.3054533 (3214115) extraMin/extraFromParent: 255/255, smx (22218) childEmin/eMinLimit: 17666/17920

 

Admission Failure와 관련된 아래 로그는 다음과 같이 해석할 수 있습니다.

uw.3054533 (3214115) extraMin/extraFromParent: 255/255, smx (22218) childEmin/eMinLimit: 17666/17920
child group인 uw.3054533이 parent인 smx (22218)로부터 추가로 255 page를 reserve 필요
(255는 page수로 1page당 4KB이므로, 따라서 255는 약 1MB를 의미)
parent인 smx (22218)은 reservation Limit인 eMinLimit이 17920인데 이미 사용하고 있는 양(childEmin)이 17666으로 17920 - 17666 = 254 page가 남아있기 때문에 child인 uw.3054533이 필요로 하는 255를 충족할 수 없는 상태
따라서, VMK/MemSched는 admission failure 오류를 기록

 

추가로 memstats 도구를 이용하여, parent와 child 관계로 -g 옵션을 이용하여 확인 가능합니다.

# memstats -r group-stats -s name:parGid:min:memSize:memSizePeak:iMin:eMin:eMinPeak:rMinPeak:rMinChildPeak -u mb | grep smx
MemStatsTraverseGroups: VSI_GetInstanceListAlloc failure: Bad parameter
MemStatsTraverseGroups: VSI_GetInstanceListAlloc failure: Bad parameter
   60882                  smx-install      702         70         17          17         17         70         70         70            18
   60885                          smx      702         70          0          70          0         70         70         76            76
   60889                  smx-interop      702         70         26          26         26         70         70         70            26

# memstats -r group-stats -s name:parGid:min:memSize:memSizePeak:iMin:eMin:eMinPeak:rMinPeak:rMinChildPeak -u mb -g 60882

GROUP STATS: Wed Aug  9 06:49:22 2023
-------------------------------------
   Start Group ID   : 60882
   No. of levels    : 12
   Unit             : MB
   Inclusion filter : (all)
   Exclusion filter : (none)
   Selected columns : gid:name:parGid:min:memSize:memSizePeak:iMin:eMin:eMinPeak:rMinPeak:rMinChildPeak

------------------------------------------------------------------------------------------------------------------------------------------
     gid                         name   parGid        min    memSize memSizePeak       iMin       eMin   eMinPeak   rMinPeak rMinChildPeak
------------------------------------------------------------------------------------------------------------------------------------------
   60882                  smx-install      702         70         17          17         17         70         70         70            18
   63816      sfcb-ProviderMa.2105915    60882          0         17          17         17         17         18         18            18
   63817         uwWorldStore.2105915    63816          0          1           1          1          1          1          1             0
   63818           worldGroup.2105915    63816          0          1           1          1          1          1          1             0
   63819                   uw.2105915    63816          0         16          16         16         16         16         16             0
   63820              vsiHeap.2105915    63816          0          1           1          1          1          1          1             0
   63821                   pt.2105915    63816          0          1           1          1          1          1          1             0
   63822           cartelheap.2105915    63816          0          1           1          1          1          1          1             0
   63823            uwshmempt.2105915    63816          0          0           0          0          0          0          0             0
   63824     uwAsyncRemapHeap.2105915    63816          0          1           1          1          1          1          1             0
------------------------------------------------------------------------------------------------------------------------------------------