#!/bin/sh # kernbench by Con Kolivas trap 'echo "ABORTING";exit' 1 2 15 VERSION=0.11 num_runs=5 while getopts vn:h i do case $i in h) echo "kernbench v$VERSION by Con Kolivas " echo "Usage:" echo "kernbench [-n runs] [-h] [-v]" echo "n : number of times to perform benchmark (default 5)" echo "h : print this help" echo "v : print version number" exit ;; v) echo "kernbench Version $VERSION by Con Kolivas " ; exit ;; n) num_runs=$OPTARG ;; esac done if [[ ! -f include/linux/kernel.h ]] ; then echo "no kernel source found; exiting" exit fi time=`which time` cpus=`grep -c processor /proc/cpuinfo` echo $cpus cpus found echo Cleaning source tree... make clean > /dev/null 2>&1 make mrproper > /dev/null 2>&1 echo Making defconfig... make defconfig > /dev/null 2>&1 echo Making dep if needed... make dep > /dev/null 2>&1 echo Caching kernel source in ram... for i in `find -type f` do cat $i > /dev/null done halfjobs=$(( $cpus / 2 + 1 )) optijobs=$(( $cpus * 4 + 1 )) temp_runs=$num_runs single_elapsed="a" for (( i=1 ; i<=temp_runs ; i++ )) do echo Single threaded run number $i ... make clean > /dev/null 2>&1 sleep 5 $time -f "%e %U %S %P %c %w" -o timelog make > /dev/null 2>&1 read elapsed_time user_time sys_time percent ctx sleeps $2}' ; then single_user=$user_time single_sys=$sys_time single_elapsed=$elapsed_time single_percent=$percent single_ctx=$ctx single_sleeps=$sleeps; if (( $i==$temp_runs )) ; then echo "Fastest run, adding extra run" (( temp_runs++ )) fi fi done temp_runs=$num_runs half_elapsed="a" for (( i=1 ; i<=temp_runs ; i++ )) do echo Half load -j$(( $halfjobs - 1)) run number $i ... make clean > /dev/null 2>&1 sleep 5 $time -f "%e %U %S %P %c %w" -o timelog make -j $halfjobs> /dev/null 2>&1 read elapsed_time user_time sys_time percent ctx sleeps $2}' ; then half_user=$user_time half_sys=$sys_time half_elapsed=$elapsed_time half_percent=$percent half_ctx=$ctx half_sleeps=$sleeps; if (( $i==$temp_runs )) ; then echo "Fastest run, adding extra run" (( temp_runs++ )) fi fi done temp_runs=$num_runs opti_elapsed="a" for (( i=1 ; i<=temp_runs ; i++ )) do echo Optimum load -j$(( $optijobs - 1)) run number $i ... make clean > /dev/null 2>&1 sleep 5 $time -f "%e %U %S %P %c %w" -o timelog make -j $optijobs > /dev/null 2>&1 read elapsed_time user_time sys_time percent ctx sleeps $2}' ; then opti_user=$user_time opti_sys=$sys_time opti_elapsed=$elapsed_time opti_percent=$percent opti_ctx=$ctx opti_sleeps=$sleeps; if (( $i==$temp_runs )) ; then echo "Fastest run, adding extra run" (( temp_runs++ )) fi fi done temp_runs=$num_runs max_elapsed="a" for (( i=1 ; i<=temp_runs ; i++ )) do echo Maximum load -j run number $i ... make clean > /dev/null 2>&1 sleep 5 $time -f "%e %U %S %P %c %w" -o timelog make -j > /dev/null 2>&1 read elapsed_time user_time sys_time percent ctx sleeps $2}' ; then max_user=$user_time max_sys=$sys_time max_elapsed=$elapsed_time max_percent=$percent max_ctx=$ctx max_sleeps=$sleeps; if (( $i==$temp_runs )) ; then echo "Fastest run, adding extra run" (( temp_runs++ )) fi fi done echo echo Best Single Threaded Run: echo Elapsed Time $single_elapsed echo User Time $single_user echo System Time $single_sys echo Percent CPU $single_percent echo Context Switches $single_ctx echo Sleeps $single_sleeps echo echo Best Half Load Run: echo Elapsed Time $half_elapsed echo User Time $half_user echo System Time $half_sys echo Percent CPU $half_percent echo Context Switches $half_ctx echo Sleeps $half_sleeps echo echo Best Optimum Load Run: echo Elapsed Time $opti_elapsed echo User Time $opti_user echo System Time $opti_sys echo Percent CPU $opti_percent echo Context Switches $opti_ctx echo Sleeps $opti_sleeps echo echo Best Maximum Load Run: echo Elapsed Time $max_elapsed echo User Time $max_user echo System Time $max_sys echo Percent CPU $max_percent echo Context Switches $max_ctx echo Sleeps $max_sleeps echo