• P
    perf: Fix ctx time tracking by introducing EVENT_TIME · 3cbaa590
    Peter Zijlstra 提交于
    Currently any ctx_sched_in() call will re-start the ctx time tracking,
    this means that calls like:
    
    	ctx_sched_in(.event_type = EVENT_PINNED);
    	ctx_sched_in(.event_type = EVENT_FLEXIBLE);
    
    will have a hole in their ctx time tracking. This is likely harmless
    but can confuse things a little. By adding EVENT_TIME, we can have the
    first ctx_sched_in() (is_active: 0 -> !0) start the time and any
    further ctx_sched_in() will leave the timestamps alone.
    
    Secondly, this allows for an early disable like:
    
    	ctx_sched_out(.event_type = EVENT_TIME);
    
    which would update the ctx time (if the ctx is active) and any further
    calls to ctx_sched_out() would not further modify the ctx time.
    
    For ctx_sched_in() any 0 -> !0 transition will automatically include
    EVENT_TIME.
    
    For ctx_sched_out(), any transition that clears EVENT_ALL will
    automatically clear EVENT_TIME.
    
    These two rules ensure that under normal circumstances we need not
    bother with EVENT_TIME and get natural ctx time behaviour.
    Signed-off-by: NPeter 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: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: dvyukov@google.com
    Cc: eranian@google.com
    Cc: oleg@redhat.com
    Cc: panand@redhat.com
    Cc: sasha.levin@oracle.com
    Cc: vince@deater.net
    Link: http://lkml.kernel.org/r/20160224174948.100446561@infradead.orgSigned-off-by: NIngo Molnar <mingo@kernel.org>
    3cbaa590
core.c 222.1 KB