Messages in this thread Patch in this message | | | Date | Tue, 21 Mar 2000 00:43:53 -0800 (PST) | From | Andre Hedrick <> | Subject | Re: 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;
| |