그럼 libvirt에는 이에 대한 몇 가지 인터페이스가 있습니다.
#!/usr/bin/env python
# Modules
import subprocess
import traceback
import commands
import signal
import time
import sys
import re
import os
import getopt
import pprint
try:
import libvirt
except:
print "no libvirt detected"
sys.exit(0)
from xml.dom.minidom import parseString
global instances
global virt_conn
global tick
global virt_exist
def virtstats():
global virt_exist
global virt_conn
global instances
cpu_stats = []
if virt_exist == True:
if virt_conn == None:
print 'Failed to open connection to the hypervisor'
virt_exist = False
if virt_exist == True:
virt_info = virt_conn.getInfo()
for x in range(0, virt_info[2]):
cpu_stats.append(virt_conn.getCPUStats(x,0))
virt_capabilities = virt_conn.getCapabilities()
domcpustats = 0
# domcpustats = virDomain::GetcpuSTATS()
totmem = 0
totvcpu = 0
totcount = 0
vcpu_stats = []
for id in virt_conn.listDomainsID():
dom = virt_conn.lookupByID(id)
totvcpu += dom.maxVcpus()
vcpu_stats.append(dom.vcpus())
totmem += dom.maxMemory()
totcount += 1
dom = parseString(virt_capabilities)
xmlTag = dom.getElementsByTagName('model')[0].toxml()
xmlData=xmlTag.replace('<model>','').replace('</model>','')
for info in virt_info:
print info
for stat in cpu_stats:
print "cpu %s" % stat
for vstat in vcpu_stats:
print "vcpu:\n"
pprint.pprint(vstat)
print "CPU (%s) Use - %s vCPUS (%s logical processors)" % (xmlData, totvcpu, virt_info[2])
sys.exit(0)
def main():
try:
global virt_conn
global virt_exist
virt_conn = libvirt.openReadOnly(None)
virt_exist = True
except:
virt_exist = False
print "OK: not a compute node"
sys.exit(0)
virtstats()
if __name__ == "__main__":
main()
이제 당신이 사용의 측면에서이에서 얻을 것은 CPU 시간입니다 : 여기 당신을 위해 데이터 구조체로 데이터를 추출 일부 파이썬입니다.
VCPU 블록이 레이아웃에 기본적으로 있습니다 : 당신이 아래로 libvirt를에 간다 무엇 실현 일단
1st: vCPU number, starting from 0.
2nd: vCPU state.
0: offline
1: running
2: blocked on resource
3rd: CPU time used in nanoseconds
4th: real CPU number
는 CPU 블록은 명백하다.
희망 하시겠습니까?
나는 한번도 분명하지 않다 죄송합니다. 그것은 CPU 사용량뿐만 아니라 가상 머신의 많은 요인들에 대해서도 가상 머신의 PID를 필요로합니다. 내 하이퍼 바이저 자체에서 명령을 실행하여이 정보를 수집하여 VM의 통계 데이터를 수신하려고합니다. PID를 사용하여이 작업을 수행하려고합니다. 가상 머신의 PID를 얻는 데 도움이되는 방법이 있습니까? –
프로세스 ID에서 얻는 것보다 libvirt에서 더 많은 정보를 얻을 수 있습니다. 사실, libvirt는 의도적으로 프로세스 ID를 얻는 방법을 제공하지 않습니다. 프로세스 ID와 상호 작용하는 것이 libvirt를 사용하는 잘못된 방법입니다. 만약 당신이 그 길을 가기 위해 죽었다면 (그리고 나는 그렇게하는 것을 강력히 추천한다.) 프로세스리스트가 qemu/kvm /을 식별하고 처리 할 것이 무엇인지 그리고 어떤 VM이 어떤 것인지를 구별하고 싶을 것이다 flags를 awking하고 libvirt 도메인에 설정된 일부 공유 값과 비교합니다. 다시 이에 대해주의하십시오. –