All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] deadline-iosched: performance, style and documentation changes
@ 2008-08-14  8:17 Aaron Carroll
  2008-08-14  8:17 ` [PATCH 1/3] deadline-iosched: allow non-sequential batching Aaron Carroll
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Aaron Carroll @ 2008-08-14  8:17 UTC (permalink / raw)
  To: jens.axboe; +Cc: linux-kernel


Hi Jens,

Patch 1 changes deadline to dispatch in a CSCAN-like manner for improved
throughput.  This fixes two performance issues, namely deadline avalanche
that occurs under high load, and FCFS-like behaviour for mixed read/write
workloads.  Benchmark results are below.

Patches 2 and 3 introduce some non-functional changes, mostly for style
and documentation.

Thanks,
  -- Aaron


-----------------------------------x8-----------------------------------

Figures quoted in KiB/s unless otherwise noted.  Disk under test is a 73GiB
15krpm Cheetah.  Host machine is a 2-way IA64 w/ 2GiB RAM.


fio 16KiB reads
-------------------------------

Load      Bandwidth      %
        New      Old
32    3585.789 3580.412  0.1
64    3657.062 3361.460  8.8
128   3844.572 2459.811  56
256   3860.864 2455.446  57
512   3896.296 2472.468  58


fio 16KiB read/write (50/50)
-------------------------------

Load      Bandwidth      %
        New      Old
32    3461.336 2630.765  32
64    3715.625 2369.822  57
128   3931.525 2375.380  66
256   3953.333 2377.132  66


fio 1MiB reads
-------------------------------

Load       Bandwidth       %
        New        Old
32    49502.789 45744.023  8.2
64    50109.827 45776.416  9.5
128   50232.672 45884.900  9.5
256   50641.255 46266.082  9.5


fio 1MiB read/write (50/50)
-------------------------------

Load       Bandwidth       %
        New        Old
32    48543.272 44557.494  8.9
64    49388.251 44597.785  11
128   49794.080 45131.637  10
256   50632.356 45777.333  11


Postmark 
-------------------------------

5 instances, 10k files, 100 dirs, 15k xacts, XFS

Old: 10.79 xact/s
New: 11.26 xact/s  (+4.2%)




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] deadline-iosched: allow non-sequential batching
  2008-08-14  8:17 [PATCH 0/3] deadline-iosched: performance, style and documentation changes Aaron Carroll
@ 2008-08-14  8:17 ` Aaron Carroll
  2008-08-14  8:17 ` [PATCH 2/3] deadline-iosched: non-functional fixes Aaron Carroll
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Aaron Carroll @ 2008-08-14  8:17 UTC (permalink / raw)
  To: jens.axboe; +Cc: linux-kernel

Deadline currently only batches sector-contiguous requests, so except
for a few circumstances (e.g. requests in a single direction), it is
essentially first come first served.  This is bad for throughput, so
change it to CSCAN, which means requests in a batch do not need to be
sequential and are issued in increasing sector order.

Signed-off-by: Aaron Carroll <aaronc@gelato.unsw.edu.au>
---
 block/deadline-iosched.c |   14 +++-----------
 1 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/block/deadline-iosched.c b/block/deadline-iosched.c
index 342448c..07b80e4 100644
--- a/block/deadline-iosched.c
+++ b/block/deadline-iosched.c
@@ -258,17 +258,9 @@ static int deadline_dispatch_requests(struct request_queue *q, int force)
 	else
 		rq = dd->next_rq[READ];
 
-	if (rq) {
-		/* we have a "next request" */
-		
-		if (dd->last_sector != rq->sector)
-			/* end the batch on a non sequential request */
-			dd->batching += dd->fifo_batch;
-		
-		if (dd->batching < dd->fifo_batch)
-			/* we are still entitled to batch */
-			goto dispatch_request;
-	}
+	if (rq && dd->batching < dd->fifo_batch)
+		/* we have a next request are still entitled to batch */
+		goto dispatch_request;
 
 	/*
 	 * at this point we are not running a batch. select the appropriate
-- 
1.5.4.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] deadline-iosched: non-functional fixes
  2008-08-14  8:17 [PATCH 0/3] deadline-iosched: performance, style and documentation changes Aaron Carroll
  2008-08-14  8:17 ` [PATCH 1/3] deadline-iosched: allow non-sequential batching Aaron Carroll
