1. 25 Jun, 2024 6 commits
    • Adrian Hunter's avatar
      perf tests: Add APX and other new instructions to x86 instruction decoder test · fcd094e5
      Adrian Hunter authored
      Add samples of APX and other new instructions to the 'x86 instruction
      decoder - new instructions' test.
      
      Note the test is only available if the perf tool has been built with
      EXTRA_TESTS=1.
      
      Example:
      
        $ make EXTRA_TESTS=1 -C tools/perf
        $ tools/perf/perf test -F -v 'new ins' |& grep -i 'jmpabs\|popp\|pushp'
        Decoded ok: d5 00 a1 ef cd ab 90 78 56 34 12    jmpabs $0x1234567890abcdef
        Decoded ok: d5 08 53                    pushp  %rbx
        Decoded ok: d5 18 50                    pushp  %r16
        Decoded ok: d5 19 57                    pushp  %r31
        Decoded ok: d5 19 5f                    popp   %r31
        Decoded ok: d5 18 58                    popp   %r16
        Decoded ok: d5 08 5b                    popp   %rbx
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Chang S. Bae <chang.seok.bae@intel.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Nikolay Borisov <nik.borisov@suse.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: x86@kernel.org
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240502105853.5338-11-adrian.hunter@intel.com
      fcd094e5
    • Adrian Hunter's avatar
      perf intel pt: Add new JMPABS instruction to the Intel PT instruction decoder · a44abd2c
      Adrian Hunter authored
      JMPABS is 64-bit absolute direct jump instruction, encoded with a mandatory
      REX2 prefix. JMPABS is designed to be used in the procedure linkage table
      (PLT) to replace indirect jumps, because it has better performance. In that
      case the jump target will be amended at run time. To enable Intel PT to
      follow the code, a TIP packet is always emitted when JMPABS is traced under
      Intel PT.
      
      Refer to the Intel Advanced Performance Extensions (Intel APX) Architecture
      Specification for details.
      
      Decode JMPABS as an indirect jump, because it has an associated TIP packet
      the same as an indirect jump and the control flow should follow the TIP
      packet payload, and not assume it is the same as the on-file object code
      JMPABS target address.
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Chang S. Bae <chang.seok.bae@intel.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: Nikolay Borisov <nik.borisov@suse.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: x86@kernel.org
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/r/20240502105853.5338-10-adrian.hunter@intel.com
      a44abd2c
    • 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 29 commits