1*d83cc019SAndroid Build Coastguard Workertest_exec_time=2 2*d83cc019SAndroid Build Coastguard Workertest_invert=1 3*d83cc019SAndroid Build Coastguard Worker 4*d83cc019SAndroid Build Coastguard Worker[ -e $IGT_BENCHMARKS/gem_latency ] || return 1 5*d83cc019SAndroid Build Coastguard Workersudo -n true || return 1 6*d83cc019SAndroid Build Coastguard Worker 7*d83cc019SAndroid Build Coastguard Worker__gem:dispatch__() { 8*d83cc019SAndroid Build Coastguard Worker for (( c=0; c<$1; c++ )); do 9*d83cc019SAndroid Build Coastguard Worker sudo $IGT_BENCHMARKS/gem_latency -t 2 -n $2 -p $3 -f $4 10*d83cc019SAndroid Build Coastguard Worker done 11*d83cc019SAndroid Build Coastguard Worker} 12*d83cc019SAndroid Build Coastguard Worker 13*d83cc019SAndroid Build Coastguard Worker# Measure the delay to execute N nops 14*d83cc019SAndroid Build Coastguard Workerfor n in 0 1 2 4 8 16 32 64 128 256 512 1024; do 15*d83cc019SAndroid Build Coastguard Worker name="gem:exec:latency:$n" 16*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 17*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:dispatch__ \$1 $n 1 1 ; } " 18*d83cc019SAndroid Build Coastguard Workerdone 19*d83cc019SAndroid Build Coastguard Worker 20*d83cc019SAndroid Build Coastguard Worker# Measure the execution delay vs contention, just for fun 21*d83cc019SAndroid Build Coastguard Workerfor p in 1 2 4 8 16 32 64 128 256 512 1024; do 22*d83cc019SAndroid Build Coastguard Worker name="gem:latency:dispatch:$p" 23*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 24*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:dispatch__ \$1 0 $p 1 ; } " 25*d83cc019SAndroid Build Coastguard Workerdone 26*d83cc019SAndroid Build Coastguard Worker 27*d83cc019SAndroid Build Coastguard Workerfor p in 1 2 4 8 16 32 64 128 256 512 1024; do 28*d83cc019SAndroid Build Coastguard Worker name="gem:throughput:dispatch:$p" 29*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 30*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:dispatch__ \$1 8 $p 5 ; } " 31*d83cc019SAndroid Build Coastguard Workerdone 32*d83cc019SAndroid Build Coastguard Worker 33*d83cc019SAndroid Build Coastguard Worker# Measure the wakeup delay (each wakeup should be uncontended) 34*d83cc019SAndroid Build Coastguard Worker__gem:latency:wait__() { 35*d83cc019SAndroid Build Coastguard Worker for (( c=0; c<$1; c++ )); do 36*d83cc019SAndroid Build Coastguard Worker sudo $IGT_BENCHMARKS/gem_latency -t 2 -w 2 -p $2 -f 2 $3 37*d83cc019SAndroid Build Coastguard Worker done 38*d83cc019SAndroid Build Coastguard Worker} 39*d83cc019SAndroid Build Coastguard Workerfor p in 1 2 4 8 16 32 64 128 256 512 1024; do 40*d83cc019SAndroid Build Coastguard Worker name="gem:latency:wait:$p" 41*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 42*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:wait__ \$1 $p ; } " 43*d83cc019SAndroid Build Coastguard Worker 44*d83cc019SAndroid Build Coastguard Worker name="gem:latency:wait:$p:fence" 45*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 46*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:wait__ \$1 $p -F ; } " 47*d83cc019SAndroid Build Coastguard Workerdone 48*d83cc019SAndroid Build Coastguard Worker 49*d83cc019SAndroid Build Coastguard Worker# Measure the total CPU cycles for the uncontended wakeups 50*d83cc019SAndroid Build Coastguard Worker__gem:latency:cpu__() { 51*d83cc019SAndroid Build Coastguard Worker for (( c=0; c<$1; c++ )); do 52*d83cc019SAndroid Build Coastguard Worker sudo $IGT_BENCHMARKS/gem_latency -t 2 -w 2 -p $2 -f 4 $3 53*d83cc019SAndroid Build Coastguard Worker done 54*d83cc019SAndroid Build Coastguard Worker} 55*d83cc019SAndroid Build Coastguard Workerfor p in 1 2 4 8 16 32 64 128 512 1024; do 56*d83cc019SAndroid Build Coastguard Worker name="gem:latency:cpu:$p" 57*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 58*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:cpu__ \$1 $p ; } " 59*d83cc019SAndroid Build Coastguard Worker 60*d83cc019SAndroid Build Coastguard Worker name="gem:latency:cpu:$p:fence" 61*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 62*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:cpu__ \$1 $p -F ; } " 63*d83cc019SAndroid Build Coastguard Workerdone 64*d83cc019SAndroid Build Coastguard Worker 65*d83cc019SAndroid Build Coastguard Worker# Measure the wakeup delay for contended wakeups (multiple waiters per request) 66*d83cc019SAndroid Build Coastguard Worker__gem:latency:herd__() { 67*d83cc019SAndroid Build Coastguard Worker for (( c=0; c<$1; c++ )); do 68*d83cc019SAndroid Build Coastguard Worker sudo $IGT_BENCHMARKS/gem_latency -t 2 -w 1 -c $2 -f 2 $3 69*d83cc019SAndroid Build Coastguard Worker done 70*d83cc019SAndroid Build Coastguard Worker} 71*d83cc019SAndroid Build Coastguard Workerfor p in 0 1 2 4 8 16 32 64 128 512 1024; do 72*d83cc019SAndroid Build Coastguard Worker name="gem:latency:herd:$p" 73*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 74*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:herd__ \$1 $p ; } " 75*d83cc019SAndroid Build Coastguard Worker 76*d83cc019SAndroid Build Coastguard Worker name="gem:latency:herd:$p:fence" 77*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 78*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:herd__ \$1 $p -F ; } " 79*d83cc019SAndroid Build Coastguard Workerdone 80*d83cc019SAndroid Build Coastguard Worker 81*d83cc019SAndroid Build Coastguard Worker# Measure the impact of contended wakeups on the RealTime waiter 82*d83cc019SAndroid Build Coastguard Worker__gem:latency:realtime__() { 83*d83cc019SAndroid Build Coastguard Worker for (( c=0; c<$1; c++ )); do 84*d83cc019SAndroid Build Coastguard Worker sudo $IGT_BENCHMARKS/gem_latency -t 2 -w 1 -c $2 -R -f 3 $3 85*d83cc019SAndroid Build Coastguard Worker done 86*d83cc019SAndroid Build Coastguard Worker} 87*d83cc019SAndroid Build Coastguard Workerfor p in 0 1 2 4 8 16 32 64 128 512 1024; do 88*d83cc019SAndroid Build Coastguard Worker name="gem:latency:realtime:$p" 89*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 90*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:realtime__ \$1 $p ; } " 91*d83cc019SAndroid Build Coastguard Worker 92*d83cc019SAndroid Build Coastguard Worker name="gem:latency:realtime:$p:fence" 93*d83cc019SAndroid Build Coastguard Worker test_name="$test_name $name" 94*d83cc019SAndroid Build Coastguard Worker eval "${name}_run() { __gem:latency:realtime__ \$1 $p -F ; } " 95*d83cc019SAndroid Build Coastguard Workerdone 96