test_task_analyzer.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #!/bin/bash
  2. # perf script task-analyzer tests (exclusive)
  3. # SPDX-License-Identifier: GPL-2.0
  4. tmpdir=$(mktemp -d /tmp/perf-script-task-analyzer-XXXXX)
  5. err=0
  6. # set PERF_EXEC_PATH to find scripts in the source directory
  7. perfdir=$(dirname "$0")/../..
  8. if [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then
  9. export PERF_EXEC_PATH=$perfdir
  10. fi
  11. # Disable lsan to avoid warnings about python memory leaks.
  12. export ASAN_OPTIONS=detect_leaks=0
  13. cleanup() {
  14. rm -f perf.data
  15. rm -f perf.data.old
  16. rm -f csv
  17. rm -f csvsummary
  18. rm -rf "$tmpdir"
  19. trap - exit term int
  20. }
  21. trap_cleanup() {
  22. cleanup
  23. exit 1
  24. }
  25. trap trap_cleanup exit term int
  26. report() {
  27. if [ "$1" = 0 ]; then
  28. echo "PASS: \"$2\""
  29. else
  30. echo "FAIL: \"$2\" Error message: \"$3\""
  31. err=1
  32. fi
  33. }
  34. check_exec_0() {
  35. if [ $? != 0 ]; then
  36. report 1 "invocation of $1 command failed"
  37. fi
  38. }
  39. find_str_or_fail() {
  40. grep -q "$1" "$2"
  41. if [ "$?" != 0 ]; then
  42. report 1 "$3" "Failed to find required string:'${1}'."
  43. else
  44. report 0 "$3"
  45. fi
  46. }
  47. # check if perf is compiled with libtraceevent support
  48. skip_no_probe_record_support() {
  49. perf check feature -q libtraceevent && return 0
  50. return 2
  51. }
  52. prepare_perf_data() {
  53. # 1s should be sufficient to catch at least some switches
  54. perf record -e sched:sched_switch -a -- sleep 1 > /dev/null 2>&1
  55. # check if perf data file got created in above step.
  56. if [ ! -e "perf.data" ]; then
  57. printf "FAIL: perf record failed to create \"perf.data\" \n"
  58. return 1
  59. fi
  60. }
  61. # check standard inkvokation with no arguments
  62. test_basic() {
  63. out="$tmpdir/perf.out"
  64. perf script report task-analyzer > "$out"
  65. check_exec_0 "perf script report task-analyzer"
  66. find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
  67. }
  68. test_ns_rename(){
  69. out="$tmpdir/perf.out"
  70. perf script report task-analyzer --ns --rename-comms-by-tids 0:random > "$out"
  71. check_exec_0 "perf script report task-analyzer --ns --rename-comms-by-tids 0:random"
  72. find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
  73. }
  74. test_ms_filtertasks_highlight(){
  75. out="$tmpdir/perf.out"
  76. perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf \
  77. > "$out"
  78. check_exec_0 "perf script report task-analyzer --ms --filter-tasks perf --highlight-tasks perf"
  79. find_str_or_fail "Comm" "$out" "${FUNCNAME[0]}"
  80. }
  81. test_extended_times_timelimit_limittasks() {
  82. out="$tmpdir/perf.out"
  83. perf script report task-analyzer --extended-times --time-limit :99999 \
  84. --limit-to-tasks perf > "$out"
  85. check_exec_0 "perf script report task-analyzer --extended-times --time-limit :99999 --limit-to-tasks perf"
  86. find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
  87. }
  88. test_summary() {
  89. out="$tmpdir/perf.out"
  90. perf script report task-analyzer --summary > "$out"
  91. check_exec_0 "perf script report task-analyzer --summary"
  92. find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
  93. }
  94. test_summaryextended() {
  95. out="$tmpdir/perf.out"
  96. perf script report task-analyzer --summary-extended > "$out"
  97. check_exec_0 "perf script report task-analyzer --summary-extended"
  98. find_str_or_fail "Inter Task Times" "$out" "${FUNCNAME[0]}"
  99. }
  100. test_summaryonly() {
  101. out="$tmpdir/perf.out"
  102. perf script report task-analyzer --summary-only > "$out"
  103. check_exec_0 "perf script report task-analyzer --summary-only"
  104. find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
  105. }
  106. test_extended_times_summary_ns() {
  107. out="$tmpdir/perf.out"
  108. perf script report task-analyzer --extended-times --summary --ns > "$out"
  109. check_exec_0 "perf script report task-analyzer --extended-times --summary --ns"
  110. find_str_or_fail "Out-Out" "$out" "${FUNCNAME[0]}"
  111. find_str_or_fail "Summary" "$out" "${FUNCNAME[0]}"
  112. }
  113. test_csv() {
  114. perf script report task-analyzer --csv csv > /dev/null
  115. check_exec_0 "perf script report task-analyzer --csv csv"
  116. find_str_or_fail "Comm;" csv "${FUNCNAME[0]}"
  117. }
  118. test_csv_extended_times() {
  119. perf script report task-analyzer --csv csv --extended-times > /dev/null
  120. check_exec_0 "perf script report task-analyzer --csv csv --extended-times"
  121. find_str_or_fail "Out-Out;" csv "${FUNCNAME[0]}"
  122. }
  123. test_csvsummary() {
  124. perf script report task-analyzer --csv-summary csvsummary > /dev/null
  125. check_exec_0 "perf script report task-analyzer --csv-summary csvsummary"
  126. find_str_or_fail "Comm;" csvsummary "${FUNCNAME[0]}"
  127. }
  128. test_csvsummary_extended() {
  129. perf script report task-analyzer --csv-summary csvsummary --summary-extended \
  130. >/dev/null
  131. check_exec_0 "perf script report task-analyzer --csv-summary csvsummary --summary-extended"
  132. find_str_or_fail "Out-Out;" csvsummary "${FUNCNAME[0]}"
  133. }
  134. skip_no_probe_record_support
  135. err=$?
  136. if [ $err -ne 0 ]; then
  137. echo "WARN: Skipping tests. No libtraceevent support"
  138. cleanup
  139. exit $err
  140. fi
  141. prepare_perf_data
  142. test_basic
  143. test_ns_rename
  144. test_ms_filtertasks_highlight
  145. test_extended_times_timelimit_limittasks
  146. test_summary
  147. test_summaryextended
  148. test_summaryonly
  149. test_extended_times_summary_ns
  150. test_csv
  151. test_csvsummary
  152. test_csv_extended_times
  153. test_csvsummary_extended
  154. cleanup
  155. exit $err