Skip to contentSkip to conversation

perf test shell: Add test using vfs_getname + 'perf trace'

tip:perf/core tip-bot for Arnaldo Carvalho de Melo 1 participant 1 message Aug 14, 2017 perf events

lore
Share & tools
lore
#0 lore raw
Commit-ID:  e498f336d66f804f87787b2ec31821e349a37b7b
Gitweb:     http://git.kernel.org/tip/e498f336d66f804f87787b2ec31821e349a37b7b
Author:     Arnaldo Carvalho de Melo <[email protected]>
AuthorDate: Fri, 4 Aug 2017 17:06:26 -0300
Committer:  Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Fri, 11 Aug 2017 16:06:30 -0300

perf test shell: Add test using vfs_getname + 'perf trace'

Uses the 'perf test shell' library to add probe:vfs_getname to the system then use it with 'perf trace' using 'touch' to write to a temp file, then checks that that was captured by the vfs_getname was used by 'perf trace', that already handles "probe:vfs_getname" if present, and used in the "open" syscall "filename" argument beautifier.

Testing it:

  # perf test "trace + vfs_getname"
  61: Check open filename arg using perf trace + vfs_getname: Ok
  #
  # perf test -v "trace + vfs_getname"
  61: Check open filename arg using perf trace + vfs_getname:
  --- start ---
  test child forked, pid 30846
  Added new event:
    probe:vfs_getname    (on getname_flags:72 with pathname=result->name:string)

You can now use it in all perf tools, such as:

perf record -e probe:vfs_getname -aR sleep 1

       2.237 ( 0.012 ms): touch/30855 open(filename: /tmp/temporary_file.kmoWQ, flags: CREAT|NOCTTY|NONBLOCK|WRONLY, mode: IRUGO|IWUGO) = 3

test child finished with 0
---- end ----
Check open filename arg using perf trace + vfs_getname: Ok #

---
 tools/perf/tests/shell/trace+probe_vfs_getname.sh | 31 +++++++++++++++++++++++
 1 file changed, 31 insertions(+)
tools/perf/tests/shell/trace+probe_vfs_getname.sh new file +31 -0
new file mode 100755
index 0000000..d0fba0c
@@ -0,0 +1,31 @@
+# Check open filename arg using perf trace + vfs_getname
+
+# Uses the 'perf test shell' library to add probe:vfs_getname to the system
+# then use it with 'perf trace' using 'touch' to write to a temp file, then
+# checks that that was captured by the vfs_getname was used by 'perf trace',
+# that already handles "probe:vfs_getname" if present, and used in the
+# "open" syscall "filename" argument beautifier.
+
+# Arnaldo Carvalho de Melo <[email protected]>, 2017
+
+. $(dirname $0)/lib/probe_vfs_getname.sh
+
+file=$(mktemp /tmp/temporary_file.XXXXX)
+
+trace_open_vfs_getname() {
+	perf trace -e open touch $file 2>&1 | \
+	egrep " +[0-9]+\.[0-9]+ +\( +[0-9]+\.[0-9]+ ms\): +touch\/[0-9]+ open\(filename: +${file}, +flags: CREAT\|NOCTTY\|NONBLOCK\|WRONLY, +mode: +IRUGO\|IWUGO\) += +[0-9]+$"
+}
+
+
+add_probe_vfs_getname || skip_if_no_debuginfo
+err=$?
+if [ $err -ne 0 ] ; then
+	exit $err
+fi
+
+trace_open_vfs_getname
+err=$?
+rm -f ${file}
+cleanup_probe_vfs_getname
+exit $err