• Peter Zijlstra's avatar
    perf/core: Optimize perf_install_in_event() · db0503e4
    Peter Zijlstra authored
    Andi reported that when creating a lot of events, a lot of time is
    spent in IPIs and asked if it would be possible to elide some of that.
    
    Now when, as for example the perf-tool always does, events are created
    disabled, then these events will not need to be scheduled when added
    to the context (they're still disable) and therefore the IPI is not
    required -- except for the very first event, that will need to set
    ctx->is_active.
    
    ( It might be possible to set ctx->is_active remotely for cpu_ctx, but
      we really need the IPI for task_ctx, so lets not make that
      distinction. )
    
    Also use __perf_effective_state() since group events depend on the
    state of the leader, if the leader is OFF, the whole group is OFF.
    
    So when sibling events are created enabled (XXX check tool) then we
    only need a single IPI to create and enable the whole group (+ that
    initial IPI to initialize the context).
    Suggested-by: default avatarAndi Kleen <andi@firstfloor.org>
    Reported-by: default avatarAndi Kleen <andi@firstfloor.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: acme@kernel.org
    Cc: kan.liang@linux.intel.com
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    db0503e4
core.c 294 KB