From: Waiman Long <longman@redhat.com>
To: "Darrick J. Wong" <darrick.wong@oracle.com>,
Ingo Molnar <mingo@redhat.com>,
Peter Zijlstra <peterz@infradead.org>
Cc: linux-xfs@vger.kernel.org, linux-kernel@vger.kernel.org,
Dave Chinner <david@fromorbit.com>,
Waiman Long <longman@redhat.com>
Subject: [PATCH v2 0/3] xfs: Reduce spinlock contention in log space slowpath code
Date: Sun, 26 Aug 2018 16:53:12 -0400 [thread overview]
Message-ID: <1535316795-21560-1-git-send-email-longman@redhat.com> (raw)
v1->v2:
- For patch 1, remove wake_q_empty() & add task_in_wake_q().
- Rewrite patch 2 after comments from Dave Chinner and break it down
to 2 separate patches. Now the original xfs logic was kept. The
patches just try to move the task wakeup calls to outside the
spinlock.
While running the AIM7 microbenchmark on a small xfs filesystem, it
was found that there was a severe spinlock contention problem in the
current XFS log space reservation code. To alleviate the problem, the
patches try to move as much task wakeup code to outside the spinlock
using the wake_q mechanism so as to reduce the lock hold time as much
as possible.
Patch 1 exports the wake_up_q() and wake_q_add() functions and adds
the task_in_wake_q() inline function.
Patch 2 adds a new flag XLOG_TIC_WAKING to mark a task that is being
waken up and skip the wake_up_process() if a previous wakeup has
been issued.
Patch 3 modifies the xlog_grant_head_wait() and xlog_grant_head_wake()
functions to use wake_q for waking up tasks outside the lock critical
section instead of calling wake_up_process() directly.
The following table shows the performance improvement in the AIM7
fserver workload after applying patches 2 and 3:
Patches Jobs/min % Change
------- -------- --------
- 91,486 -
2 192,666 +111%
2+3 285,221 +212%
So the final patched kernel performed more than 3X better than the
unpatched one.
Waiman Long (3):
sched/core: Export wake_q functions to kernel modules
xfs: Prevent multiple wakeups of the same log space waiter
xfs: Use wake_q for waking up log space waiters
fs/xfs/xfs_linux.h | 1 +
fs/xfs/xfs_log.c | 57 ++++++++++++++++++++++++++++++------
fs/xfs/xfs_log_priv.h | 1 +
include/linux/sched/wake_q.h | 5 ++++
kernel/sched/core.c | 2 ++
5 files changed, 57 insertions(+), 9 deletions(-)
--
2.18.0
next reply other threads:[~2018-08-26 20:53 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-26 20:53 Waiman Long [this message]
2018-08-26 20:53 ` [PATCH v2 1/3] sched/core: Export wake_q functions to kernel modules Waiman Long
2018-08-26 20:53 ` [PATCH v2 2/3] xfs: Prevent multiple wakeups of the same log space waiter Waiman Long
2018-08-27 0:21 ` Dave Chinner
2018-08-27 7:39 ` Christoph Hellwig
2018-08-27 21:42 ` Dave Chinner
2018-08-27 15:34 ` Waiman Long
2018-08-28 1:26 ` Dave Chinner
2018-08-26 20:53 ` [PATCH v2 3/3] xfs: Use wake_q for waking up log space waiters Waiman Long
2018-08-26 23:08 ` [PATCH v2 0/3] xfs: Reduce spinlock contention in log space slowpath code Dave Chinner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1535316795-21560-1-git-send-email-longman@redhat.com \
--to=longman@redhat.com \
--cc=darrick.wong@oracle.com \
--cc=david@fromorbit.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).