test/benchmark/cmp_neq.sh - ktap

  1. #!/bin/sh

  2. # This script compare number equality performance between ktap and stap.
  3. # It also compare different ktap tracing interfaces.
  4. #
  5. # 1. ktap -e 'trace syscalls:sys_enter_futex {}'
  6. # 2. ktap -e 'kdebug.tracepoint("sys_enter_futex", function () {})'
  7. # 3. ktap -e 'trace probe:SyS_futex uaddr=%di {}'
  8. # 4. ktap -e 'kdebug.kprobe("SyS_futex", function () {})'
  9. # 5. stap -e 'probe syscall.futex {}'
  10. # 6. ktap -d -e 'trace syscalls:sys_enter_futex {}'
  11. # 7. ktap -d -e 'kdebug.tracepoint("sys_enter_futex", function () {})'
  12. # 8. ktap -e 'trace syscalls:sys_enter_futex /kernel_buildin_filter/ {}'

  13. #Result:
  14. #ktap number computation and comparsion overhead is bigger than stap,
  15. #nearly 10+% (4 vs. 5 in above)), ktap is not very slow.
  16. #
  17. #Perf backend tracing overhead is big, because it need copy temp buffer, and
  18. #code path is very long than direct callback(1 vs. 4 in above).

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

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

  21. #------------------------------------------------------------#

  22. echo -e "without tracing:"
  23. #$COMMAND; $COMMAND; $COMMAND

  24. #------------------------------------------------------------#

  25. ../../ktap -q -e 'trace syscalls:sys_enter_futex {
  26.     var uaddr = arg2
  27.         if (uaddr == 0x100 || uaddr == 0x200 || uaddr == 0x300 ||
  28.         uaddr == 0x400 || uaddr == 0x500 || uaddr == 0x600 ||
  29.         uaddr == 0x700 || uaddr == 0x800 || uaddr == 0x900 ||
  30.         uaddr == 0x1000) {
  31.                 printf("%x %x\n", arg1, arg2)
  32.         }}' &

  33. echo -e "\nktap tracing: trace syscalls:sys_enter_futex { if (arg2 == 0x100 || arg2 == 0x200 ... }"
  34. $COMMAND; $COMMAND; $COMMAND
  35. pid=`pidof ktap`
  36. disown $pid; kill -9 $pid; sleep 1

  37. #------------------------------------------------------------#

  38. ../../ktap -q -e 'kdebug.tracepoint("sys_enter_futex", function () {
  39.     var arg = arg2
  40.         if (arg == 0x100 || arg == 0x200 || arg == 0x300 || arg == 0x400 ||
  41.             arg == 0x500 || arg == 0x600 || arg == 0x700 || arg == 0x800 ||
  42.             arg == 0x900 || arg == 0x1000) {
  43.                 printf("%x %x\n", arg1, arg2)
  44.         }})' &

  45. echo -e '\nktap tracing: kdebug.tracepoint("sys_enter_futex", function (xxx) {})'
  46. $COMMAND; $COMMAND; $COMMAND
  47. pid=`pidof ktap`
  48. disown $pid; kill -9 $pid; sleep 1

  49. #------------------------------------------------------------#

  50. ../../ktap -q -e 'trace probe:SyS_futex uaddr=%di {
  51.     var arg = arg1
  52.         if (arg == 0x100 || arg == 0x200 || arg == 0x300 || arg == 0x400 ||
  53.             arg == 0x500 || arg == 0x600 || arg == 0x700 || arg == 0x800 ||
  54.             arg == 0x900 || arg == 0x1000) {
  55.                 printf("%x\n", arg1)
  56.         }}' &
  57. echo -e '\nktap tracing: trace probe:SyS_futex uaddr=%di {...}'
  58. $COMMAND; $COMMAND; $COMMAND
  59. pid=`pidof ktap`
  60. disown $pid; kill -9 $pid; sleep 1


  61. #------------------------------------------------------------#
  62. ../../ktap -q -e 'kdebug.kprobe("SyS_futex", function () {
  63.     var uaddr = 1
  64.         if (uaddr == 0x100 || uaddr == 0x200 || uaddr == 0x300 ||
  65.         uaddr == 0x400 || uaddr == 0x500 || uaddr == 0x600 ||
  66.         uaddr == 0x700 || uaddr == 0x800 || uaddr == 0x900 ||
  67.         uaddr == 0x1000) {
  68.                 printf("%x\n", uaddr)
  69.     }})' &
  70. echo -e '\nktap tracing: kdebug.kprobe("SyS_futex", function () {})'
  71. $COMMAND; $COMMAND; $COMMAND
  72. pid=`pidof ktap`
  73. disown $pid; kill -9 $pid; sleep 1

  74. #------------------------------------------------------------#

  75. stap -e 'probe syscall.futex {
  76.     uaddr = $uaddr
  77.         if (uaddr == 0x100 || uaddr == 0x200 || uaddr == 0x300 ||
  78.         uaddr == 0x400 || uaddr == 0x500 || uaddr == 0x600 ||
  79.         uaddr == 0x700 || uaddr == 0x800 || uaddr == 0x900 ||
  80.         uaddr == 0x1000) {
  81.                 printf("%x\n", uaddr)
  82.         }}' &

  83. echo -e "\nstap tracing: probe syscall.futex { if (uaddr == 0x100 || addr == 0x200 ... }"
  84. $COMMAND; $COMMAND; $COMMAND
  85. pid=`pidof stap`
  86. disown $pid; kill -9 $pid; sleep 1

  87. #------------------------------------------------------------#


  88. ../../ktap -d -q -e 'trace syscalls:sys_enter_futex {
  89.     var uaddr = arg2
  90.         if (uaddr == 0x100 || uaddr == 0x200 || uaddr == 0x300 ||
  91.         uaddr == 0x400 || uaddr == 0x500 || uaddr == 0x600 ||
  92.         uaddr == 0x700 || uaddr == 0x800 || uaddr == 0x900 ||
  93.         uaddr == 0x1000) {
  94.                 printf("%x %x\n", arg1, arg2)
  95.         }}' &

  96. echo -e "\nktap tracing dry-run: trace syscalls:sys_enter_futex { if (arg2 == 0x100 || arg2 == 0x200 ... }"
  97. $COMMAND; $COMMAND; $COMMAND
  98. pid=`pidof ktap`
  99. disown $pid; kill -9 $pid; sleep 1


  100. #------------------------------------------------------------#

  101. ../../ktap -d -q -e 'kdebug.tracepoint("sys_enter_futex", function () {
  102.     var arg = arg2
  103.         if (arg == 0x100 || arg == 0x200 || arg == 0x300 || arg == 0x400 ||
  104.             arg == 0x500 || arg == 0x600 || arg == 0x700 || arg == 0x800 ||
  105.             arg == 0x900 || arg == 0x1000) {
  106.                 printf("%x %x\n", arg1, arg2)
  107.         }})' &

  108. echo -e '\nktap tracing dry-run: kdebug.tracepoint("sys_enter_futex", function (xxx) {})'
  109. $COMMAND; $COMMAND; $COMMAND
  110. pid=`pidof ktap`
  111. disown $pid; kill -9 $pid; sleep 1


  112. #------------------------------------------------------------#

  113. ../../ktap -q -e 'trace syscalls:sys_enter_futex /
  114.     uaddr == 0x100 || uaddr == 0x200 || uaddr == 0x300 || uaddr == 0x400 ||
  115.     uaddr == 0x500 || uaddr == 0x600 || uaddr == 0x700 || uaddr == 0x800 ||
  116.     uaddr == 0x900 || uaddr == 0x1000/ {
  117.         printf("%x %x\n", arg1, arg2)
  118.     }' &

  119. echo -e "\nktap tracing: trace syscalls:sys_enter_futex /uaddr == 0x100 || uaddr == 0x200 .../ {}"
  120. $COMMAND; $COMMAND; $COMMAND
  121. pid=`pidof ktap`
  122. disown $pid; kill -9 $pid; sleep 1

  123. #------------------------------------------------------------#

  124. rm -rf ./sembench