lkml.org 
[lkml]   [2015]   [Dec]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/locking/core 2/3] locking/pvqspinlock: Enable slowpath locking count tracking
    Date
    This patch enables the tracking of the number of slowpath locking
    operations performed. This can be used to compare against the number
    of lock stealing operations to see what percentage of locks are stolen
    versus acquired via the regular slowpath.

    Signed-off-by: Waiman Long <Waiman.Long@hpe.com>
    ---
    kernel/locking/qspinlock_paravirt.h | 5 +++++
    kernel/locking/qspinlock_stat.h | 3 +++
    2 files changed, 8 insertions(+), 0 deletions(-)

    diff --git a/kernel/locking/qspinlock_paravirt.h b/kernel/locking/qspinlock_paravirt.h
    index 87bb235..72cec9e 100644
    --- a/kernel/locking/qspinlock_paravirt.h
    +++ b/kernel/locking/qspinlock_paravirt.h
    @@ -398,6 +398,11 @@ pv_wait_head_or_lock(struct qspinlock *lock, struct mcs_spinlock *node)
    if (READ_ONCE(pn->state) == vcpu_hashed)
    lp = (struct qspinlock **)1;

    + /*
    + * Tracking # of slowpath locking operations
    + */
    + qstat_inc(qstat_pv_lock_slowpath, true);
    +
    for (;; waitcnt++) {
    /*
    * Set correct vCPU state to be used by queue node wait-early
    diff --git a/kernel/locking/qspinlock_stat.h b/kernel/locking/qspinlock_stat.h
    index 640dcec..283a615 100644
    --- a/kernel/locking/qspinlock_stat.h
    +++ b/kernel/locking/qspinlock_stat.h
    @@ -22,6 +22,7 @@
    * pv_kick_wake - # of vCPU kicks used for computing pv_latency_wake
    * pv_latency_kick - average latency (ns) of vCPU kick operation
    * pv_latency_wake - average latency (ns) from vCPU kick to wakeup
    + * pv_lock_slowpath - # of locking operations via the slowpath
    * pv_lock_stealing - # of lock stealing operations
    * pv_spurious_wakeup - # of spurious wakeups
    * pv_wait_again - # of vCPU wait's that happened after a vCPU kick
    @@ -45,6 +46,7 @@ enum qlock_stats {
    qstat_pv_kick_wake,
    qstat_pv_latency_kick,
    qstat_pv_latency_wake,
    + qstat_pv_lock_slowpath,
    qstat_pv_lock_stealing,
    qstat_pv_spurious_wakeup,
    qstat_pv_wait_again,
    @@ -70,6 +72,7 @@ static const char * const qstat_names[qstat_num + 1] = {
    [qstat_pv_spurious_wakeup] = "pv_spurious_wakeup",
    [qstat_pv_latency_kick] = "pv_latency_kick",
    [qstat_pv_latency_wake] = "pv_latency_wake",
    + [qstat_pv_lock_slowpath] = "pv_lock_slowpath",
    [qstat_pv_lock_stealing] = "pv_lock_stealing",
    [qstat_pv_wait_again] = "pv_wait_again",
    [qstat_pv_wait_early] = "pv_wait_early",
    --
    1.7.1


    \
     
     \ /
      Last update: 2015-12-10 22:01    [W:2.349 / U:4.404 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site