[PATCH] performance issues for cciss driver.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

The cciss driver set a too high default value for the number of read ahead
pages.  When a lot of read operation happens, then we enter into a
trash-like vm situation.

Below is what happens into such a situation:

The system is a HP Proliant 385, with a Debian sarge amd64 distribution.
It collect snmp values and stored into RRD files and therefore
perform a lot of small read and write operations.

# cat /sys/block/cciss\!c0d0/queue/read_ahead_kb
4096
# dstat 1
----total-cpu-usage---- -disk/total -net/total- ---paging-- ---system--
usr sys idl wai hiq siq|_read write|_recv _send|__in_ _out_|_int_ _csw_
  0   0  97   2   0   0|   0     0 |   0     0 |   0     0 |   0     0
  0   2  50  47   0   0|75.1M 4096B|1226B 4056B|   0     0 |1005   451
  0   1  48  50   0   0|32.6M 1766k|  70B  326B|   0     0 | 951   373
  0   2  49  49   0   0|57.8M   20k|  70B  326B|   0     0 | 873   487
  0   2  50  48   0   0|56.7M   24k| 184B  440B|   0     0 | 882   537
  0   2  48  50   0   0|55.1M   64k|  70B  326B|   0     0 | 877   532
  0   2  50  48   0   0|53.6M   20k|  70B  326B|   0     0 | 860   521
  0   0  50  50   0   0|31.1M 1464k|  70B  326B|   0     0 | 892   457
 18   3  31  48   0   0|45.7M   64k|  70B  326B|   0     0 |1075   594

...
# echo 128 > /sys/block/cciss\!c0d0/queue/read_ahead_kb

(wait 5 to 10 minutes)

# dstat 1
----total-cpu-usage---- -disk/total -net/total- ---paging-- ---system--
usr sys idl wai hiq siq|_read write|_recv _send|__in_ _out_|_int_ _csw_
  0   0  97   2   0   0|   0     0 |   0     0 |   0     0 |   0     0
  0   0 100   0   0   0|   0    12k| 140B 1004B|   0     0 | 258    16 
  0   0 100   0   0   0|   0  3072B| 204B  716B|   0     0 | 257    28 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    10 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    14 
  0   0  99   1   0   0|   0  1948k| 140B  652B|   0     0 | 742    86 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    14 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    30 
  2   1  98   0   0   0|   0     0 | 140B  652B|   0     0 | 255    30 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    10 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    25 
 14   0  86   0   0   0|   0     0 | 254B  766B|   0     0 | 436    49 
 12  12  77   0   0   0|   0   165k|32.4k 33.4k|   0     0 | 339  1773 
 10   6  84   1   0   0| 196k    0 | 140B  652B|   0     0 | 262    31 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    14 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 255    13 
  2   1  97   0   0   0|   0    20k| 576B 1898B|   0     0 | 269    40 
  0   0 100   0   0   0|   0   140k| 140B  652B|   0     0 | 264    39 
  0   0 100   0   0   0|   0     0 | 140B  652B|   0     0 | 257    17 
 10   4  86   0   0   0|   0     0 | 204B  716B|   0     0 | 255    25 


I think we should in fact totally kill the whole ra_pages stuff under the
cciss driver IMHO.

Signed-off-by: Bruno Ducrot <[email protected]>

 linux-2.6.16/drivers/block/cciss.c |    3 ---
 1 files changed, 3 deletions(-)

--- linux-2.6.16/drivers/block/cciss.c	2006/03/22 12:06:30	1.1
+++ linux-2.6.16/drivers/block/cciss.c	2006/03/23 08:29:57
@@ -137,7 +137,6 @@ static struct board_type products[] = {
 /*define how many times we will try a command because of bus resets */
 #define MAX_CMD_RETRIES 3
 
-#define READ_AHEAD 	 1024
 #define NR_CMDS		 384 /* #commands that can be outstanding */
 #define MAX_CTLR	32
 
@@ -1238,7 +1237,6 @@ static void cciss_update_drive_info(int 
 		disk->queue = blk_init_queue(do_cciss_request, &h->lock);
 
 		/* Set up queue information */
-		disk->queue->backing_dev_info.ra_pages = READ_AHEAD;
 		blk_queue_bounce_limit(disk->queue, hba[ctlr]->pdev->dma_mask);
 
 		/* This is a hardware imposed limit. */
@@ -3217,7 +3215,6 @@ static int __devinit cciss_init_one(stru
 		}
 		drv->queue = q;
 
-		q->backing_dev_info.ra_pages = READ_AHEAD;
 		blk_queue_bounce_limit(q, hba[i]->pdev->dma_mask);
 
 		/* This is a hardware imposed limit. */

-- 
Bruno Ducrot

--  Which is worse:  ignorance or apathy?
--  Don't know.  Don't care.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux