def virsh_memtune(params, env): """ Use virsh memtune to set memtune of guest """ options = "" if params.memtune.hardlimit: options += "--hard-limit %d " % params.memtune.hardlimit if params.memtune.softlimit: options += "--soft-limit %d " % params.memtune.softlimit if params.memtune.swaphardlimit: options += "--swap-hard-limit %d " % params.memtune.swaphardlimit params.doc_logger.info(STEPS + "# virsh memtune %s %s --live" % (params.guest_name, options)) params.doc_logger.info(RESULT + "") if params.restart_libvirtd: start = [Provider('$guest_name.active.memtune', Provider.SET)] end = [Provider('$guest_name.active.memtune', Provider.SET)] def restart_and_memtune(name, func, params, env): params.doc_logger.info(STEPS + """ # service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ] """) func(params, env) raise MistClearException return Mist({"x": (start, end)}, restart_and_memtune)
class setmem_mist(StaticMist): """ TODO """ _area = {"set_mem": ([Provider('$guest_name.active', Provider.SET), Provider('$guest_name.active.curmem', Provider.CLEAR)], [Provider('$guest_name.active', Provider.SET), Provider('$guest_name.active.curmem', Provider.SET)])} _doc_func = no_memballon def custom_func(self, func, params, env): pass
def check_mem_device_audit(params, env): """ Check the audit system """ params.doc_logger.info(STEPS + "Make sure the auditd is running") start1 = [ Provider('$guest_name.active', Provider.SET), Provider('$guest_name.active.memdevice', Provider.CLEAR) ] end1 = [Provider('$guest_name.active.memdevice', Provider.SET)] start2 = [ Provider('$guest_name.active', Provider.CLEAR), Provider('$guest_name.active.memdevice', Provider.CLEAR) ] end2 = [Provider('$guest_name.active.memdevice', Provider.SET)] start3 = [Provider('$guest_name.active.memdevice', Provider.SET)] end3 = [ Provider('$guest_name.active.memdevice', Provider.CLEAR), Provider('$guest_name.active', Provider.SET) ] def check_mem_audit_log(name, func, params, env): """ Check the memory device audit log """ if name is not 'start': old_mem = env.get_data('$guest_name.active').data.get('memory') else: old_mem = 0 func(params, env) active_info = env.get_data('$guest_name.active').data new_mem = active_info.get('memory') params.doc_logger.info("") params.doc_logger.info(STEPS + "# ausearch -m VIRT_RESOURCE -ts recent") params.doc_logger.info(RESULT + """ ... type=VIRT_RESOURCE ... msg='virt=kvm resrc=mem reason=%s vm="%s" uuid=%s old-mem=%d new-mem=%d exe="/usr/sbin/libvirtd" hostname=? addr=? terminal=? res=success' ... """ % ('start' if name is 'start' else 'update', active_info.get( 'name'), active_info.get('uuid'), old_mem, new_mem)) return Mist( { "attach": (start1, end1), "start": (start2, end2), "detach": (start3, end3) }, check_mem_audit_log)
def host_hugepage_config(params, env): """ set environment on host """ if params.hugetlbfs_mount is None: params.hugetlbfs_mount = '/dev/hugepages' params.doc_logger.info(STEPS + '# cat /etc/libvirt/qemu.conf\n' + \ 'hugetlbfs_mount = "%s"\n' % params.hugetlbfs_mount) params.doc_logger.info(""" # service libvirtd restart Stopping libvirtd daemon: [ OK ] Starting libvirtd daemon: [ OK ] """) if params.hugetlbfs_mount is not '': params.doc_logger.info(""" Then guest memory backing files will be put in %s/libvirt/qemu/. #mount -t hugetlbfs hugetlbfs %s 2> reserve memory for huge pages, e.g: #sysctl vm.nr_hugepages=600 """ % (params.hugetlbfs_mount, params.hugetlbfs_mount)) else: # We need do some other things after env reached or require start = [ Provider('$guest_name.active', Provider.CLEAR), Provider('$guest_name.config.hugepage', Provider.SET) ] end = [ Provider('$guest_name.active', Provider.SET), Provider('$guest_name.config.hugepage', Provider.SET) ] def mist_host_hugepage(name, func, params, env): params.doc_logger.info(STEPS + "# virsh start %s" % params.guest_name) params.doc_logger.info(RESULT + "error: Failed to start domain %s" % params.guest_name) params.doc_logger.info( "error: internal error hugepages are disabled by administrator config" ) raise MistDeadEndException() return Mist({'active': (start, end)}, mist_host_hugepage)
def __init__(self): self._test_entry.add(Provider('$guest_name.config', Provider.SET))