#!/usr/bin/env python3 import common from shell_helpers import LF class Main(common.LkmcCliFunction): def __init__(self): super().__init__( defaults={ 'print_time': False, }, description='''\ Run Linux kernel boot tests and benchmarks. ''' ) self.add_argument( '--size', default=1, type=int, help='''\ Size of the tests to run. Scale: * 1: a few seconds and important * 2: < 5 minutes and important or a few seconds and not too important * 3: all ''' ) def _bench(self, **kwargs): self.run(**kwargs) def timed_main(self): #bench() ( # "${root_dir}/bench-cmd" "./run --arch ${1}${extra_args}" "$self.env['bench_boot']" #) # #newline() ( # echo >> "$self.env['bench_boot']" #) # #gem5_insts() ( # printf "instructions $(./gem5-stat --arch "$1" sim_insts)\n" >> "$self.env['bench_boot']" # newline #) # #qemu_insts() ( # common_arch="$1" # ./qemu-trace2txt --arch "$common_arch" # common_qemu_trace_txt_file="$("$getvar" --arch "$common_arch" qemu_trace_txt_file)" # printf "instructions $(wc -l "${common_qemu_trace_txt_file}" | cut -d' ' -f1)\n" >> "$self.env['bench_boot']" # newline #) # #rm -f "${self.env['bench_boot']}" self.run = self.import_path_main('run') run_args = self.get_common_args() if self.env['emulator'] == 'gem5': run_args['eval'] = 'm5 exit' elif self.env['emulator'] == 'qemu': run_args['eval'] = '/poweroff.out' if (self.env['emulator'] == 'qemu' or (self.env['emulator'] == 'gem5' and self.env['size'] >= 2)): self._bench(**run_args) if self.env['host_arch'] == self.env['arch']: # TODO: find out why it fails. if self.env['emulator'] != 'gem5': self._bench(kvm=True, **run_args) # newline if self.env['emulator'] == 'qemu' and self.env['size'] >= 2: self._bench(trace='exec_tb', **run_args) # qemu_insts "$arch" if self.env['emulator'] == 'gem5' and self.env['size'] >= 3: self._bench( extra_emulator_args=[ '--cpu-type', 'DerivO3CPU', '--caches', '--l2cache', '--l1d_size=1024kB', '--l1i_size=1024kB', '--l2_size=1024kB', '--l3_size=1024kB', ], **run_args ) # gem5_insts "$arch" #arch=arm #bench "$arch --eval '/poweroff.out'" #newline #if [ self.env['size'] -ge 2 ]; then # bench "$arch --eval '/poweroff.out' --trace exec_tb" # qemu_insts "$arch" # bench "$arch --eval 'm5 exit' --emulator gem5" # gem5_insts "$arch" #fi #if [ self.env['size'] -ge 3 ]; then # bench "$arch --eval 'm5 exit' --emulator gem5 -- --cpu-type=HPI ${caches}" # gem5_insts "$arch" #fi #arch=aarch64 #bench "$arch --eval '/poweroff.out'" #newline #if [ self.env['size'] -ge 2 ]; then # bench "$arch --eval '/poweroff.out' --trace exec_tb" # qemu_insts "$arch" # bench "$arch --eval 'm5 exit' --emulator gem5" # gem5_insts "$arch" #fi #if [ self.env['size'] -ge 3 ]; then # bench "$arch --eval 'm5 exit' --emulator gem5 -- --cpu-type=HPI ${caches}" # gem5_insts "$arch" # #bench "$arch --eval 'm5 exit' --emulator gem5 --gem5-script biglittle" # #gem5_insts "$arch" # bench "$arch --eval 'm5 exit' --emulator gem5 --gem5-build-type fast" # gem5_insts "$arch" # bench "$arch --eval 'm5 exit' --emulator gem5 --gem5-build-type debug" # gem5_insts "$arch" #fi if __name__ == '__main__': Main().cli_exit()