Skip to content
Snippets Groups Projects
Select Git revision
  • android-msm-shamrock-3.10-nougat-release
  • master default protected
  • android-msm-bullhead-3.10-nougat_kgdb_less_changes
  • android-msm-bullhead-3.10-nougat_kgdb
  • android-msm-bullhead-3.10-nougat_klist
  • android-4.4
  • android-msm-vega-4.4-oreo-daydream
  • android-msm-wahoo-4.4-p-preview-5
  • android-msm-wahoo-4.4-pie
  • android-msm-marlin-3.18-p-preview-5
  • android-msm-marlin-3.18-pie
  • android-msm-wahoo-2018.07-oreo-m2
  • android-msm-wahoo-2018.07-oreo-m4
  • android-msm-wahoo-4.4-p-preview-4
  • android-msm-bullhead-3.10-oreo-m6
  • android-msm-angler-3.10-oreo-m6
  • android-msm-marlin-3.18-p-preview-4
  • android-msm-stargazer-3.18-oreo-wear-dr
  • android-msm-catshark-3.18-oreo-wear-dr
  • android-msm-wahoo-4.4-oreo-m2
  • android-msm-wahoo-4.4-oreo-m4
  • android-daydreamos-8.0.0_r0.5
  • android-8.1.0_r0.92
  • android-8.1.0_r0.91
  • android-daydreamos-8.0.0_r0.4
  • android-p-preview-5_r0.2
  • android-p-preview-5_r0.1
  • android-9.0.0_r0.5
  • android-9.0.0_r0.4
  • android-9.0.0_r0.2
  • android-9.0.0_r0.1
  • android-8.1.0_r0.81
  • android-8.1.0_r0.80
  • android-8.1.0_r0.78
  • android-8.1.0_r0.76
  • android-8.1.0_r0.75
  • android-8.1.0_r0.72
  • android-8.1.0_r0.70
  • android-p-preview-4_r0.2
  • android-p-preview-4_r0.1
  • android-wear-8.0.0_r0.30
41 results

CREDITS

Blame
  • summarize.py 4.87 KiB
    #!/usr/bin/env python3
    
    # Copyright 2018-2019 Florian Fischer <florian.fl.fischer@fau.de>
    #
    # This file is part of allocbench.
    #
    # allocbench is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # allocbench is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with allocbench.  If not, see <http://www.gnu.org/licenses/>.
    
    """Summarize the results of an allocbench run"""
    
    import argparse
    import importlib
    import os
    import pickle
    import sys
    
    import src.globalvars
    from src.util import print_status, print_debug, print_error
    from src.util import print_license_and_exit, print_version_and_exit
    
    
    def specific_summary(bench, sum_dir, allocators):
        """Summarize bench in sum_dir for allocators"""
        old_allocs = bench.results["allocators"]
        allocs_in_set = {k: v for k, v in old_allocs.items() if k in allocators}
    
        if not allocs_in_set:
            return
    
        # create and change to sum_dir
        os.mkdir(sum_dir)
        os.chdir(sum_dir)
    
        bench.results["allocators"] = allocs_in_set
    
        # set colors
        explicit_colors = [v["color"] for k, v in allocs_in_set.items()
                           if v["color"] is not None]
        print_debug("Explicit colors:", explicit_colors)
    
        cycle_list = ["C" + str(i) for i in range(0, 10)]
        avail_colors = [color for color in cycle_list
                        if color not in explicit_colors]
        print_debug("available colors:", avail_colors)
    
        for _, value in allocs_in_set.items():
            if value["color"] is None:
                value["color"] = avail_colors.pop()
    
        src.globalvars.allocators = allocators
    
        bench.summary()
        bench.results["allocators"] = old_allocs
        os.chdir("..")
    
    
    def bench_sum(bench):
        """Create a summary of bench for each set of allocators"""
        sets = {"glibcs": ["glibc", "glibc-noThreadCache", "glibc-noFalsesharing",
                           "glibc-noFalsesharingClever"],
                "tcmalloc": ["TCMalloc", "TCMalloc-NoFalsesharing"],
                "nofs": ["glibc", "glibc-noFalsesharing", "glibc-noFalsesharingClever",
                         "TCMalloc", "TCMalloc-NoFalsesharing"],
                "ba" : ["glibc", "TCMalloc", "jemalloc", "Hoard"],
                "industry" : ["glibc", "llalloc", "TCMalloc", "jemalloc", "tbbmalloc", "mimalloc"],
                "research" : ["scalloc", "SuperMalloc", "Mesh", "Hoard", "snmalloc"]}
    
        os.makedirs(bench.name)
        os.chdir(bench.name)
    
        os.mkdir("all")
        os.chdir("all")
        bench.summary()
        os.chdir("..")
    
        for set_name in sets:
            specific_summary(bench, set_name, sets[set_name])
    
        os.chdir("..")
    
    
    def main():
        if "--license" in sys.argv:
            print_license_and_exit()
    
        if "--version" in sys.argv:
            print_version_and_exit()
    
        parser = argparse.ArgumentParser(description="Summarize allocbench results in allocator sets")
        parser.add_argument("results", help="path to results", type=str)
        parser.add_argument("--license", help="print license info and exit", action='store_true')
        parser.add_argument("--versiob", help="print version info and exit", action='store_true')
        parser.add_argument("-b", "--benchmarks", help="benchmarks to summarize", nargs='+')
        parser.add_argument("-x", "--exclude-benchmarks", help="benchmarks to exclude", nargs='+')
    
        args = parser.parse_args()
    
        if not os.path.isdir(args.results):
            print_error(f"{args.results} is no directory")
            exit(1)
    
        if not os.path.isfile(os.path.join(args.results, "facts.save")):
            print_error(f"{args.results} is no valid allocbench result it misses facts.save")
            exit(1)
    
        src.globalvars.resdir = args.results
        os.chdir(args.results)
    
        # Load facts
        with open("facts.save", "rb") as f:
            src.globalvars.facts = pickle.load(f)
    
        for benchmark in src.globalvars.benchmarks:
            if args.benchmarks and not benchmark in args.benchmarks:
                continue
            if args.exclude_benchmarks and benchmark in args.exclude_benchmarks:
                continue
    
            bench_module = importlib.import_module(f"src.benchmarks.{benchmark}")
    
            if not hasattr(bench_module, benchmark):
                print_error(f"{benchmark} has no member {benchmark}")
                print_error(f"Skipping {benchmark}.")
    
            bench = getattr(bench_module, benchmark)
    
            try:
                bench.load()
            except FileNotFoundError:
                continue
    
            print_status(f"Summarizing {bench.name} ...")
            try:
                bench_sum(bench)
            except FileExistsError as e:
                print(e)
    
    
    if __name__ == "__main__":
        main()