powerpc/mm: Add trace point for tracking hash pte fault
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Tue, 14 Apr 2015 07:35:57 +0000 (13:05 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 10 Jun 2015 04:06:29 +0000 (14:06 +1000)
This enables us to understand how many hash fault we are taking
when running benchmarks.

For ex:
-bash-4.2# ./perf stat -e  powerpc:hash_fault -e page-faults /tmp/ebizzy.ppc64 -S 30  -P -n 1000
...

 Performance counter stats for '/tmp/ebizzy.ppc64 -S 30 -P -n 1000':

       1,10,04,075      powerpc:hash_fault
       1,10,03,429      page-faults

      30.865978991 seconds time elapsed

NOTE:
The impact of the tracepoint was not noticeable when running test. It was
within the run-time variance of the test. For ex:

without-patch:
--------------

 Performance counter stats for './a.out 3000 300':

       643      page-faults               #    0.089 M/sec
  7.236562      task-clock (msec)         #    0.928 CPUs utilized
 2,179,213      stalled-cycles-frontend   #    0.00% frontend cycles idle
17,174,367      stalled-cycles-backend    #    0.00% backend  cycles idle
 0      context-switches          #    0.000 K/sec

       0.007794658 seconds time elapsed

And with-patch:
---------------

 Performance counter stats for './a.out 3000 300':

       643      page-faults               #    0.089 M/sec
  7.233746      task-clock (msec)         #    0.921 CPUs utilized
 0      context-switches          #    0.000 K/sec

       0.007854876 seconds time elapsed

 Performance counter stats for './a.out 3000 300':

       643      page-faults               #    0.087 M/sec
       649      powerpc:hash_fault        #    0.087 M/sec
  7.430376      task-clock (msec)         #    0.938 CPUs utilized
 2,347,174      stalled-cycles-frontend   #    0.00% frontend cycles idle
17,524,282      stalled-cycles-backend    #    0.00% backend  cycles idle
 0      context-switches          #    0.000 K/sec

       0.007920284 seconds time elapsed

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/trace.h
arch/powerpc/mm/hash_utils_64.c

index c15da6073cb8b8e177c715fe81eb76081432d62e..8e86b48d03699047dda0f493a3955c8c05e34909 100644 (file)
@@ -144,6 +144,26 @@ TRACE_EVENT_FN(opal_exit,
 );
 #endif
 
+TRACE_EVENT(hash_fault,
+
+           TP_PROTO(unsigned long addr, unsigned long access, unsigned long trap),
+           TP_ARGS(addr, access, trap),
+           TP_STRUCT__entry(
+                   __field(unsigned long, addr)
+                   __field(unsigned long, access)
+                   __field(unsigned long, trap)
+                   ),
+
+           TP_fast_assign(
+                   __entry->addr = addr;
+                   __entry->access = access;
+                   __entry->trap = trap;
+                   ),
+
+           TP_printk("hash fault with addr 0x%lx and access = 0x%lx trap = 0x%lx",
+                     __entry->addr, __entry->access, __entry->trap)
+);
+
 #endif /* _TRACE_POWERPC_H */
 
 #undef TRACE_INCLUDE_PATH
index a04ca922f0db5a6946bd4f07d154500b79e71410..5ec987f65b2c95c4328fdb7369fd4c2d597284ba 100644 (file)
@@ -57,6 +57,7 @@
 #include <asm/fadump.h>
 #include <asm/firmware.h>
 #include <asm/tm.h>
+#include <asm/trace.h>
 
 #ifdef DEBUG
 #define DBG(fmt...) udbg_printf(fmt)
@@ -1004,6 +1005,7 @@ int hash_page_mm(struct mm_struct *mm, unsigned long ea,
 
        DBG_LOW("hash_page(ea=%016lx, access=%lx, trap=%lx\n",
                ea, access, trap);
+       trace_hash_fault(ea, access, trap);
 
        /* Get region & vsid */
        switch (REGION_ID(ea)) {