diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-09-19 13:20:56 +0100 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-09-19 20:30:35 +0100 |
commit | 886a71438f46d6c49f171998a2ecaf9590638fbe (patch) | |
tree | d37673f2b4ebc1c9029f872f1392443f2067e150 /bitbake/lib | |
parent | 2af45501fd998771b2102b9724be2a6d6a4eab7b (diff) | |
download | poky-886a71438f46d6c49f171998a2ecaf9590638fbe.tar.gz |
bitbake: utils: Add ionice option to prunedir
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.
(Bitbake rev: 797354d285f6d624d9adb52bab65823572da0e39)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/utils.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/bitbake/lib/bb/utils.py b/bitbake/lib/bb/utils.py index 3e90b6a306..d035949b3d 100644 --- a/bitbake/lib/bb/utils.py +++ b/bitbake/lib/bb/utils.py | |||
@@ -677,7 +677,7 @@ def _check_unsafe_delete_path(path): | |||
677 | return True | 677 | return True |
678 | return False | 678 | return False |
679 | 679 | ||
680 | def remove(path, recurse=False): | 680 | def remove(path, recurse=False, ionice=False): |
681 | """Equivalent to rm -f or rm -rf""" | 681 | """Equivalent to rm -f or rm -rf""" |
682 | if not path: | 682 | if not path: |
683 | return | 683 | return |
@@ -686,7 +686,10 @@ def remove(path, recurse=False): | |||
686 | if _check_unsafe_delete_path(path): | 686 | if _check_unsafe_delete_path(path): |
687 | raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path) | 687 | raise Exception('bb.utils.remove: called with dangerous path "%s" and recurse=True, refusing to delete!' % path) |
688 | # shutil.rmtree(name) would be ideal but its too slow | 688 | # shutil.rmtree(name) would be ideal but its too slow |
689 | subprocess.check_call(['rm', '-rf'] + glob.glob(path)) | 689 | cmd = [] |
690 | if ionice: | ||
691 | cmd = ['ionice', '-c', '3'] | ||
692 | subprocess.check_call(cmd + ['rm', '-rf'] + glob.glob(path)) | ||
690 | return | 693 | return |
691 | for name in glob.glob(path): | 694 | for name in glob.glob(path): |
692 | try: | 695 | try: |
@@ -695,12 +698,12 @@ def remove(path, recurse=False): | |||
695 | if exc.errno != errno.ENOENT: | 698 | if exc.errno != errno.ENOENT: |
696 | raise | 699 | raise |
697 | 700 | ||
698 | def prunedir(topdir): | 701 | def prunedir(topdir, ionice=False): |
699 | # Delete everything reachable from the directory named in 'topdir'. | 702 | # Delete everything reachable from the directory named in 'topdir'. |
700 | # CAUTION: This is dangerous! | 703 | # CAUTION: This is dangerous! |
701 | if _check_unsafe_delete_path(topdir): | 704 | if _check_unsafe_delete_path(topdir): |
702 | raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir) | 705 | raise Exception('bb.utils.prunedir: called with dangerous path "%s", refusing to delete!' % topdir) |
703 | remove(topdir, recurse=True) | 706 | remove(topdir, recurse=True, ionice=ionice) |
704 | 707 | ||
705 | # | 708 | # |
706 | # Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var) | 709 | # Could also use return re.compile("(%s)" % "|".join(map(re.escape, suffixes))).sub(lambda mo: "", var) |