lkml.org 
[lkml]   [2009]   [May]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/5] perf_counter: optimize perf_counter_task_tick()
    perf_counter_task_tick() does way too much work to find out there's nothing to
    do. Provide an easy short-circuit for the normal case where there are no
    counters on the system.

    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    ---
    kernel/perf_counter.c | 13 +++++++++++--
    1 file changed, 11 insertions(+), 2 deletions(-)

    Index: linux-2.6/kernel/perf_counter.c
    ===================================================================
    --- linux-2.6.orig/kernel/perf_counter.c
    +++ linux-2.6/kernel/perf_counter.c
    @@ -39,6 +39,7 @@ int perf_max_counters __read_mostly = 1;
    static int perf_reserved_percpu __read_mostly;
    static int perf_overcommit __read_mostly = 1;

    +static atomic_t nr_counters __read_mostly;
    static atomic_t nr_mmap_tracking __read_mostly;
    static atomic_t nr_munmap_tracking __read_mostly;
    static atomic_t nr_comm_tracking __read_mostly;
    @@ -1076,8 +1077,14 @@ static void rotate_ctx(struct perf_count

    void perf_counter_task_tick(struct task_struct *curr, int cpu)
    {
    - struct perf_cpu_context *cpuctx = &per_cpu(perf_cpu_context, cpu);
    - struct perf_counter_context *ctx = &curr->perf_counter_ctx;
    + struct perf_cpu_context *cpuctx;
    + struct perf_counter_context *ctx;
    +
    + if (!atomic_read(&nr_counters))
    + return;
    +
    + cpuctx = &per_cpu(perf_cpu_context, cpu);
    + ctx = &curr->perf_counter_ctx;

    perf_counter_cpu_sched_out(cpuctx);
    perf_counter_task_sched_out(curr, cpu);
    @@ -1197,6 +1204,7 @@ static void free_counter(struct perf_cou
    {
    perf_pending_sync(counter);

    + atomic_dec(&nr_counters);
    if (counter->hw_event.mmap)
    atomic_dec(&nr_mmap_tracking);
    if (counter->hw_event.munmap)
    @@ -2861,6 +2869,7 @@ done:

    counter->pmu = pmu;

    + atomic_inc(&nr_counters);
    if (counter->hw_event.mmap)
    atomic_inc(&nr_mmap_tracking);
    if (counter->hw_event.munmap)
    --



    \
     
     \ /
      Last update: 2009-05-08 20:23    [W:0.056 / U:118.152 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site