On 12/14/2011 02:59 PM, Wayne Sun wrote:
On 12/13/2011 11:45 AM, Nan Zhang wrote:
> * repos/domain/set_cpu_shares.py: set the value of cpu_shares
> property of the guest.
> ---
> repos/domain/set_cpu_shares.py | 121
> ++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 121 insertions(+), 0 deletions(-)
> create mode 100644 repos/domain/set_cpu_shares.py
>
> diff --git a/repos/domain/set_cpu_shares.py
> b/repos/domain/set_cpu_shares.py
> new file mode 100644
> index 0000000..809ccef
> --- /dev/null
> +++ b/repos/domain/set_cpu_shares.py
> @@ -0,0 +1,121 @@
> +#!/usr/bin/env python
> +"""Set the value of cpu_shares property of the guest
> + domain:set_cpu_shares
> + guestname
> + xxx
> + cpu_shares
> + integer value
> + flags
> + current|live|config
> +"""
> +
> +__author__ = 'Nan Zhang: nzhang(a)redhat.com'
> +__date__ = 'Tue Sep 27, 2011'
> +__version__ = '0.1.0'
> +__credits__ = 'Copyright (C) 2011 Red Hat, Inc.'
> +__all__ = ['check_params', 'check_cpu_shares',
'set_cpu_shares']
> +
> +import os
> +import re
> +import sys
> +import time
time module not used.
> +from xml.dom import minidom
> +
> +
> +def append_path(path):
> + """Append root path of package"""
> + if path in sys.path:
> + pass
> + else:
> + sys.path.append(path)
> +
> +pwd = os.getcwd()
> +result = re.search('(.*)libvirt-test-API', pwd)
> +append_path(result.group(0))
> +
> +from lib import connectAPI
> +from lib import domainAPI
> +from utils.Python import utils
> +from utils.Python import xmlbuilder
> +from exception import LibvirtAPI
> +
> +def check_params(params):
> + """Verify inputing parameter dictionary"""
> + logger = params['logger']
> + keys = ['guestname', 'flags']
> + for key in keys:
> + if key not in params:
> + logger.error("%s is required" %key)
> + return 1
> + return 0
> +
> +def check_cpu_shares(params, util, guestname, cpu_shares, flags):
> + """Check the value of cpu_shares"""
> + logger = params['logger']
> + cmd = "cat /cgroup/cpu/libvirt/qemu/%s/cpu.shares" % guestname
> + ret, out = util.exec_cmd(cmd, shell=True)
> + if ret:
> + logger.error("fail to set the value of cpu_shares: %s" %
> out[0])
> + else:
> + logger.info("from cgroup, the value of cpu_shares is %s" %
> out[0])
> +
> + if flags == domainAPI.VIR_DOMAIN_AFFECT_CONFIG:
> + return 0
> +
> + if cmp(int(out[0]), cpu_shares):
> + return 1
> + else:
> + logger.info("the value of cpu_shares does match the original \
> +cpu scheduler information.")
> + return 0
> +
> +def set_cpu_shares(params):
> + """Get the cpu scheduler information"""
s/Get/Set in function info
> + # Initiate and check parameters
> + params_check_result = check_params(params)
> + if params_check_result:
> + return 1
> + logger = params['logger']
> + guestname = params['guestname']
> + schedinfo = {}
> + schedinfo['cpu_shares'] = int(params['cpu_shares'])
> + cpu_shares = schedinfo['cpu_shares']
> +
> + if params['flags'] == 'current':
> + flags = domainAPI.VIR_DOMAIN_AFFECT_CURRENT
> + elif params['flags'] == 'live':
> + flags = domainAPI.VIR_DOMAIN_AFFECT_LIVE
> + elif params['flags'] == 'config':
> + flags = domainAPI.VIR_DOMAIN_AFFECT_CONFIG
> + else:
> + logger.error("Invalid flag was specified.")
> + return 1
> +
If the guest is running, the VIR_DOMAIN_AFFECT_LIVE
only changed on the active domain instance only and is not added to the
persisted domain configuration. that means, after
rebooting the guest, the original value of cpu_shares come back.
VIR_DOMAIN_AFFECT_CONFIG specifies that the device shall
be changed on the persisted domain configuration only. that means
after you changed the value of cpu_shares, it didn't
change until you reboot the domain next time.
So, about the testcase, it is better to check the state
of guest first, then according to the flags, give different checking.
> + # Connect to local hypervisor connection URI
> + util = utils.Utils()
> + uri = util.get_uri('127.0.0.1')
> + conn = connectAPI.ConnectAPI()
> + virconn = conn.open(uri)
> +
> + domobj = domainAPI.DomainAPI(virconn)
> + try:
> + domobj.set_sched_params_flags(guestname, schedinfo, flags)
> + logger.debug("set the value of cpu_shares with %s" %
> cpu_shares)
> + except LibvirtAPI, e:
> + logger.error("API error message: %s, error code is %s" %
> + (e.response()['message'],
e.response()['code']))
add conn.close()
> + return 1
> +
> + check_result = check_cpu_shares(params, util, guestname,
> cpu_shares, flags)
> + if check_result:
> + logger.error("cpu_shares does not match.")
> + conn.close()
> + return 1
> +
> + logger.info("success to set scheduler parameters.")
> + conn.close()
> + return 0
> +
> +def set_cpu_shares_clean():
> + """Clean testing environment"""
> + pass
Ack, left is fine.
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list