31 Mar, 2011

1 commit


07 Aug, 2010

1 commit

  • …/git/tip/linux-2.6-tip

    * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (27 commits)
    sched: Use correct macro to display sched_child_runs_first in /proc/sched_debug
    sched: No need for bootmem special cases
    sched: Revert nohz_ratelimit() for now
    sched: Reduce update_group_power() calls
    sched: Update rq->clock for nohz balanced cpus
    sched: Fix spelling of sibling
    sched, cpuset: Drop __cpuexit from cpu hotplug callbacks
    sched: Fix the racy usage of thread_group_cputimer() in fastpath_timer_check()
    sched: run_posix_cpu_timers: Don't check ->exit_state, use lock_task_sighand()
    sched: thread_group_cputime: Simplify, document the "alive" check
    sched: Remove the obsolete exit_state/signal hacks
    sched: task_tick_rt: Remove the obsolete ->signal != NULL check
    sched: __sched_setscheduler: Read the RLIMIT_RTPRIO value lockless
    sched: Fix comments to make them DocBook happy
    sched: Fix fix_small_capacity
    powerpc: Exclude arch_sd_sibiling_asym_packing() on UP
    powerpc: Enable asymmetric SMT scheduling on POWER7
    sched: Add asymmetric group packing option for sibling domain
    sched: Fix capacity calculations for SMT4
    sched: Change nohz idle load balancing logic to push model
    ...

    Linus Torvalds
     

09 Jun, 2010

1 commit

  • For people who otherwise get to write: cpu_clock(smp_processor_id()),
    there is now: local_clock().

    Also, as per suggestion from Andrew, provide some documentation on
    the various clock interfaces, and minimize the unsigned long long vs
    u64 mess.

    Signed-off-by: Peter Zijlstra
    Cc: Andrew Morton
    Cc: Linus Torvalds
    Cc: Jens Axboe
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

04 Jun, 2010

1 commit

  • The ftrace_preempt_disable/enable functions were to address a
    recursive race caused by the function tracer. The function tracer
    traces all functions which makes it easily susceptible to recursion.
    One area was preempt_enable(). This would call the scheduler and
    the schedulre would call the function tracer and loop.
    (So was it thought).

    The ftrace_preempt_disable/enable was made to protect against recursion
    inside the scheduler by storing the NEED_RESCHED flag. If it was
    set before the ftrace_preempt_disable() it would not call schedule
    on ftrace_preempt_enable(), thinking that if it was set before then
    it would have already scheduled unless it was already in the scheduler.

    This worked fine except in the case of SMP, where another task would set
    the NEED_RESCHED flag for a task on another CPU, and then kick off an
    IPI to trigger it. This could cause the NEED_RESCHED to be saved at
    ftrace_preempt_disable() but the IPI to arrive in the the preempt
    disabled section. The ftrace_preempt_enable() would not call the scheduler
    because the flag was already set before entring the section.

    This bug would cause a missed preemption check and cause lower latencies.

    Investigating further, I found that the recusion caused by the function
    tracer was not due to schedule(), but due to preempt_schedule(). Now
    that preempt_schedule is completely annotated with notrace, the recusion
    no longer is an issue.

    Reported-by: Thomas Gleixner
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

30 Mar, 2010

1 commit

  • # echo 1 > events/enable
    # echo global > trace_clock

    ------------[ cut here ]------------
    WARNING: at kernel/lockdep.c:3162 check_flags+0xb2/0x190()
    ...
    ---[ end trace 3f86734a89416623 ]---
    possible reason: unannotated irqs-on.
    ...

    There's no reason to use the raw_local_irq_save() in trace_clock_global.
    The local_irq_save() version is fine, and does not cause the bug in lockdep.

    Acked-by: Peter Zijlstra
    Signed-off-by: Li Zefan
    LKML-Reference:
    Signed-off-by: Steven Rostedt

    Li Zefan
     

01 Mar, 2010

1 commit

  • trace_clock.c includes spinlock.h, which ends up including
    asm/system.h, which in turn includes linux/irqflags.h in x86.

    So the definition of raw_local_irq_save is luckily covered there,
    but this is not the case in parisc:

    tip/kernel/trace/trace_clock.c:86: error: implicit declaration of function 'raw_local_irq_save'
    tip/kernel/trace/trace_clock.c:112: error: implicit declaration of function 'raw_local_irq_restore'

    We need to include linux/irqflags.h directly from trace_clock.c
    to avoid such build error.

    Signed-off-by: Frederic Weisbecker
    Cc: Steven Rostedt
    Cc: Robert Richter
    Cc: Peter Zijlstra
    Signed-off-by: Ingo Molnar

    Frederic Weisbecker
     

15 Dec, 2009

