ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ESXTOP cpu 메트릭 분석
    VMware/vSphere 2018. 5. 1. 12:05


    1) CPU

    -01.  'e' 버튼을 통해 특정 월드의 구성원 (NWLD) 정보가 확인 가능하다.
      
    <<확장 전>>

    <<확장 후>>


    위에 대해 설명하자면 'MCS03'은 하나의 Process이며 각 월드의 구성원들은 
    Thread이다.
    운영체제론에 대해 공부한 사람은 Process와 Thread의 차이점에 대해 알 것이다.
        
    <<Process, Thread>>
        
    위와 같이 프로세스에 할당 받은 자원을 공유 하면서 각 쓰레드는 CPU를 할당받을 수 있다. 
    VMware 관점에서 보면 쓰레드를 통해 CPU 유휴 Time 없이 더욱 부지런하게 CPU 스케줄링을 받을 수 있다는 것이다.
        
    어쨋든, 위 프로세스를 구성하는 각 쓰레드에 대해 설명하자면 아래와 같다. 
    ( vmware.log를 'thread' 로 게더링 하면 확인할 수 있다. )
        thread 0 - vmx
        thread 1 - svga ( 3D )
        thread 2 - mks ( Mouse, Keyboard, Screen )
        thread 3 - vmast로 추정... ( 메모리 스캔에 사용된다고 한다. )
        thread 4~5 - vCPU
        thread 6~7 - vthread
       
    여기서 의문인 점은 vmx-vthread-#인데 VM에 테스트 결과 'SCSi Controller'를 
    추가할 시 vmx-vthread-# 가 추가된다.

    -02. PCPU, Core UTIL, USED

    아래 그림을 보면 알겠지만, PCPU는 HT enable 시 기준으로 논리적 코어를 나타내며 CORE은 물리적 코어를 나타낸다.

    <<PCPU, CORE>>

    CORE UTIL% 이란 ??
    적어도, 하나의 PCPU가 사용 된 시간의 백분율이다. 얘기하자면 CORE의 모든 PCPU가 IDLE 상태일 때의 반대값이라는 뜻이다.
    자 그럼 여기서 PCPU01 UTIL% + PCPU02 UTIL% = CORE01 UTIL% 이냐 ? 
    답은 아니다. 먼저 공식화 하자면 
    PCPU01% or PCPU02% <= CORE01 UTIL% <= PCPU01% + PCPU02% 이다.
       
    이는 아래 예시를 통한PCPU UTIL과 CORE UTIL의 차이점으로 알 수 있다.

    << PCPU, CORE UTIL 차이>>

        PCPU01 -----+++++         (50% 사용)
        PCPU02 +++++-----         (50% 사용)
        CORE01 ++++++++++  (100% 사용)

        PCPU01 +++++-----        (50% 사용)
        PCPU02 +++++-----        (50% 사용)
        CORE01 +++++-----        (50% 사용)

        PCPU01 --+++++---        (50% 사용)
        PCPU02 ---+++++--        (50% 사용)
        CORE01 --++++++--       (60% 사용)

     
    다음으로 PCPU USED란 ??
    PCPU UTIL중에 수행 된 '유효한 작업의 양'을 나타내며, '유효한 작업의 양'의 개념을 
    이해하려면 위 쓰레드 개념을 알면 수월할 것이다.
    UTIL과 USED가 다른 경우에는 2가지 이유는 'Hyperthreading', 'Power Management Policy' 가 있다.
    말했듯이, 쓰레드는 프로세스의 리소스 (하드웨어, 메모리 등)을 공유하지만 CPU는 각각 사용한다.
    즉 동일한 시간대에 PCPU(쓰레드)가 같이 사용되는 상황의 실질적인 사용률과 서로
    다른 시간대에 PCPU(쓰레드)가 사용되는 상황의 
    실질적인 사용률은 다를 것이다.
    아래 예시를 보면 이해가 수월할 것이다.

        <<UTIL, USED 차이 - Hyperthreading>>
        
        PCPU01 -----+++++        (UTIL 50%, USED 50%)
        PCPU02 +++++-----        (UTIL 50%, USED 50%)

        PCPU01 +++++-----        (UTIL 50%, USED 25%)
        PCPU02 +++++-----        (UTIL 50%, USED 25%)

        PCPU01 +++++-----        (UTIL 50%, USED 40%)
        PCPU02 ----+++++-        (UTIL 50%, USED 40%)

        <<UTIL, USED차이 - Power Management Policy>>
        
    PCPU UTIL * ( 유효 주파수 / 보통 주파수 )
    만약 2.0 GHz CPU에서 P-State로 인해 1.5 GHz만 사용하는 상황의 UTIL 값은 80%일 때 USED 값은 60%이다.
    반대로 터보 모드를 통해 유효 주파수가 높다면 USED 값도 UTIL값보다 높아질 것이다.


    -03. CPU Metric
        
    @USED
    USED% = RUN% + SYS% - OVLP%
    USED% 최대 = vCPU * 100%

    일반적으로 vCPU-0이 시스템서비스로 계산되기 때문에 다른 vCPU-# 보다 값이 높음.
     -> vmx process

      <<USED% 최대 값>>

    @SYS, OVLP
    %SYS는 월드 대신에 System Service가 처리한 시간의 백분율이다.
    System Service에 대해서는 여러가지가 있는데 인터럽트 처리기 및 system world가
    있다. 
    system world는 약 400개의 서비스로 구성되며 아래 보다시피 VMKernel에서 동작하는
    모든 서비스 ( Log 수집, Load Balancing, Packet Capture ... ) 이 포함되어 있다.
                
    <<system world 구성>>
        

    반대로 %OVLP는 시스템 서비스가 자신의 월드 대신에 다른 월드를 서비스 한 시간의 백분율이다.
    이해가 잘 안되지만, 대충 시스템 서비스가 월드 'A'를 위해 월드 'B'를 인터럽트를 한 시간이 't'라고 한다면
    월드 'A'에게는 %SYS 값이 't'이며, 월드 'B'에게는 %OVLP 값이 't'이다.

    일반적으로 High I/O 발생 시 %SYS 값이 증가한다.
    아래는 I/O 발생기를 사용하여 VM에 High I/O 발생 시 수치이다. 
    물론, Disk와 SCSi Controller가 늘어나면 % SYS 수치 또한 늘어난다.

    <<High I/O에 발생 전 후 >>
      

    <<vDisk, SCSI Controller를 추가한 후>> ( 모든 Disk에 동시에 I/O를 발생시키기 위해 Windows OS 내부에서 디스크 미러링 후 테스트 )




        
    @RDY, MLMTD
        
    %RDY는 월드가 CPU를 할당받기 위해 대기하는 시간의 백분율이다.
    일반적으로 %RDY가 높으면 CPU 경합이 발생하는 상황이라 볼 수 있는데 이 때 확인해야 할 사항이 %MLMTD이다.
    %MLMTD는 CPU Limit 제한으로 인해 할당받지 못하는 상태를 나타내며, %RDY 값에는 %MLMTD 값이 포함되어 있기 때문에 
    실질적인 CPU 경합을 확인하기 위해서는 %RDY-%MLMTD 값을 확인해야 한다. 
    ( 일반적으로 20%가 넘지 않도록 )



    <<CPU 제한 없는 상태>>
    단순히 CPU 오버커밋으로 인한 %RDY 값만 높은 상태 
    ( 40CPU ESXi에 16CPU VM * 3 EA )

    <<CPU 제한 상태>>
    CPU 오버커밋이 아닌 CPU Limit으로 인한 %RDY 값 증가 
    ( 40CPU ESXi에 16CPU VM * 1EA )
        

    @CSTP
    Multi-Core VM에서 모든 Core VM을 받을 때까지 대기하는 시간의 백분율이다.
    아래 그림을 보면 이해가 수월 할 것이다.
    4CPU VM이 2CPU만 할당 받고 나머지 2CPU는 할당받지 못하는 상태 (Wasted Slots)을 나타낸다.
        
    <<CO-STOP>>


    @WAIT, IDLE, SWPWT
        
    %WAIT은 월드가 대기 상태에 있는 시간의 백분율이다.
    이 값은 단순히 유휴 상태인 %IDLE 일 수 있으며 I/O대기나 VMKernel 리소스를 대기하는 시간일 수 있다.
    때문에 I/O에 대한 값을 추측할 때 %WAIT - %IDLE 값으로 계산한다.

    여기서 월드 구성원 중 vCPU를 제외한 요소 (mks, vmx) 경우 기본적으로 %WAIT 값이 100에 가깝다. 
    때문에 정확한 I/O에 대한 값을 추측하기 위해서는 vCPU 요소에 대해서만 %WAIT-%IDLE 값을 계산해야 한다.

    %SWPWT 경우 Memory 스왑을 대기하는 시간이며 이 역시 %WAIT에 포함된다.

    'VMware > vSphere' 카테고리의 다른 글

    VMKernel NIC Multi-homing Test  (0) 2019.01.27
    Interrupt Remapping  (0) 2018.05.01
    VMtools 설치 진행 중 Unmount 에러  (0) 2018.05.01
    hostd로 인한 ESXi 서비스 비 정상  (0) 2018.05.01

    댓글

Designed by Tistory.