@ 2008-08-14  8:17 ` Aaron Carroll
  2008-08-14  8:17 ` [PATCH 3/3] block: update documentation for deadline fifo_batch tunable Aaron Carroll
  2008-08-14  9:41 ` [PATCH 0/3] deadline-iosched: performance, style and documentation changes Jens Axboe
  3 siblings, 0 replies; 5+ messages in thread
From: Aaron Carroll @ 2008-08-14  8:17 UTC (permalink / raw)
  To: jens.axboe; +Cc: linux-kernel

 * convert goto to simpler while loop;
 * use rq_end_sector() instead of computing manually;
 * fix false comments;
 * remove spurious whitespace;
 * convert rq_rb_root macro to an inline function.

Signed-off-by: Aaron Carroll <aaronc@gelato.unsw.edu.au>
---
 block/deadline-iosched.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/block/deadline-iosched.c b/block/deadline-iosched.c
index 07b80e4..fd31117 100644
--- a/block/deadline-iosched.c
+++ b/block/deadline-iosched.c
@@ -33,7 +33,7 @@ struct deadline_data {
 	 */
 	struct rb_root sort_list[2];	
 	struct list_head fifo_list[2];
-	
+
 	/*
 	 * next in sort order. read, write or both are NULL
 	 */
@@ -53,7 +53,11 @@ struct deadline_data {
 
 static void deadline_move_request(struct deadline_data *, struct request *);
 
-#define RQ_RB_ROOT(dd, rq)	(&(dd)->sort_list[rq_data_dir((rq))])
+static inline struct rb_root *
+deadline_rb_root(struct deadline_data *dd, struct request *rq)
+{
+	return &dd->sort_list[rq_data_dir(rq)];
+}
 
 /*
  * get the request after `rq' in sector-sorted order
@@ -72,15 +76,11 @@ deadline_latter_request(struct request *rq)
 static void
 deadline_add_rq_rb(struct deadline_data *dd, struct request *rq)
 {
-	struct rb_root *root = RQ_RB_ROOT(dd, rq);
+	struct rb_root *root = deadline_rb_root(dd, rq);
 	struct request *__alias;
 
-retry:
-	__alias = elv_rb_add(root, rq);
-	if (unlikely(__alias)) {
+	while (unlikely(__alias = elv_rb_add(root, rq)))
 		deadline_move_request(dd, __alias);
-		goto retry;
-	}
 }
 
 static inline void
@@ -91,7 +91,7 @@ deadline_del_rq_rb(struct deadline_data *dd, struct request *rq)
 	if (dd->next_rq[data_dir] == rq)
 		dd->next_rq[data_dir] = deadline_latter_request(rq);
 
-	elv_rb_del(RQ_RB_ROOT(dd, rq), rq);
+	elv_rb_del(deadline_rb_root(dd, rq), rq);
 }
 
 /*
@@ -106,7 +106,7 @@ deadline_add_request(struct request_queue *q, struct request *rq)
 	deadline_add_rq_rb(dd, rq);
 
 	/*
-	 * set expire time (only used for reads) and add to fifo list
+	 * set expire time and add to fifo list
 	 */
 	rq_set_fifo_time(rq, jiffies + dd->fifo_expire[data_dir]);
 	list_add_tail(&rq->queuelist, &dd->fifo_list[data_dir]);
@@ -162,7 +162,7 @@ static void deadline_merged_request(struct request_queue *q,
 	 * if the merge was a front merge, we need to reposition request
 	 */
 	if (type == ELEVATOR_FRONT_MERGE) {
-		elv_rb_del(RQ_RB_ROOT(dd, req), req);
+		elv_rb_del(deadline_rb_root(dd, req), req);
 		deadline_add_rq_rb(dd, req);
 	}
 }
@@ -212,7 +212,7 @@ deadline_move_request(struct deadline_data *dd, struct request *rq)
 	dd->next_rq[WRITE] = NULL;
 	dd->next_rq[data_dir] = deadline_latter_request(rq);
 
-	dd->last_sector = rq->sector + rq->nr_sectors;
+	dd->last_sector = rq_end_sector(rq);
 
 	/*
 	 * take it off the sort and fifo list, move
@@ -222,7 +222,7 @@ deadline_move_request(struct deadline_data *dd, struct request *rq)
 }
 
 /*
- * deadline_check_fifo returns 0 if there are no expired reads on the fifo,
+ * deadline_check_fifo returns 0 if there are no expired requests on the fifo,
  * 1 otherwise. Requires !list_empty(&dd->fifo_list[data_dir])
  */
 static inline int deadline_check_fifo(struct deadline_data *dd, int ddir)