3 commits


12 Nov, 2009

1 commit

  • Disabling interrupts in trace_clock_local takes quite a performance
    hit to the recording of traces. Using perf top we see:

    ------------------------------------------------------------------------------
    PerfTop: 244 irqs/sec kernel:100.0% [1000Hz cpu-clock-msecs], (all, 4 CPUs)
    ------------------------------------------------------------------------------

    samples pcnt kernel function
    _______ _____ _______________

    2842.00 - 40.4% : trace_clock_local
    1043.00 - 14.8% : rb_reserve_next_event
    784.00 - 11.1% : ring_buffer_lock_reserve
    600.00 - 8.5% : __rb_reserve_next
    579.00 - 8.2% : rb_end_commit
    440.00 - 6.3% : ring_buffer_unlock_commit
    290.00 - 4.1% : ring_buffer_producer_thread [ring_buffer_benchmark]
    155.00 - 2.2% : debug_smp_processor_id
    117.00 - 1.7% : trace_recursive_unlock
    103.00 - 1.5% : ring_buffer_event_data
    28.00 - 0.4% : do_gettimeofday
    22.00 - 0.3% : _spin_unlock_irq
    14.00 - 0.2% : native_read_tsc
    11.00 - 0.2% : getnstimeofday

    Where trace_clock_local is 40% of the tracing, and the time for recording
    a trace according to ring_buffer_benchmark is 210ns. After converting
    the interrupts to preemption disabling we have from perf top:

    ------------------------------------------------------------------------------
    PerfTop: 1084 irqs/sec kernel:99.9% [1000Hz cpu-clock-msecs], (all, 4 CPUs)
    ------------------------------------------------------------------------------

    samples pcnt kernel function
    _______ _____ _______________

    1277.00 - 16.8% : native_read_tsc
    1148.00 - 15.1% : rb_reserve_next_event
    896.00 - 11.8% : ring_buffer_lock_reserve
    688.00 - 9.1% : __rb_reserve_next
    664.00 - 8.8% : rb_end_commit
    563.00 - 7.4% : ring_buffer_unlock_commit
    508.00 - 6.7% : _spin_unlock_irq
    365.00 - 4.8% : debug_smp_processor_id
    321.00 - 4.2% : trace_clock_local
    303.00 - 4.0% : ring_buffer_producer_thread [ring_buffer_benchmark]
    273.00 - 3.6% : native_sched_clock
    122.00 - 1.6% : trace_recursive_unlock
    113.00 - 1.5% : sched_clock
    101.00 - 1.3% : ring_buffer_event_data
    53.00 - 0.7% : tick_nohz_stop_sched_tick

    Where trace_clock_local drops from 40% to only taking 4% of the total time.
    The trace time also goes from 210ns down to 179ns (31ns).

    I talked with Peter Zijlstra about the impact that sched_clock may have
    without having interrupts disabled, and he told me that if a timer interrupt
    comes in, sched_clock may report a wrong time.

    Balancing a seldom incorrect timestamp with a 15% performance boost, I'll
    take the performance boost.

    Acked-by: Peter Zijlstra
    Signed-off-by: Steven Rostedt

    Steven Rostedt
     

16 Sep, 2009

1 commit


23 Mar, 2009

1 commit

  • Impact: cleanup.

    This patch fixes the following sparse warnings:

    kernel/trace/trace.c:385:9: warning: symbol 'trace_seq_to_buffer' was
    not declared. Should it be static?

    kernel/trace/trace_clock.c:29:13: warning: symbol 'trace_clock_local'
    was not declared. Should it be static?

    kernel/trace/trace_clock.c:54:13: warning: symbol 'trace_clock' was not
    declared. Should it be static?

    kernel/trace/trace_clock.c:74:13: warning: symbol 'trace_clock_global'
    was not declared. Should it be static?

    Signed-off-by: Dmitri Vorobiev
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Dmitri Vorobiev
     

11 Mar, 2009

1 commit

  • Using the function_graph tracer in recent kernels generates a spew of
    preemption BUGs. Fix this by not requiring trace_clock_local() users
    to disable preemption themselves.

    Signed-off-by: Peter Zijlstra
    Cc: Steven Rostedt
    Cc: Frederic Weisbecker
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

27 Feb, 2009

1 commit

  • Impact: implement new tracing timestamp APIs

    Add three trace clock variants, with differing scalability/precision
    tradeoffs:

    - local: CPU-local trace clock
    - medium: scalable global clock with some jitter
    - global: globally monotonic, serialized clock

    Make the ring-buffer use the local trace clock internally.

    Acked-by: Peter Zijlstra
    Acked-by: Steven Rostedt
    Signed-off-by: Ingo Molnar

    Ingo Molnar