* [Cluster-devel] [GFS2 Patch] GFS2: Sort the ordered write list [not found] <48b5faec-d650-4157-a59d-a5125256a771@zmail12.collab.prod.int.phx2.redhat.com> @ 2012-02-14 19:49 ` Bob Peterson 2012-02-14 20:00 ` Steven Whitehouse 0 siblings, 1 reply; 2+ messages in thread From: Bob Peterson @ 2012-02-14 19:49 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, This patch sorts the ordered write list for GFS2 writes. This increases the throughput for simultaneous writes. For example, if you have ten processes, all doing: dd if=/dev/zero of=/mnt/gfs2/fileX on different files, the throughput will be much better. Regards, Bob Peterson Red Hat File Systems Signed-off-by: Bob Peterson <rpeterso@redhat.com> -- GFS2: Sort the ordered write list This patch sorts the ordered write list by block number to speed up writes. diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 4d31379..b8fe7b7 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c @@ -19,6 +19,7 @@ #include <linux/freezer.h> #include <linux/bio.h> #include <linux/writeback.h> +#include <linux/list_sort.h> #include "gfs2.h" #include "incore.h" @@ -566,6 +567,20 @@ static void log_flush_commit(struct gfs2_sbd *sdp) log_write_header(sdp, 0, 0); } +int bd_cmp(void *priv, struct list_head *a, struct list_head *b) +{ + struct gfs2_bufdata *bda, *bdb; + + bda = list_entry(a, struct gfs2_bufdata, bd_le.le_list); + bdb = list_entry(b, struct gfs2_bufdata, bd_le.le_list); + + if (bda->bd_bh->b_blocknr < bdb->bd_bh->b_blocknr) + return -1; + if (bda->bd_bh->b_blocknr > bdb->bd_bh->b_blocknr) + return 1; + return 0; +} + static void gfs2_ordered_write(struct gfs2_sbd *sdp) { struct gfs2_bufdata *bd; @@ -573,6 +588,7 @@ static void gfs2_ordered_write(struct gfs2_sbd *sdp) LIST_HEAD(written); gfs2_log_lock(sdp); + list_sort(NULL, &sdp->sd_log_le_ordered, &bd_cmp); while (!list_empty(&sdp->sd_log_le_ordered)) { bd = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_bufdata, bd_le.le_list); list_move(&bd->bd_le.le_list, &written); ^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [GFS2 Patch] GFS2: Sort the ordered write list 2012-02-14 19:49 ` [Cluster-devel] [GFS2 Patch] GFS2: Sort the ordered write list Bob Peterson @ 2012-02-14 20:00 ` Steven Whitehouse 0 siblings, 0 replies; 2+ messages in thread From: Steven Whitehouse @ 2012-02-14 20:00 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, Now in the -nmw git tree. Thanks, Steve. On Tue, 2012-02-14 at 14:49 -0500, Bob Peterson wrote: > Hi, > > This patch sorts the ordered write list for GFS2 writes. > This increases the throughput for simultaneous writes. > For example, if you have ten processes, all doing: > dd if=/dev/zero of=/mnt/gfs2/fileX > on different files, the throughput will be much better. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson <rpeterso@redhat.com> > -- > GFS2: Sort the ordered write list > > This patch sorts the ordered write list by block number to speed up > writes. > > diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c > index 4d31379..b8fe7b7 100644 > --- a/fs/gfs2/log.c > +++ b/fs/gfs2/log.c > @@ -19,6 +19,7 @@ > #include <linux/freezer.h> > #include <linux/bio.h> > #include <linux/writeback.h> > +#include <linux/list_sort.h> > > #include "gfs2.h" > #include "incore.h" > @@ -566,6 +567,20 @@ static void log_flush_commit(struct gfs2_sbd *sdp) > log_write_header(sdp, 0, 0); > } > > +int bd_cmp(void *priv, struct list_head *a, struct list_head *b) > +{ > + struct gfs2_bufdata *bda, *bdb; > + > + bda = list_entry(a, struct gfs2_bufdata, bd_le.le_list); > + bdb = list_entry(b, struct gfs2_bufdata, bd_le.le_list); > + > + if (bda->bd_bh->b_blocknr < bdb->bd_bh->b_blocknr) > + return -1; > + if (bda->bd_bh->b_blocknr > bdb->bd_bh->b_blocknr) > + return 1; > + return 0; > +} > + > static void gfs2_ordered_write(struct gfs2_sbd *sdp) > { > struct gfs2_bufdata *bd; > @@ -573,6 +588,7 @@ static void gfs2_ordered_write(struct gfs2_sbd *sdp) > LIST_HEAD(written); > > gfs2_log_lock(sdp); > + list_sort(NULL, &sdp->sd_log_le_ordered, &bd_cmp); > while (!list_empty(&sdp->sd_log_le_ordered)) { > bd = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_bufdata, bd_le.le_list); > list_move(&bd->bd_le.le_list, &written); ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-02-14 20:00 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <48b5faec-d650-4157-a59d-a5125256a771@zmail12.collab.prod.int.phx2.redhat.com>
2012-02-14 19:49 ` [Cluster-devel] [GFS2 Patch] GFS2: Sort the ordered write list Bob Peterson
2012-02-14 20:00 ` Steven Whitehouse
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).