[bitbake-devel] [PATCH] utils: Add ionice option to prunedir

akuster akuster at mvista.com
Thu Sep 19 18:02:15 UTC 2019



On 9/19/19 8:51 AM, Richard Purdie wrote:
> Autobuilder type infrastructure can benefit from deletion of certain files as
> background IO due to the way Linux filesystem priority works.
>
> We have problems where build directories as part of oe-selftest being
> delete starves the running tasks of IO to the point builds take much
> longer to compelte.
>
> Having this option of running the deletion at "idle" helps a lot with
> that.
>
> Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
> ---
>  lib/bb/utils.py | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/lib/bb/utils.py b/lib/bb/utils.py
> index 3e90b6a306..d035949b3d 100644
> --- a/lib/bb/utils.py
> +++ b/lib/bb/utils.py
> @@ -677,7 +677,7 @@ def _check_unsafe_delete_path(path):
>          return True
>      return False
>  
> -def remove(path, recurse=False):
> +def remove(path, recurse=False, ionice=False):
>      """Equivalent to rm -f or rm -rf"""
>      if not path:
>          return
> @@ -686,7 +686,10 @@ def remove(path, recurse=False):
>              if _check_unsafe_delete_path(path):
>                  raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path)
>          # shutil.rmtree(name) would be ideal but its too slow
> -        subprocess.check_call(['rm', '-rf'] + glob.glob(path))
> +        cmd = []
> +        if ionice:
> +            cmd = ['ionice', '-c', '3']
Would allowing folks to configure the ionice value apply here?

- armin
> +        subprocess.check_call(cmd + ['rm', '-rf'] + glob.glob(path))
>          return
>      for name in glob.glob(path):
>          try:
> @@ -695,12 +698,12 @@ def remove(path, recurse=False):
>              if exc.errno != errno.ENOENT:
>                  raise
>  
> -def prunedir(topdir):
> +def prunedir(topdir, ionice=False):
>      # Delete everything reachable from the directory named in 'topdir'.
>      # CAUTION:  This is dangerous!
>      if _check_unsafe_delete_path(topdir):
>          raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir)
> -    remove(topdir, recurse=True)
> +    remove(topdir, recurse=True, ionice=ionice)
>  
>  #
>  # Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var)



More information about the bitbake-devel mailing list