Category Archives: Deep Dive 시리즈

oVirt/RHEV의 심층 분석, 고급 활용 정보를 공유하는 시리즈입니다.

How to calculate Monitoring indicators in oVirt Admin Portal?

oVirt Deep Dive 시리즈, oVirt Admin Portal에서 보여지는 모니터링 수치 계산방법?

하이퍼바이저 CPU 사용량 수치

각 하이퍼바이저에는 oVirt-engine과의 통신과 제어를 담당하는 vdsm 서비스 데몬이 실행되고 있습니다. 소스를 분석한 결과 하이퍼바이저의 CPU 사용량은 vdsm 데몬이 /proc/loadavg 파일의 두번째 필드를 활용하는 것을 알수 있었습니다.

        try:
            self.cpuLoad = file(‘/proc/loadavg’).read().split()[1]
        except:
            self.cpuLoad = ‘0.0’

/proc/loadavg 파일의 경우 리눅스 시스템의 부하정보를 실시간으로 제공하는 파일이기 때문에 하이퍼바이저의 CPU 사용량으로 이용하는데 무리가 없습니다.

하이퍼바이저 Memory 사용량 수치

Memory 사용량 역시 vdsm이 산출하여 oVirt-engine에 전달하고 있습니다. 계산방법은 흔히 리눅스 시스템의 Memory 정보를 확인할 때 사용하는 free 명령어의 정보와 거의 동일한 수치를 이용해 계산합니다.

….
        meminfo = readMemInfo()
        freeOrCached = (meminfo[‘MemFree’] +
                        meminfo[‘Cached’] + meminfo[‘Buffers’])
        self.memUsed = 100 – int(100.0 * (freeOrCached) / meminfo[‘MemTotal’])
        self.anonHugePages = meminfo.get(‘AnonHugePages’, 0) / 1024
….

위의 코드에서 확인할 수 있듯이 Memory Total 크기에서 Free + Cached + Buffers 영역을 제외한 부분을 Used로 사용하고 있습니다.

하이퍼바이저 Network 사용량 수치

이 부분은 깊이 분석하지는 않았으나 전달되는 수치는 ifconfig에서 관련 네트워크 인터페이스의 rx/tx 패킷수를 이용해 계산되는 것으로 생각됩니다.

# vdsClient -s 0 getVdsStats | egrep ‘rx|tx’

가상머신 CPU 사용량 수치

가상머신의 부하 수치중 Guest Agent 가 설치되지 않았을 경우에는 오직 CPU 사용량만이 출력됩니다. 이는 vCPU의 경우 하이퍼바이저에서 추정가능한 요소이기 때문입니다.

libvirt 라이브러리는 가상머신의 실질적 프로세스인 qemu로부터 전달되는 다음과 같은 CPU 사용량을 vCPU의 수로 나누어 계산합니다.

cpuUser = 3.18
cpuSys = 0.86
cpuIdle = 95.96

수치가 위와 같을 때 vCPU가 1개라면 약 cpuUser+cpuSys 수치인 4% 정도로 표현되며 만약 2개라면 2%가 됩니다.

가상머신 Memory/Network 사용량 수치

가상머신내의 Memory/Network의 사용량의 경우 내부에 설치된 Guest Agent(기초 시리즈 참조)를 통해 전달받은 정보를 그대로 활용하게 됩니다. Guest Agent의 경우 하이퍼바이저와 마찬가지로 가상머신이 리눅스인 경우 리눅스 시스템의 일반적인 부하 수치를 읽어 전달하게 됩니다.

Like