public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Cache queue_congestion_on/off_threshold
@ 2004-05-05 22:12 Chen, Kenneth W
  2004-05-06  6:20 ` Jens Axboe
  0 siblings, 1 reply; 18+ messages in thread
From: Chen, Kenneth W @ 2004-05-05 22:12 UTC (permalink / raw)
  To: linux-kernel

It's kind of redundant that queue_congestion_on/off_threshold gets
calculated on every I/O and they produce the same number over and
over again unless q->nr_requests gets changed (which is probably a
very rare event).  Can we cache those values in the request_queue
structure?

- Ken


diff -Nurp linux-2.6.6-rc3/drivers/block/ll_rw_blk.c linux-2.6.6-rc3.blk/drivers/block/ll_rw_blk.c
--- linux-2.6.6-rc3/drivers/block/ll_rw_blk.c	2004-05-05 14:32:31.000000000 -0700
+++ linux-2.6.6-rc3.blk/drivers/block/ll_rw_blk.c	2004-05-05 15:04:59.000000000 -0700
@@ -70,14 +70,7 @@ EXPORT_SYMBOL(blk_max_pfn);
  */
 static inline int queue_congestion_on_threshold(struct request_queue *q)
 {
-	int ret;
-
-	ret = q->nr_requests - (q->nr_requests / 8) + 1;
-
-	if (ret > q->nr_requests)
-		ret = q->nr_requests;
-
-	return ret;
+	return q->nr_congestion_on;
 }

 /*
@@ -85,14 +78,22 @@ static inline int queue_congestion_on_th
  */
 static inline int queue_congestion_off_threshold(struct request_queue *q)
 {
-	int ret;
+	return q->nr_congestion_off;
+}

-	ret = q->nr_requests - (q->nr_requests / 8) - 1;
+static inline void blk_queue_congestion_threshold(struct request_queue *q)
+{
+	int nr;

-	if (ret < 1)
-		ret = 1;
+	nr = q->nr_requests - (q->nr_requests / 8) + 1;
+	if (nr > q->nr_requests)
+		nr = q->nr_requests;
+	q->nr_congestion_on = nr;

-	return ret;
+	nr = q->nr_requests - (q->nr_requests / 8) - 1;
+	if (nr < 1)
+		nr = 1;
+	q->nr_congestion_off = nr;
 }

 void clear_backing_dev_congested(struct backing_dev_info *bdi, int rw)
@@ -235,6 +236,7 @@ void blk_queue_make_request(request_queu
 	blk_queue_max_sectors(q, MAX_SECTORS);
 	blk_queue_hardsect_size(q, 512);
 	blk_queue_dma_alignment(q, 511);
+	blk_queue_congestion_threshold(q);

 	q->unplug_thresh = 4;		/* hmm */
 	q->unplug_delay = (3 * HZ) / 1000;	/* 3 milliseconds */
@@ -2953,6 +2955,7 @@ queue_requests_store(struct request_queu
 	int ret = queue_var_store(&q->nr_requests, page, count);
 	if (q->nr_requests < BLKDEV_MIN_RQ)
 		q->nr_requests = BLKDEV_MIN_RQ;
+	blk_queue_congestion_threshold(q);

 	if (rl->count[READ] >= queue_congestion_on_threshold(q))
 		set_queue_congested(q, READ);
diff -Nurp linux-2.6.6-rc3/include/linux/blkdev.h linux-2.6.6-rc3.blk/include/linux/blkdev.h
--- linux-2.6.6-rc3/include/linux/blkdev.h	2004-04-27 18:35:21.000000000 -0700
+++ linux-2.6.6-rc3.blk/include/linux/blkdev.h	2004-05-05 15:04:59.000000000 -0700
@@ -334,6 +334,8 @@ struct request_queue
 	 * queue settings
 	 */
 	unsigned long		nr_requests;	/* Max # of requests */
+	unsigned int		nr_congestion_on;
+	unsigned int		nr_congestion_off;

 	unsigned short		max_sectors;
 	unsigned short		max_phys_segments;



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

end of thread, other threads:[~2004-05-12 14:23 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-05 22:12 Cache queue_congestion_on/off_threshold Chen, Kenneth W
2004-05-06  6:20 ` Jens Axboe
2004-05-06  6:34   ` Andrew Morton
2004-05-06  6:43     ` Jens Axboe
2004-05-06 20:30       ` Chen, Kenneth W
2004-05-07  3:02         ` Andrew Morton
2004-05-07  9:35           ` Jens Axboe
2004-05-06 20:29     ` Chen, Kenneth W
2004-05-07  9:39       ` Jens Axboe
2004-05-07 22:00         ` Chen, Kenneth W
2004-05-10 14:30           ` Jens Axboe
2004-05-10 14:43             ` Nick Piggin
2004-05-10 14:44               ` Jens Axboe
2004-05-11  3:22                 ` Nick Piggin
2004-05-12  5:32             ` Chen, Kenneth W
2004-05-12  7:05               ` Jens Axboe
2004-05-12 13:48                 ` Jens Axboe
2004-05-12 14:22               ` Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox