]> git.proxmox.com Git - ceph.git/blob - ceph/qa/standalone/c2c/c2c.sh
import quincy beta 17.1.0
[ceph.git] / ceph / qa / standalone / c2c / c2c.sh
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