lkml.org 
[lkml]   [2000]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: kernel performance & profiles under heavy disk I/O

This is a fun little quirk.........
2.2.5 had significantly greater IO performance and this attachment is
roughly what changed between 2.2.5 and 2.2.10 or so........

This change has been demonstrated to clobber direct Block-IO with a 50-60%
penality............just a thought.........

On 20 Mar 2000, Dimitris Michailidis wrote:

> Ever since the early 2.3.4x kernels performance under moderate to heavy disk
> I/O has dropped, possibly due to the elevator. 2.3.40 is substantially
> faster than recent versions, by as much as 40%. I have generated some kernel
> profiles under disk I/O load that are available from
> ftp://oss.sgi.com/pub/profiles/. For these particular runs 2.3.40 was 25%
> faster than 2.3.99-pre2. Notice the increase in the number of IRQs from the
> disk controller (~250%) and the increase in scheduling activity (~400%), a
> good deal of which is due to __get_request_wait.
>
> --
> Dimitris Michailidis dimitris@engr.sgi.com
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.rutgers.edu
> Please read the FAQ at http://www.tux.org/lkml/
>

Andre Hedrick
The Linux ATA/IDE guy
--- block_dev.c.orig Mon Mar 13 17:57:27 2000
+++ block_dev.c Tue Mar 14 15:43:06 2000
@@ -14,7 +14,7 @@
extern int *blksize_size[];

#define MAX_BUF_PER_PAGE (PAGE_SIZE / 512)
-#define NBUF 64
+#define NBUF 512

ssize_t block_write(struct file * filp, const char * buf,
size_t count, loff_t *ppos)
@@ -194,8 +194,12 @@
rblocks = blocks = (left + offset + blocksize - 1) >> blocksize_bits;
bhb = bhe = buflist;
if (filp->f_reada) {
- if (blocks < read_ahead[MAJOR(dev)] / (blocksize >> 9))
- blocks = read_ahead[MAJOR(dev)] / (blocksize >> 9);
+ blocks += read_ahead[MAJOR(dev)] / (blocksize >> 9);
+ if (block + blocks > size) {
+ blocks = size - block;
+ if (blocks == 0)
+ return 0;
+ }
if (rblocks > blocks)
blocks = rblocks;
\
 
 \ /
  Last update: 2005-03-22 13:57    [W:3.432 / U:0.008 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site