1. 25 Jun, 2024 4 commits
    • Chaitanya S Prakash's avatar
      perf test: Check output of the probe ... --funcs command · abc0f0c4
      Chaitanya S Prakash authored
      Test "perf probe of function from different CU" only checks if the perf
      command has failed and doesn't test the --funcs output. In the issue
      reported in the previous commit, the garbage output of the --funcs
      command was being ignored by the test when it could have been caught.
      
      The script first makes use of --funcs option with the perf probe command
      to check if the function "foo" exists in the testfile before adding a
      probe to it in the next command. The output of probe...--funcs command
      is redirected to stdout, therefore, add '| grep "foo"' to validate the
      result.
      Signed-off-by: default avatarChaitanya S Prakash <chaitanyas.prakash@arm.com>
      Reviewed-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
      Cc: anshuman.khandual@arm.com
      Cc: james.clark@arm.com
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240601125946.1741414-11-ChaitanyaS.Prakash@arm.com
      abc0f0c4
    • Athira Rajeev's avatar
      tools/perf: Fix parallel-perf python script to replace new python syntax ":=" usage · 7d49ced8
      Athira Rajeev authored
      perf test "perf script tests" fails as below in systems
      with python 3.6
      
      	File "/home/athira/linux/tools/perf/tests/shell/../../scripts/python/parallel-perf.py", line 442
      	if line := p.stdout.readline():
                   ^
      	SyntaxError: invalid syntax
      	--- Cleaning up ---
      	---- end(-1) ----
      	92: perf script tests: FAILED!
      
      This happens because ":=" is a new syntax that assigns values
      to variables as part of a larger expression. This is introduced
      from python 3.8 and hence fails in setup with python 3.6
      Address this by splitting the large expression and check the
      value in two steps:
      Previous line: if line := p.stdout.readline():
      Current change:
      	line = p.stdout.readline()
      	if line:
      
      With patch
      
      	./perf test "perf script tests"
      	 93: perf script tests:  Ok
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: akanksha@linux.ibm.com
      Cc: kjain@linux.ibm.com
      Cc: maddy@linux.ibm.com
      Cc: disgoel@linux.vnet.ibm.com
      Cc: linuxppc-dev@lists.ozlabs.org
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240623064850.83720-3-atrajeev@linux.vnet.ibm.com
      7d49ced8
    • Athira Rajeev's avatar
      tools/perf: Use is_perf_pid_map_name helper function to check dso's of pattern /tmp/perf-%d.map · b9241f15
      Athira Rajeev authored
      commit 80d496be ("perf report: Add support for profiling JIT
      generated code") added support for profiling JIT generated code.
      This patch handles dso's of form "/tmp/perf-$PID.map".
      
      Some of the references doesn't check exactly for same pattern.
      some uses "if (!strncmp(dso_name, "/tmp/perf-", 10))". Fix
      this by using helper function perf_pid_map_tid and
      is_perf_pid_map_name which looks for proper pattern of
      form: "/tmp/perf-$PID.map" for these checks.
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: akanksha@linux.ibm.com
      Cc: kjain@linux.ibm.com
      Cc: maddy@linux.ibm.com
      Cc: disgoel@linux.vnet.ibm.com
      Cc: linuxppc-dev@lists.ozlabs.org
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240623064850.83720-2-atrajeev@linux.vnet.ibm.com
      b9241f15
    • Athira Rajeev's avatar
      tools/perf: Fix the string match for "/tmp/perf-$PID.map" files in dso__load · b0979f00
      Athira Rajeev authored
      Perf test for perf probe of function from different CU fails
      as below:
      
      	./perf test -vv "test perf probe of function from different CU"
      	116: test perf probe of function from different CU:
      	--- start ---
      	test child forked, pid 2679
      	Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.Msa7iy89bx/testfile
      	  Error: Failed to add events.
      	--- Cleaning up ---
      	"foo" does not hit any event.
      	  Error: Failed to delete events.
      	---- end(-1) ----
      	116: test perf probe of function from different CU                   : FAILED!
      
      The test does below to probe function "foo" :
      
      	# gcc -g -Og -flto -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.c
      	-o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
      	# gcc -g -Og -c /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.c
      	-o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
      	# gcc -g -Og -o /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
      	/tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-foo.o
      	/tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile-main.o
      
      	# ./perf probe -x /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile foo
      	Failed to find symbol foo in /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7/testfile
      	   Error: Failed to add events.
      
      Perf probe fails to find symbol foo in the executable placed in
      /tmp/perf-uprobe-different-cu-sh.XniNxNEVT7
      
      Simple reproduce:
      
       # mktemp -d /tmp/perf-checkXXXXXXXXXX
         /tmp/perf-checkcWpuLRQI8j
      
       # gcc -g -o test test.c
       # cp test /tmp/perf-checkcWpuLRQI8j/
       # nm /tmp/perf-checkcWpuLRQI8j/test | grep foo
         00000000100006bc T foo
      
       # ./perf probe -x /tmp/perf-checkcWpuLRQI8j/test foo
         Failed to find symbol foo in /tmp/perf-checkcWpuLRQI8j/test
            Error: Failed to add events.
      
      But it works with any files like /tmp/perf/test. Only for
      patterns with "/tmp/perf-", this fails.
      
      Further debugging, commit 80d496be ("perf report: Add support
      for profiling JIT generated code") added support for profiling JIT
      generated code. This patch handles dso's of form
      "/tmp/perf-$PID.map" .
      
      The check used "if (strncmp(self->name, "/tmp/perf-", 10) == 0)"
      to match "/tmp/perf-$PID.map". With this commit, any dso in
      /tmp/perf- folder will be considered separately for processing
      (not only JIT created map files ). Fix this by changing the
      string pattern to check for "/tmp/perf-%d.map". Add a helper
      function is_perf_pid_map_name to do this check. In "struct dso",
      dso->long_name holds the long name of the dso file. Since the
      /tmp/perf-$PID.map check uses the complete name, use dso___long_name for
      the string name.
      
      With the fix,
      	# ./perf test "test perf probe of function from different CU"
      	117: test perf probe of function from different CU                   : Ok
      
      Fixes: 56cbeacf ("perf probe: Add test for regression introduced by switch to die_get_decl_file()")
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.com>
      Reviewed-by: default avatarChaitanya S Prakash <chaitanyas.prakash@arm.com>
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: akanksha@linux.ibm.com
      Cc: kjain@linux.ibm.com
      Cc: maddy@linux.ibm.com
      Cc: disgoel@linux.vnet.ibm.com
      Cc: linuxppc-dev@lists.ozlabs.org
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240623064850.83720-1-atrajeev@linux.vnet.ibm.com
      b0979f00
  2. 24 Jun, 2024 1 commit
  3. 21 Jun, 2024 4 commits
  4. 20 Jun, 2024 31 commits