Skip to content

Commit

Permalink
RISC-V: paravirt: pvqspinlock: Add trace point for pv_kick/wait
Browse files Browse the repository at this point in the history
Add trace point for pv_kick&wait, here is the output:

ls /sys/kernel/debug/tracing/events/paravirt/
 enable   filter   pv_kick  pv_wait

cat /sys/kernel/debug/tracing/trace
 entries-in-buffer/entries-written: 33927/33927   #P:12

                                _-----=> irqs-off/BH-disabled
                               / _----=> need-resched
                              | / _---=> hardirq/softirq
                              || / _--=> preempt-depth
                              ||| / _-=> migrate-disable
                              |||| /     delay
           TASK-PID     CPU#  |||||  TIMESTAMP  FUNCTION
              | |         |   |||||     |         |
             sh-100     [001] d..2.    28.312294: pv_wait: cpu 1 out of wfi
         <idle>-0       [000] d.h4.    28.322030: pv_kick: cpu 0 kick target cpu 1
             sh-100     [001] d..2.    30.982631: pv_wait: cpu 1 out of wfi
         <idle>-0       [000] d.h4.    30.993289: pv_kick: cpu 0 kick target cpu 1
             sh-100     [002] d..2.    44.987573: pv_wait: cpu 2 out of wfi
         <idle>-0       [000] d.h4.    44.989000: pv_kick: cpu 0 kick target cpu 2
         <idle>-0       [003] d.s3.    51.593978: pv_kick: cpu 3 kick target cpu 4
      rcu_sched-15      [004] d..2.    51.595192: pv_wait: cpu 4 out of wfi
lock_torture_wr-115     [004] ...2.    52.656482: pv_kick: cpu 4 kick target cpu 2
lock_torture_wr-113     [002] d..2.    52.659146: pv_wait: cpu 2 out of wfi
lock_torture_wr-114     [008] d..2.    52.659507: pv_wait: cpu 8 out of wfi
lock_torture_wr-114     [008] d..2.    52.663503: pv_wait: cpu 8 out of wfi
lock_torture_wr-113     [002] ...2.    52.666128: pv_kick: cpu 2 kick target cpu 8
lock_torture_wr-114     [008] d..2.    52.667261: pv_wait: cpu 8 out of wfi
lock_torture_wr-114     [009] .n.2.    53.141515: pv_kick: cpu 9 kick target cpu 11
lock_torture_wr-113     [002] d..2.    53.143339: pv_wait: cpu 2 out of wfi
lock_torture_wr-116     [007] d..2.    53.143412: pv_wait: cpu 7 out of wfi
lock_torture_wr-118     [000] d..2.    53.143457: pv_wait: cpu 0 out of wfi
lock_torture_wr-115     [008] d..2.    53.143481: pv_wait: cpu 8 out of wfi
lock_torture_wr-117     [011] d..2.    53.143522: pv_wait: cpu 11 out of wfi
lock_torture_wr-117     [011] ...2.    53.143987: pv_kick: cpu 11 kick target cpu 8
lock_torture_wr-115     [008] ...2.    53.144269: pv_kick: cpu 8 kick target cpu 7

Reviewed-by: Leonardo Bras <leobras@redhat.com>
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Signed-off-by: Björn Töpel <bjorn@rivosinc.com>
  • Loading branch information
guoren83 authored and Björn Töpel committed Dec 25, 2023
1 parent 3498aa3 commit 1134fc1
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 0 deletions.
8 changes: 8 additions & 0 deletions arch/riscv/kernel/qspinlock_paravirt.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,16 @@
#include <asm/qspinlock_paravirt.h>
#include <asm/sbi.h>

#define CREATE_TRACE_POINTS
#include "trace_events_filter_paravirt.h"

void pv_kick(int cpu)
{
sbi_ecall(SBI_EXT_PVLOCK, SBI_EXT_PVLOCK_KICK_CPU,
cpuid_to_hartid_map(cpu), 0, 0, 0, 0, 0);

trace_pv_kick(smp_processor_id(), cpu);

return;
}

Expand All @@ -28,6 +34,8 @@ void pv_wait(u8 *ptr, u8 val)
goto out;

wait_for_interrupt();

trace_pv_wait(smp_processor_id());
out:
local_irq_restore(flags);
}
Expand Down
60 changes: 60 additions & 0 deletions arch/riscv/kernel/trace_events_filter_paravirt.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c), 2023 Alibaba Cloud
* Authors:
* Guo Ren <guoren@linux.alibaba.com>
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM paravirt

#if !defined(_TRACE_PARAVIRT_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_PARAVIRT_H

#include <linux/tracepoint.h>

TRACE_EVENT(pv_kick,
TP_PROTO(int cpu, int target),
TP_ARGS(cpu, target),

TP_STRUCT__entry(
__field(int, cpu)
__field(int, target)
),

TP_fast_assign(
__entry->cpu = cpu;
__entry->target = target;
),

TP_printk("cpu %d kick target cpu %d",
__entry->cpu,
__entry->target
)
);

TRACE_EVENT(pv_wait,
TP_PROTO(int cpu),
TP_ARGS(cpu),

TP_STRUCT__entry(
__field(int, cpu)
),

TP_fast_assign(
__entry->cpu = cpu;
),

TP_printk("cpu %d out of wfi",
__entry->cpu
)
);

#endif /* _TRACE_PARAVIRT_H || TRACE_HEADER_MULTI_READ */

#undef TRACE_INCLUDE_PATH
#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_PATH ../../../arch/riscv/kernel/
#define TRACE_INCLUDE_FILE trace_events_filter_paravirt

/* This part must be outside protection */
#include <trace/define_trace.h>

0 comments on commit 1134fc1

Please sign in to comment.