test/benchmark/cmp_profile.sh - ktap

  1. #!/bin/sh

  2. # This script compare stack profiling performance between ktap and stap.
  3. #
  4. # 1. ktap -e 'profile-1000us { s[stack(-1, 12)] += 1 }'
  5. # 2. stap -e 'probe timer.profile { s[backtrace()] += 1 }'
  6. # 3. stap -e 'probe timer.profile { s[backtrace()] <<< 1 }'

  7. #Result:
  8. #Currently the stack profiling overhead is nearly same between ktap and stap.
  9. #
  10. #ktap reslove kernel stack to string in runtime, which is very time consuming,
  11. #optimize it in future.


  12. gcc -o sembench sembench.c -O2 -lpthread

  13. COMMAND="./sembench -t 200 -w 20 -r 30 -o 2"

  14. #------------------------------------------------------------#

  15. echo -e "without tracing:"
  16. $COMMAND; $COMMAND; $COMMAND

  17. #------------------------------------------------------------#

  18. ../../ktap -q -e 'var s = table.new(0, 20000) profile-1000us { s[stack(-1, 12)] += 1 }' &

  19. echo -e "\nktap tracing: profile-1000us { s[stack(-1, 12)] += 1 }"
  20. $COMMAND; $COMMAND; $COMMAND
  21. pid=`pidof ktap`
  22. disown $pid; kill -9 $pid; sleep 1

  23. #------------------------------------------------------------#

  24. stap -o /dev/null -e 'global s[20000]; probe timer.profile { s[backtrace()] += 1 }' &

  25. echo -e "\nstap tracing: probe timer.profile { s[backtrace()] += 1 }"
  26. $COMMAND; $COMMAND; $COMMAND
  27. pkill stap

  28. #------------------------------------------------------------#

  29. stap -o /dev/null -e 'global s[20000]; probe timer.profile { s[backtrace()] <<< 1 }' &

  30. echo -e "\nstap tracing: probe timer.profile { s[backtrace()] <<< 1 }"
  31. $COMMAND; $COMMAND; $COMMAND
  32. pkill stap

  33. #------------------------------------------------------------#


  34. rm -rf ./sembench