-- 
1.5.4.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] block: update documentation for deadline fifo_batch tunable
  2008-08-14  8:17 [PATCH 0/3] deadline-iosched: performance, style and documentation changes Aaron Carroll
  2008-08-14  8:17 ` [PATCH 1/3] deadline-iosched: allow non-sequential batching Aaron Carroll
  2008-08-14  8:17 ` [PATCH 2/3] deadline-iosched: non-functional fixes Aaron Carroll
@ 2008-08-14  8:17 ` Aaron Carroll
  2008-08-14  9:41 ` [PATCH 0/3] deadline-iosched: performance, style and documentation changes Jens Axboe
  3 siblings, 0 replies; 5+ messages in thread
From: Aaron Carroll @ 2008-08-14  8:17 UTC (permalink / raw)
  To: jens.axboe; +Cc: linux-kernel

Update the description of fifo_batch to match the current implementation,
and include a description of how to tune it.

Signed-off-by: Aaron Carroll <aaronc@gelato.unsw.edu.au>
---
 Documentation/block/deadline-iosched.txt |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/Documentation/block/deadline-iosched.txt b/Documentation/block/deadline-iosched.txt
index c23cab1..7257676 100644
--- a/Documentation/block/deadline-iosched.txt
+++ b/Documentation/block/deadline-iosched.txt
@@ -30,12 +30,18 @@ write_expire	(in ms)
 Similar to read_expire mentioned above, but for writes.
 
 
-fifo_batch
+fifo_batch	(number of requests)
 ----------
 
-When a read request expires its deadline, we must move some requests from
-the sorted io scheduler list to the block device dispatch queue. fifo_batch
-controls how many requests we move.
+Requests are grouped into ``batches'' of a particular data direction (read or
+write) which are serviced in increasing sector order.  To limit extra seeking,
+deadline expiries are only checked between batches.  fifo_batch controls the
+maximum number of requests per batch.
+
+This parameter tunes the balance between per-request latency and aggregate
+throughput.  When low latency is the primary concern, smaller is better (where
+a value of 1 yields first-come first-served behaviour).  Increasing fifo_batch
+generally improves throughput, at the cost of latency variation.
 
 
 writes_starved	(number of dispatches)
-- 
1.5.4.5


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] deadline-iosched: performance, style and documentation changes
  2008-08-14  8:17 [PATCH 0/3] deadline-iosched: performance, style and documentation changes Aaron Carroll
                   ` (2 preceding siblings ...)
  2008-08-14  8:17 ` [PATCH 3/3] block: update documentation for deadline fifo_batch tunable Aaron Carroll
@ 2008-08-14  9:41 ` Jens Axboe
  3 siblings, 0 replies; 5+ messages in thread
From: Jens Axboe @ 2008-08-14  9:41 UTC (permalink / raw)
  To: Aaron Carroll; +Cc: linux-kernel

On Thu, Aug 14 2008, Aaron Carroll wrote:
> 
> Hi Jens,
> 
> Patch 1 changes deadline to dispatch in a CSCAN-like manner for improved
> throughput.  This fixes two performance issues, namely deadline avalanche
> that occurs under high load, and FCFS-like behaviour for mixed read/write
> workloads.  Benchmark results are below.
> 
> Patches 2 and 3 introduce some non-functional changes, mostly for style
> and documentation.

Looks good, thanks Aaron!

-- 
Jens Axboe


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-08-14  9:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-14  8:17 [PATCH 0/3] deadline-iosched: performance, style and documentation changes Aaron Carroll
2008-08-14  8:17 ` [PATCH 1/3] deadline-iosched: allow non-sequential batching Aaron Carroll
2008-08-14  8:17 ` [PATCH 2/3] deadline-iosched: non-functional fixes Aaron Carroll
2008-08-14  8:17 ` [PATCH 3/3] block: update documentation for deadline fifo_batch tunable Aaron Carroll
2008-08-14  9:41 ` [PATCH 0/3] deadline-iosched: performance, style and documentation changes Jens Axboe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.