I have made the batch_expire timeouts smaller at double the non anticipatory case - that seems to give comparable contest results - but it will still be a loss in some situations. block/deadline-iosched.c | 16 +++++++--------- 1 files changed, 7 insertions(+), 9 deletions(-) diff -puN drivers/block/deadline-iosched.c~ant-sched-12feb drivers/block/deadline-iosched.c --- 25/drivers/block/deadline-iosched.c~ant-sched-12feb 2003-02-12 23:09:41.000000000 -0800 +++ 25-akpm/drivers/block/deadline-iosched.c 2003-02-12 23:09:41.000000000 -0800 @@ -56,18 +56,18 @@ static int write_expire = 5 * HZ; * read_batch_expire describes how long we will allow a stream of reads to * persist before looking to see whether it is time to switch over to writes. */ -static int read_batch_expire = HZ / 4; +static int read_batch_expire = HZ / 10; /* * write_batch_expire describes how long we will allow a stream of writes to * persist before looking to see whether it is time to switch over to reads. */ -static int write_batch_expire = HZ / 10; +static int write_batch_expire = HZ / 20; /* * max time we may wait to anticipate a read */ -static int antic_expire = HZ / 50; +static int antic_expire = HZ / 100; static const int deadline_hash_shift = 10; #define DL_HASH_BLOCK(sec) ((sec) >> 3) @@ -650,19 +650,17 @@ deadline_close_req(struct deadline_data sector_t delta; /* acceptable close offset (in sectors) */ - if (dd->antic_status == ANTIC_OFF || delay <= 3) - delta = 16; - else if (delay <= 10) - delta = 64 << ((delay - 3)*2); + if (dd->antic_status == ANTIC_OFF || delay <= 2) + delta = 64; else if (delay <= dd->antic_expire / 2) - delta = 1024 * 1024; + delta = 64 << ((delay - 2)*2); else return 1; return (last <= next) && (next <= last + delta); } -#define MAXBACK (256 * 1024) +#define MAXBACK (512 * 1024) static struct deadline_rq * deadline_choose_req(struct deadline_data *dd, _