def main(): target = Target() res_files = [] # tests_to_run = ['SysBenchMutex', 'SysBenchThreads', 'SysBenchMemory', 'SysBenchCpu'] tests_to_run = ['SysBenchThreads', 'HackbenchForkSockets', 'SysBenchMutex', 'PerfBenchFutexWake'] iter = 3 for batch in range(0,1): target.execute('sysctl kernel.sched_check_group_util=0', as_root=True) time.sleep(5) for i in range(iter): res_files.append(run_tests(test_name='BASELINE_{}'.format(batch), target=target, tests_to_run=tests_to_run, iter=i)) target.execute('sysctl kernel.sched_check_group_util=1', as_root=True) time.sleep(5) for i in range(iter): res_files.append(run_tests(test_name='PATCH_{}'.format(batch), target=target, tests_to_run=tests_to_run, iter=i)) title = "Usage of group_util in update_pick_idlest() impact on common benchmarks" description = "In update_pick_idlest() function \ When both groups have 'group_has_spare' type \ and the same number of idle CPU's. \ We suggest evaluating group_util to find idlest group. " #create_report(res_files, 'results/group_util', title=title, description= description) create_patch(res_files, 'results/group_util', title=title, description= description)
def __init__(self, target: Target): self.start_time = datetime.now() self.raw_data = [] self.log_data = [] self.test_results = {} self.test_results['platform'] = target.platform self.test_results['tests'] = {} target.execute('mkdir tmp', as_root=False)
def main(): target = Target() test_results = Results(target) test_results.log( target.execute('cat /sys/kernel/debug/sched_features | grep _WA_ ', as_root=True)) tests_to_run = [] # tests_to_run = ['SysBenchCpu', 'SysBenchMemory'] # tests_to_run = ['PerfBenchFutexWake'] time = 60 events = [ 'sched:sched_migrate_task', 'sched:sched_stick_numa', 'sched:sched_move_numa', 'sched:sched_swap_numa' ] events.extend(['migrate:mm_migrate_pages']) for test in test_registry.test_registry: if not tests_to_run or test(target).__class__.__name__ in tests_to_run: t = test(target, time=time) t.run_event(target, events, test_results) res_files = [] res_files.append(test_results.store('Res1')) res_files.append(test_results.store('Res2')) create_report(res_files, 'Report', 'Test Run')
def __init__(self, target: Target, command, events=None, output=None): self.target = target cmd = "bash -c 'echo event-fork > /sys/kernel/debug/tracing/trace_options'" target.execute(cmd) cmd = "bash -c 'echo 0 > /sys/kernel/debug/tracing/tracing_on'" print(cmd) target.execute(cmd) self.enable_events(events) if output is None: output = "trace_pipe.txt" cmd = "cat /sys/kernel/debug/tracing/trace_pipe > {}".format(output) proc = subprocess.Popen("sudo bash -c '{}'".format(cmd), shell=True) cmd = "sh -c 'echo $$ > /sys/kernel/debug/tracing/set_event_pid; echo 1 > /sys/kernel/debug/tracing/tracing_on; {}'".format( command) print(cmd) self.results = target.execute(cmd) cmd = "bash -c 'echo 0 > /sys/kernel/debug/tracing/tracing_on'" print(cmd) target.execute(cmd) proc.kill() proc.wait() self.disable_events(events)
def main(): target = Target() res_files = [] # tests_to_run = ['SysBenchMutex', 'SysBenchThreads', 'SysBenchMemory', 'SysBenchCpu'] tests_to_run = [ 'SysBenchThreads', 'HackbenchForkSockets', 'SysBenchMutex', 'PerfBenchFutexWake' ] #tests_to_run = ['SysBenchThreads'] iter = 3 target.execute('sysctl kernel.sched_check_group_util=0', as_root=True) time.sleep(5) result_name = 'BASELINE' for test in test_registry.test_registry: test_name = test(target).__class__.__name__ if not tests_to_run or test_name in tests_to_run: run_single_test(result_name, test_name, target, res_files, iter) target.execute('sysctl kernel.sched_check_group_util=1', as_root=True) time.sleep(5) result_name = 'PATCH' for test in test_registry.test_registry: test_name = test(target).__class__.__name__ if not tests_to_run or test_name in tests_to_run: run_single_test(result_name, test_name, target, res_files, iter) title = "Usage of group_util in update_pick_idlest() impact on common benchmarks" description = "In update_pick_idlest() function \ When both groups have 'group_has_spare' type \ and the same number of idle CPU's. \ We suggest evaluating group_util to find idlest group. " #create_report(res_files, 'results/group_util', title=title, description= description) #create_patch(res_files, 'results/group_util', title=title, description= description) create_patch_loop(res_files, 'results/group_util', title=title, description=description)
def main(): target = Target() res_files = [] tests_to_run = [] iter = 3 target.execute('sysctl kernel.numa_balancing=1', as_root=True) target.execute( "bash -c 'echo WA_WEIGHT > /sys/kernel/debug/sched_features'", as_root=True) target.execute("bash -c 'echo WA_IDLE > /sys/kernel/debug/sched_features'", as_root=True) for i in range(iter): time.sleep(10) res_files.append( run_tests(test_name='Default-{}'.format(i), target=target, tests_to_run=tests_to_run)) target.execute('sysctl kernel.numa_balancing=0', as_root=True) for i in range(iter): time.sleep(10) res_files.append( run_tests(test_name='NB-OFF-{}'.format(i), target=target, tests_to_run=tests_to_run)) target.execute('sysctl kernel.numa_balancing=0', as_root=True) target.execute( "bash -c 'echo NO_WA_WEIGHT > /sys/kernel/debug/sched_features'", as_root=True) target.execute( "bash -c 'echo NO_WA_IDLE > /sys/kernel/debug/sched_features'", as_root=True) for i in range(iter): time.sleep(10) res_files.append( run_tests(test_name='NB-OFF_NO_WA_IDLE-{}'.format(i), target=target, tests_to_run=tests_to_run)) title = "NUMA balancing impact on common benchmarks" description = "NUMA balancing can lead to performance degradation on \ NUMA-based arm64 systems when tasks migrate, \n \ and their memory accesses now suffer additional latency. \ NO_WA_IDLE prevents idle CPUs aggressively pull tasks. " create_report(res_files, 'results/wa_idle', title=title, description=description)
def main(): target = Target() res_files = [] tests_to_run = [ 'SysBenchMutex', 'SysBenchThreads', 'SysBenchMemory', 'SysBenchCpu', 'PerfBenchMemMemset' ] iter = 5 test_delay = 2 target.execute('sysctl kernel.sched_enable_task_numa_init=0', as_root=True) for i in range(iter): gc.collect() time.sleep(test_delay) res_files.append( run_tests(test_name='Default', target=target, tests_to_run=tests_to_run, iter=i)) target.execute('sysctl kernel.sched_enable_task_numa_init=0', as_root=True) for i in range(iter): gc.collect() time.sleep(test_delay) res_files.append( run_tests(test_name='numa_init', target=target, tests_to_run=tests_to_run, iter=i)) target.execute('sysctl kernel.sched_enable_task_numa_init=0', as_root=True) for i in range(iter): gc.collect() time.sleep(test_delay) res_files.append( run_tests(test_name='Default_1', target=target, tests_to_run=tests_to_run, iter=i)) target.execute('sysctl kernel.sched_enable_task_numa_init=0', as_root=True) for i in range(iter): gc.collect() time.sleep(test_delay) res_files.append( run_tests(test_name='numa_init_1', target=target, tests_to_run=tests_to_run, iter=i)) title = "Impact of setting numa_preferred_nid during wakeup_new phase on common benchmarks" description = "In update_pick_idlest() function \ When both groups have 'group_has_spare' type \ and the same number of idle CPU's. \ We suggest evaluating group_util to find idlest group. " create_report(res_files, 'results/numa_init', title=title, description=description)
import time from src.trace_event import TraceEvent from src.target import Target target = Target() # events = ['sched_wakeup_new', 'sched_wakeup', 'sched_migrate_task', 'sched_move_numa'] # events = ['sched_move_numa', 'sched_preferred_nid', 'sched_numa_faults', 'sched_numa_stats'] events = ['sched_wakeup_new'] # cmd = "perf bench mem memset -s 1536MB -l 10 -f default" # cmd = "perf bench -f simple futex wake -s -t 32 -w 1" cmd = "sysbench threads --threads=8 run" target.execute('sysctl kernel.sched_check_group_util=0', as_root=True) te = TraceEvent(target, cmd, events=events, output="sched_check_group_util_0.txt") print(te.results) time.sleep(5) target.execute('sysctl kernel.sched_check_group_util=1', as_root=True) te = TraceEvent(target, cmd, events=events, output="sched_check_group_util_1.txt") print(te.results)