From: Steven Whitehouse <swhiteho@redhat.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [PATCH 01/29] GFS2: Plug on AIL flush
Date: Tue, 1 Apr 2014 10:15:13 +0100 [thread overview]
Message-ID: <1396343741-1524-2-git-send-email-swhiteho@redhat.com> (raw)
In-Reply-To: <1396343741-1524-1-git-send-email-swhiteho@redhat.com>
When we do a flush of the AIL list, we are writing out what is
likely to be a lot of small I/Os, which are possibly in an order
which is not ideal performance-wise. Since this is done by calling
filemap_fdatatwrite for each individual inode's address space there
is no overall plugging going on.
In addition to that, we do not always wait for AIL i/o when we flush
it, so that it is possible for things to get left behind on the queue.
By adding explicit plugging here, we reduce the chances of this
being an issues. A quick test using the AIL flush tracepoint shows a
small, but measurable improvement.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index 9dcb977..1e1bda0 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -18,6 +18,7 @@
#include <linux/kthread.h>
#include <linux/freezer.h>
#include <linux/bio.h>
+#include <linux/blkdev.h>
#include <linux/writeback.h>
#include <linux/list_sort.h>
@@ -145,8 +146,10 @@ void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc)
{
struct list_head *head = &sdp->sd_ail1_list;
struct gfs2_trans *tr;
+ struct blk_plug plug;
trace_gfs2_ail_flush(sdp, wbc, 1);
+ blk_start_plug(&plug);
spin_lock(&sdp->sd_ail_lock);
restart:
list_for_each_entry_reverse(tr, head, tr_list) {
@@ -156,6 +159,7 @@ restart:
goto restart;
}
spin_unlock(&sdp->sd_ail_lock);
+ blk_finish_plug(&plug);
trace_gfs2_ail_flush(sdp, wbc, 0);
}
--
1.8.3.1
next prev parent reply other threads:[~2014-04-01 9:15 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-01 9:15 [Cluster-devel] GFS2: Pre-pull patch posting (merge window) Steven Whitehouse
2014-04-01 9:15 ` Steven Whitehouse [this message]
2014-04-01 9:15 ` [Cluster-devel] [PATCH 02/29] GFS2: Allocate block for xattr at inode alloc time, if required Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 03/29] GFS2: journal data writepages update Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 04/29] GFS2: Lock i_mutex and use a local gfs2_holder for fallocate Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 05/29] GFS2: Add meta readahead field in directory entries Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 06/29] GFS2: Mark functions as static in gfs2/rgrp.c Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 07/29] GFS2: add missing newline Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 08/29] GFS2: Reduce struct gfs2_trans in size Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 09/29] GFS2: Move log buffer lists into transaction Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 10/29] GFS2: Move log buffer accounting to transaction Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 11/29] fs: NULL dereference in posix_acl_to_xattr() Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 12/29] GFS2: Remove extra "if" in gfs2_log_flush() Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 13/29] GFS2: replace kmalloc - __vmalloc / memset 0 Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 14/29] GFS2: Clean up journal extent mapping Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 15/29] GFS2: return -E2BIG if hit the maximum limits of ACLs Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 16/29] GFS2: global conversion to pr_foo() Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 17/29] GFS2: Move recovery variables to journal structure in memory Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 18/29] GFS2: Use pr_<level> more consistently Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 19/29] GFS2: Use fs_<level> more often Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 20/29] GFS2: Convert gfs2_lm_withdraw to use fs_err Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 21/29] GFS2: check NULL return value in gfs2_ok_to_move Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 22/29] GFS2: Ensure workqueue is scheduled after noexp request Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 23/29] GFS2: Re-add a call to log_flush_wait when flushing the journal Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 24/29] GFS2: Increase the max number of ACLs Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 25/29] GFS2: Remove extraneous function gfs2_security_init Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 26/29] GFS2: inline function gfs2_set_mode Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 27/29] GFS2: Fix return value in slot_get() Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 28/29] GFS2: Fix uninitialized VFS inode in gfs2_create_inode Steven Whitehouse
2014-04-01 9:15 ` [Cluster-devel] [PATCH 29/29] GFS2: Fix address space from page function Steven Whitehouse
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=1396343741-1524-2-git-send-email-swhiteho@redhat.com \
--to=swhiteho@redhat.com \
/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).