• Leonardo Bras's avatar
    trace,smp: Add tracepoints for scheduling remotelly called functions · bf5a8c26
    Leonardo Bras authored
    Add a tracepoint for when a CSD is queued to a remote CPU's
    call_single_queue. This allows finding exactly which CPU queued a given CSD
    when looking at a csd_function_{entry,exit} event, and also enables us to
    accurately measure IPI delivery time with e.g. a synthetic event:
    
      $ echo 'hist:keys=cpu,csd.hex:ts=common_timestamp.usecs' >\
          /sys/kernel/tracing/events/smp/csd_queue_cpu/trigger
      $ echo 'csd_latency unsigned int dst_cpu; unsigned long csd; u64 time' >\
          /sys/kernel/tracing/synthetic_events
      $ echo \
      'hist:keys=common_cpu,csd.hex:'\
      'time=common_timestamp.usecs-$ts:'\
      'onmatch(smp.csd_queue_cpu).trace(csd_latency,common_cpu,csd,$time)' >\
          /sys/kernel/tracing/events/smp/csd_function_entry/trigger
    
      $ trace-cmd record -e 'synthetic:csd_latency' hackbench
      $ trace-cmd report
      <...>-467   [001]    21.824263: csd_queue_cpu:        cpu=0 callsite=try_to_wake_up+0x2ea func=sched_ttwu_pending csd=0xffff8880076148b8
      <...>-467   [001]    21.824280: ipi_send_cpu:         cpu=0 callsite=try_to_wake_up+0x2ea callback=generic_smp_call_function_single_interrupt+0x0
      <...>-489   [000]    21.824299: csd_function_entry:   func=sched_ttwu_pending csd=0xffff8880076148b8
      <...>-489   [000]    21.824320: csd_latency:          dst_cpu=0, csd=18446612682193848504, time=36
    Suggested-by: default avatarValentin Schneider <vschneid@redhat.com>
    Signed-off-by: default avatarLeonardo Bras <leobras@redhat.com>
    Tested-and-reviewed-by: default avatarValentin Schneider <vschneid@redhat.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20230615065944.188876-7-leobras@redhat.com
    bf5a8c26
csd.h 1.52 KB