]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env bash | |
2 | ||
3 | set -ex | |
4 | ||
5 | function run_perf_c2c() { | |
6 | # First get some background system info | |
7 | uname -a > uname.out | |
8 | lscpu > lscpu.out | |
9 | cat /proc/cmdline > cmdline.out | |
10 | timeout -s INT 10 vmstat -w 1 > vmstat.out || true | |
11 | sudo dmesg >& dmesg.out | |
12 | cat /proc/cpuinfo > cpuinfo.out | |
13 | ps axo psr,time,stat,ppid,pid,pcpu,comm > ps.1.out | |
14 | ps -eafT > ps.2.out | |
15 | sudo sysctl -a > sysctl.out | |
16 | ||
17 | nodecnt=`lscpu|grep "NUMA node(" |awk '{print $3}'` | |
18 | for ((i=0; i<$nodecnt; i++)) | |
19 | do | |
20 | sudo cat /sys/devices/system/node/node${i}/meminfo > meminfo.$i.out | |
21 | done | |
22 | sudo more `sudo find /proc -name status` > proc_parent_child_status.out | |
23 | sudo more /proc/*/numa_maps > numa_maps.out | |
24 | ||
25 | # | |
26 | # Get separate kernel and user perf-c2c stats | |
27 | # | |
28 | sudo perf c2c record -a --ldlat=70 --all-user -o perf_c2c_a_all_user.data sleep 5 | |
29 | sudo perf c2c report --stdio -i perf_c2c_a_all_user.data > perf_c2c_a_all_user.out 2>&1 | |
30 | sudo perf c2c report --full-symbols --stdio -i perf_c2c_a_all_user.data > perf_c2c_full-sym_a_all_user.out 2>&1 | |
31 | ||
32 | sudo perf c2c record --call-graph dwarf -a --ldlat=70 --all-user -o perf_c2c_g_a_all_user.data sleep 5 | |
33 | sudo perf c2c report -g --stdio -i perf_c2c_g_a_all_user.data > perf_c2c_g_a_all_user.out 2>&1 | |
34 | ||
35 | sudo perf c2c record -a --ldlat=70 --all-kernel -o perf_c2c_a_all_kernel.data sleep 4 | |
36 | sudo perf c2c report --stdio -i perf_c2c_a_all_kernel.data > perf_c2c_a_all_kernel.out 2>&1 | |
37 | ||
38 | sudo perf c2c record --call-graph dwarf --ldlat=70 -a --all-kernel -o perf_c2c_g_a_all_kernel.data sleep 4 | |
39 | ||
40 | sudo perf c2c report -g --stdio -i perf_c2c_g_a_all_kernel.data > perf_c2c_g_a_all_kernel.out 2>&1 | |
41 | ||
42 | # | |
43 | # Get combined kernel and user perf-c2c stats | |
44 | # | |
45 | sudo perf c2c record -a --ldlat=70 -o perf_c2c_a_both.data sleep 4 | |
46 | sudo perf c2c report --stdio -i perf_c2c_a_both.data > perf_c2c_a_both.out 2>&1 | |
47 | ||
48 | sudo perf c2c record --call-graph dwarf --ldlat=70 -a --all-kernel -o perf_c2c_g_a_both.data sleep 4 | |
49 | sudo perf c2c report -g --stdio -i perf_c2c_g_a_both.data > perf_c2c_g_a_both.out 2>&1 | |
50 | ||
51 | # | |
52 | # Get all-user physical addr stats, in case multiple threads or processes are | |
53 | # accessing shared memory with different vaddrs. | |
54 | # | |
55 | sudo perf c2c record --phys-data -a --ldlat=70 --all-user -o perf_c2c_a_all_user_phys_data.data sleep 5 | |
56 | sudo perf c2c report --stdio -i perf_c2c_a_all_user_phys_data.data > perf_c2c_a_all_user_phys_data.out 2>&1 | |
57 | } | |
58 | ||
59 | function run() { | |
60 | local dir=$1 | |
61 | shift | |
62 | ( | |
63 | rm -fr $dir | |
64 | mkdir $dir | |
65 | cd $dir | |
66 | ceph_test_c2c --threads $(($(nproc) * 2)) "$@" & | |
67 | sleep 30 # let it warm up | |
68 | run_perf_c2c | |
69 | kill $! || { echo "ceph_test_c2c WAS NOT RUNNING" ; exit 1 ; } | |
70 | ) || exit 1 | |
71 | } | |
72 | ||
73 | function bench() { | |
74 | optimized=$(timeout 30 ceph_test_c2c --threads $(($(nproc) * 2)) --sharding 2> /dev/null || true) | |
75 | not_optimized=$(timeout 30 ceph_test_c2c --threads $(($(nproc) * 2)) 2> /dev/null || true) | |
76 | if ! (( $optimized > ( $not_optimized * 2 ) )) ; then | |
77 | echo "the optimization is expected to be at least x2 faster" | |
78 | exit 1 | |
79 | fi | |
80 | } | |
81 | ||
82 | run with-sharding --sharding | |
83 | run without-sharding | |
84 | bench |