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 ------------------------------------------------------------------------------------------------------------------------------------------ |
'Compute' 카테고리의 다른 글
Failure to pass pre-check for upgrade from 6.7 to 7.0 due to insufficient permission (0) | 2023.08.31 |
---|---|
ESXi host was unresponsive due to missing DNS records (0) | 2023.08.29 |
Admission failure filtering from vmkernel.log (0) | 2023.08.09 |
SFCB - CIM (0) | 2023.08.08 |
[Kubernetes] 4.How to Install Kubernetes(K8S) (0) | 2023.07.03 |