[libvirt] [test-API][PATCH V2] managedsave: change the checking method about bypass cache
Guannan Ren
gren at redhat.com
Sun Dec 30 13:44:58 UTC 2012
On 12/25/2012 12:04 PM, hongming wrote:
> Check whether the O_DIRECT flag is in use on the managed save file
> during the duration of the managed save, since that is the real effect
> of the current implementation of the --bypass-cache flag.
> Add break condition into the while loop of get_fileflags()
> method in the PATCH V2
> ---
> repos/managedsave/managedsave.py | 61 ++++++++++++++++++++------------------
> 1 files changed, 32 insertions(+), 29 deletions(-)
>
> diff --git a/repos/managedsave/managedsave.py b/repos/managedsave/managedsave.py
> index 4a92151..70d4ebc 100644
> --- a/repos/managedsave/managedsave.py
> +++ b/repos/managedsave/managedsave.py
> @@ -2,6 +2,8 @@
>
> import os
> import math
> +import thread
> +import time
>
> import libvirt
> from libvirt import libvirtError
> @@ -39,39 +41,43 @@ def check_savefile_create(*args):
> logger.info("managed save file exists")
> return True
>
> -def compare_cachedfile(cachebefore, cacheafter):
> - """Compare cached value before managed save and its value after
> - managed save """
> +def get_fileflags():
> + """Get the file flags of managed save file"""
> + cmds = "cat /proc/$(lsof -w /var/lib/libvirt/qemu/save/"+guestname+".save"\
> + "|awk '/libvirt_i/{print $2}')/fdinfo/1|grep flags|awk '{print $NF}'"
> + global fileflags
> + while True:
> + (status, output) = utils.exec_cmd(cmds, shell=True)
> + if status == 0:
> + if len(output) == 1:
> + logger.info("The flags of saved file %s " % output[0])
> + fileflags = output[0][-5]
> + break
> + else:
> + logger.error("Fail to get the flags of saved file")
> + return 1
> +
> + thread.exit_thread()
>
> - diff = cacheafter - cachebefore
> - logger.info("diff is %s " % diff)
> - percent = math.fabs(diff)/cachebefore
> - logger.info("diff percent is %s " % percent)
> - if percent < 0.05:
> +def check_fileflag(fileflags):
> + """Check the file flags of managed save file if include O_DIRECT"""
> + if int(fileflags) == 4:
> + logger.info("file flags include O_DIRECT")
> return True
> else:
> + logger.error("file flags doesn't include O_DIRECT")
> return False
>
> -def get_cachevalue():
> - """Get the file system cached value """
> -
> - cmds = "head -n4 /proc/meminfo|grep Cached|awk '{print $2}'"
> - (status, output) = utils.exec_cmd(cmds, shell=True)
> - if status != 0:
> - logger.error("Fail to run cmd line to get cache")
> - return 1
> - else:
> - logger.debug(output[0])
> - cachevalue= int(output[0])
> - return cachevalue
> -
> def managedsave(params):
> """Managed save a running domain"""
>
> global logger
> logger = params['logger']
> + global guestname
> guestname = params['guestname']
> flags = params ['flags']
> + global fileflags
> + fileflags = ''
> #Save given flags to sharedmod.data
> sharedmod.data['flagsave'] = flags
>
> @@ -122,17 +128,14 @@ def managedsave(params):
>
> #If given flags include bypass-cache,check if bypass file system cache
> if flagn % 2 == 1:
> - logger.info("Given flags include --bypass-cache")
> - os.system('echo 3 > /proc/sys/vm/drop_caches')
> - cache_before = get_cachevalue()
> - logger.info("Cached value before managedsave is %s" % cache_before)
> + logger.info("Given flags include --bypass-cache")
> + thread.start_new_thread(get_fileflags,())
>
> + # Guarantee get_fileflags shell has run before managed save
> + time.sleep(5)
> domobj.managedSave(flagn)
>
> - cache_after = get_cachevalue()
> - logger.info("Cached value after managedsave is %s" % cache_after)
> -
> - if compare_cachedfile(cache_before, cache_after):
> + if check_fileflag(fileflags):
> logger.info("Bypass file system cache successfully")
> else:
> logger.error("Bypass file system cache failed")
ACK and pushed.
Thanks
Guannan
More information about the libvir-list
mailing list