• Ravi Bangoria's avatar
    perf probe: Fix offline module name missmatch issue · 63a29613
    Ravi Bangoria authored
    Perf can add a probe on kernel module which has not been loaded yet.
    
    The current implementation finds the module name from path. But if the
    filename is different from the actual module name then perf fails to
    register a probe while loading module because of mismatch in the names.
    
    For example, samples/kobject/kobject-example.ko is loaded as
    kobject_example.
    
    Before applying patch:
    
      $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
        Added new event:
          probe:foo_show       (on foo_show in kobject-example)
    
        You can now use it in all perf tools, such as:
    
        perf record -e probe:foo_show -aR sleep 1
    
      $ cat /sys/kernel/debug/tracing/kprobe_events
        p:probe/foo_show kobject-example:foo_show
    
      $ insmod kobject-example.ko
    
      $ lsmod
        Module                  Size  Used by
        kobject_example        16384  0
    
      Generate read to /sys/kernel/kobject_example/foo while recording data
      with below command
      $ sudo ./perf record -e probe:foo_show -a
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.093 MB perf.data ]
    
      $./perf report --stdio -F overhead,comm,dso,sym
        Error:
        The perf.data.old file has no samples!
    
    After applying patch:
    
      $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
        Added new event:
          probe:foo_show       (on foo_show in kobject_example)
    
        You can now use it in all perf tools, such as:
    
        perf record -e probe:foo_show -aR sleep 1
    
      $ sudo cat /sys/kernel/debug/tracing/kprobe_events
        p:probe/foo_show kobject_example:foo_show
    
      $ insmod kobject-example.ko
    
      $ lsmod
        Module                  Size  Used by
        kobject_example        16384  0
    
      Generate read to /sys/kernel/kobject_example/foo while recording data
      with below command
      $ sudo ./perf record -e probe:foo_show -a
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.097 MB perf.data (8 samples) ]
    
      $ sudo ./perf report  --stdio -F overhead,comm,dso,sym
        ...
        # Samples: 8  of event 'probe:foo_show'
        # Event count (approx.): 8
        #
        # Overhead  Command  Shared Object      Symbol
        # ........  .......  .................  ............
        #
           100.00%  cat      [kobject_example]  [k] foo_show
    Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1461680741-12517-2-git-send-email-ravi.bangoria@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    63a29613
probe-event.c 65.9 KB