I/O regression after 2.6.0-test5
Quoted 2 lines
If you have time, would you please try testing
as-iosched.cfrom test5 in a later kernel (it won't go into test8-mm1 though).
copying drivers/block/as-iosched.c from 2.6.0-test5 to test8 looks like it fixes the regression. Here are the results so far.
In the AIM7 database benchmark, jobs/minute using test5 as-iosched.c doubled. At 32 tasks, jobs/min went from 300 to 601.
At 256 tasks, jobs/min went from 552 to 1010.
test5 as-iosched.c:
cat suite7-dbase-2.6.0-test8-as
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003
Tasks Jobs/Min Real CPU 32 601.0 316.3 134.0 64 782.6 485.8 259.2 96 869.1 656.1 387.6 128 919.3 827.0 522.8 160 955.0 995.2 650.3 192 981.9 1161.5 790.9 224 1002.3 1327.5 910.2 256 1009.9 1505.7 1027.7
Unmodififed test8.
cat suite7-dbase-2.6.0-test8
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003
Tasks Jobs/Min Real CPU 32 299.8 634.0 128.6 64 450.5 843.9 246.5 96 549.7 1037.4 366.0 128 558.7 1360.8 497.6 160 522.1 1820.2 612.2 192 515.5 2212.4 742.7 224 529.9 2510.8 859.5 256 552.4 2753.0 980.4
The AIM7 fileserver benchmark is back up to previous levels when test8 uses the test5 as-iosched.c:
test5 as-iosched.c with test8.
cat suite7-fserver-2.6.0-test8-as
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003
Tasks Jobs/Min Real CPU 4 80.5 301.0 37.0 8 133.0 364.6 64.0 12 166.7 436.3 93.4 16 175.9 551.2 111.5 20 186.3 650.7 133.8 24 202.8 717.3 161.2 28 207.1 819.3 200.0 32 210.6 920.7 226.5
Unmodified test8.
cat suite7-fserver-2.6.0-test8
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003
Tasks Jobs/Min Real CPU 4 42.3 573.6 40.9 8 63.3 765.7 71.6 12 83.2 874.2 95.0 16 87.5 1108.4 102.5 20 105.0 1154.6 136.7 24 111.2 1308.1 162.2 28 130.7 1297.9 185.8 32 134.2 1444.5 212.9
My tiobench test hasn't completed yet, but test8 with test5's as-iosched.c is making good progress. I think Nick nailed the changeset.
Signature · 2 lines
Randy Hron http://home.earthlink.net/~rwhron/kernel/bigbox.html
Quoted 11 lines · [email protected] wrote:
Quoted 3 lines
If you have time, would you please try testing
as-iosched.cfrom test5 in a later kernel (it won't go into test8-mm1 though).copying
drivers/block/as-iosched.cfrom 2.6.0-test5 to test8 looks like it fixes the regression. Here are the results so far.In the AIM7 database benchmark, jobs/minute using test5
as-iosched.cdoubled. At 32 tasks, jobs/min went from 300 to 601.
At 256 tasks, jobs/min went from 552 to 1010.
Yep, looks right. Thanks for your thoroughness. There are a few important direct IO bug fixes gone in there as well (hopefully they aren't causing the regressions... unlikely), so for stability you'll want to continue to use the test8 version.
I'll get a patch out soon.
sql bench on mysql, una master, three slave, with old as-iosched.c runs mutch better, thanx.
Quoted 96 lines · On Tue, 21 Oct 2003 [email protected] wrote:
Date: Tue, 21 Oct 2003 09:05:01 -0400
From: [email protected]
To: [email protected], [email protected]
Cc: [email protected], [email protected], [email protected]
Subject: Re: [BENCHMARK] I/O regression after 2.6.0-test5Quoted 2 lines
If you have time, would you please try testing
as-iosched.cfrom test5 in a later kernel (it won't go into test8-mm1 though).copying
drivers/block/as-iosched.cfrom 2.6.0-test5 to test8 looks like it fixes the regression. Here are the results so far.In the AIM7 database benchmark, jobs/minute using test5
as-iosched.cdoubled. At 32 tasks, jobs/min went from 300 to 601.
At 256 tasks, jobs/min went from 552 to 1010.test5
as-iosched.c:
cat suite7-dbase-2.6.0-test8-as
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003Tasks Jobs/Min Real CPU 32 601.0 316.3 134.0 64 782.6 485.8 259.2 96 869.1 656.1 387.6 128 919.3 827.0 522.8 160 955.0 995.2 650.3 192 981.9 1161.5 790.9 224 1002.3 1327.5 910.2 256 1009.9 1505.7 1027.7Unmodififed test8.
cat suite7-dbase-2.6.0-test8
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003Tasks Jobs/Min Real CPU 32 299.8 634.0 128.6 64 450.5 843.9 246.5 96 549.7 1037.4 366.0 128 558.7 1360.8 497.6 160 522.1 1820.2 612.2 192 515.5 2212.4 742.7 224 529.9 2510.8 859.5 256 552.4 2753.0 980.4The AIM7 fileserver benchmark is back up to previous levels when test8 uses the test5
as-iosched.c:test5
as-iosched.cwith test8.
cat suite7-fserver-2.6.0-test8-as
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003Tasks Jobs/Min Real CPU 4 80.5 301.0 37.0 8 133.0 364.6 64.0 12 166.7 436.3 93.4 16 175.9 551.2 111.5 20 186.3 650.7 133.8 24 202.8 717.3 161.2 28 207.1 819.3 200.0 32 210.6 920.7 226.5Unmodified test8.
cat suite7-fserver-2.6.0-test8
Benchmark Version Machine Run Date
AIM Multiuser Benchmark - Suite VII "1.1" dev4-003Tasks Jobs/Min Real CPU 4 42.3 573.6 40.9 8 63.3 765.7 71.6 12 83.2 874.2 95.0 16 87.5 1108.4 102.5 20 105.0 1154.6 136.7 24 111.2 1308.1 162.2 28 130.7 1297.9 185.8 32 134.2 1444.5 212.9My tiobench test hasn't completed yet, but test8 with test5's
as-iosched.cis making good progress. I think Nick nailed the changeset.--
Randy Hron
http://home.earthlink.net/~rwhron/kernel/bigbox.html-
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/
Quoted 7 lines · [email protected] wrote:
Quoted 3 lines
If you have time, would you please try testing
as-iosched.cfrom test5 in a later kernel (it won't go into test8-mm1 though).copying
drivers/block/as-iosched.cfrom 2.6.0-test5 to test8 looks like it fixes the regression. Here are the results so far.
Could you please try the following patch against 2.6.0-test8. Thanks. I'll have to come up with something more comprehensive because this destroys find | xargs grep during other IO. It looks like this might be the cause of a lot of AS's database problems though.
I'm working on something...
linux-2.6-npiggin/drivers/block/as-iosched.c | 23 +++-------------------- 1 files changed, 3 insertions(+), 20 deletions(-)
drivers/block/as-iosched.c renamed from drivers/block/as-iosched.c~as-fix +3 -20
@@ -99,7 +99,6 @@ struct as_data {sector_t last_sector[2 ];/* last REQ_SYNC & REQ_ASYNC sectors */ struct list_head *dispatch;/* driver dispatch queue */ struct list_head *hash;/* request hash */ -unsigned long new_success;/* anticipation success on new proc */ unsigned long current_batch_expires;unsigned long last_check_fifo[2 ];int changed_batch;/* 1: waiting for old batch to end */
@@ -585,18 +584,11 @@ static void as_antic_stop(struct as_dataint status = ad->antic_status;if (status ==ANTIC_WAIT_REQ || status ==ANTIC_WAIT_NEXT ) { -struct as_io_context *aic; -if (status ==ANTIC_WAIT_NEXT )del_timer (&ad->antic_timer); ad->antic_status =ANTIC_FINISHED ;/* see as_work_handler */ kblockd_schedule_work (&ad->antic_work); - - aic = ad->io_context->aic; -if (aic->seek_samples ==0 ) -/* new process */ - ad->new_success = (ad->new_success *3 ) /4 +256 ; } }
@@ -612,14 +604,8 @@ static void as_antic_timeout(unsigned lospin_lock_irqsave (q->queue_lock, flags);if (ad->antic_status ==ANTIC_WAIT_REQ || ad->antic_status ==ANTIC_WAIT_NEXT ) { -struct as_io_context *aic; ad->antic_status =ANTIC_FINISHED ;kblockd_schedule_work (&ad->antic_work); - - aic = ad->io_context->aic; -if (aic->seek_samples ==0 ) -/* new process */ - ad->new_success = (ad->new_success *3 ) /4 ; }spin_unlock_irqrestore (q->queue_lock, flags); }
@@ -708,11 +694,10 @@ static int as_can_break_anticipation(strreturn 1 ; } -if (ad->new_success <256 && - (aic->seek_samples ==0 || aic->ttime_samples ==0 )) { +if (aic->seek_samples ==0 && aic->ttime_samples ==0 ) {/* -* Process has just started IO and we have a bad history of -* success anticipating on new processes! +* Process has just started IO. Don't anticipate. +* TODO! Must fix this up. */ return 1 ; }
@@ -1822,8 +1807,6 @@ static int as_init(request_queue_t *q, eif (ad->write_batch_count <2 ) ad->write_batch_count =2 ; - ad->new_success =512 ; -return 0 ; }
_
Sorry, this patch didn't fix our performance problems. Mary just finished running dbt2 on test8 with your patch:
NOTPM kernel scheduler 965 2.6.0-test8-np AS 1632 2.6.-test6-mm4 deadline
This is an 8-way system with DAC960 and 12 LUNs, using raw devices. That's still quite a sizeable drop.
Quoted 9 lines · Nick Piggin
Could you please try the following patch against 2.6.0-test8. Thanks. I'll have to come up with something more comprehensive because this destroys find | xargs grep during other IO. It looks like this might be the cause of a lot of AS's database problems though.
I'm working on something...
I don't know how useful this might but. I've been trying to track down which patches to as-iosched resulted in the performance drop. The results so far are a little confusing. I have been running reaim on an 8-way system, comparing as-iosched performance with deadline, on each kernel version. The numbers are "number of jobs per minute". So, larger is better.
Deadline As-iosched
2.6.0-test5 8542 8589
2.6.0-test5-mm1 8303 8401
2.6.0-test5-mm2 8309 8224
2.6.0-test5-mm3 8222 8417
2.6.0-test6 8302 6934 ****
2.6.0-test6-mm1 8375 8163
2.6.0-test6-mm2 ??? 8309
I'm still getting data on test6-mm*. It's curious that performance dropped for test6, but came back for test6-mm1.
Quoted 11 lines · Dave Olien
Sorry, this patch didn't fix our performance problems. Mary just finished running dbt2 on test8 with your patch:
NOTPM kernel scheduler 965 2.6.0-test8-np AS 1632 2.6.-test6-mm4 deadlineThis is an 8-way system with DAC960 and 12 LUNs, using raw devices. That's still quite a sizeable drop.
Quoted 7 lines · Dave Olien
Sorry, this patch didn't fix our performance problems. Mary just finished running dbt2 on test8 with your patch:
NOTPM kernel scheduler 965 2.6.0-test8-np AS 1632 2.6.-test6-mm4 deadline
Thanks. hmm.
And NOTPM was better with AS in test5? Does using as-iosched.c from test5 in a test8 kernel help?
Quoted 7 lines · Nick Piggin
Quoted 3 lines · Dave Olien
Sorry, this patch didn't fix our performance problems. Mary just finished running dbt2 on test8 with your patch:
Quoted 9 lines
Quoted 4 lines
NOTPM kernel scheduler 965 2.6.0-test8-np AS 1632 2.6.-test6-mm4 deadlineThanks. hmm.
And NOTPM was better with AS in test5? Does usingas-iosched.cfrom test5 in a test8 kernel help?
If that helps, can you try this patch.
linux-2.6-npiggin/drivers/block/as-iosched.c | 23 +++-------------------- 1 files changed, 3 insertions(+), 20 deletions(-)
drivers/block/as-iosched.c renamed from drivers/block/as-iosched.c~as-fix +3 -20
@@ -99,7 +99,6 @@ struct as_data {sector_t last_sector[2 ];/* last REQ_SYNC & REQ_ASYNC sectors */ struct list_head *dispatch;/* driver dispatch queue */ struct list_head *hash;/* request hash */ -unsigned long new_success;/* anticipation success on new proc */ unsigned long current_batch_expires;unsigned long last_check_fifo[2 ];int changed_batch;/* 1: waiting for old batch to end */
@@ -585,18 +584,11 @@ static void as_antic_stop(struct as_dataint status = ad->antic_status;if (status ==ANTIC_WAIT_REQ || status ==ANTIC_WAIT_NEXT ) { -struct as_io_context *aic; -if (status ==ANTIC_WAIT_NEXT )del_timer (&ad->antic_timer); ad->antic_status =ANTIC_FINISHED ;/* see as_work_handler */ kblockd_schedule_work (&ad->antic_work); - - aic = ad->io_context->aic; -if (aic->seek_samples ==0 ) -/* new process */ - ad->new_success = (ad->new_success *3 ) /4 +256 ; } }
@@ -612,14 +604,8 @@ static void as_antic_timeout(unsigned lospin_lock_irqsave (q->queue_lock, flags);if (ad->antic_status ==ANTIC_WAIT_REQ || ad->antic_status ==ANTIC_WAIT_NEXT ) { -struct as_io_context *aic; ad->antic_status =ANTIC_FINISHED ;kblockd_schedule_work (&ad->antic_work); - - aic = ad->io_context->aic; -if (aic->seek_samples ==0 ) -/* new process */ - ad->new_success = (ad->new_success *3 ) /4 ; }spin_unlock_irqrestore (q->queue_lock, flags); }
@@ -708,11 +694,10 @@ static int as_can_break_anticipation(strreturn 1 ; } -if (ad->new_success <256 && - (aic->seek_samples ==0 || aic->ttime_samples ==0 )) { +if (aic->seek_samples ==0 || aic->ttime_samples ==0 ) {/* -* Process has just started IO and we have a bad history of -* success anticipating on new processes! +* Process has just started IO. Don't anticipate. +* TODO! Must fix this up. */ return 1 ; }
@@ -1822,8 +1807,6 @@ static int as_init(request_queue_t *q, eif (ad->write_batch_count <2 ) ad->write_batch_count =2 ; - ad->new_success =512 ; -return 0 ; }
_
test5 didn't work with dbt2. The database run kept hanging. I've been running reaim, which doesn't have those problems with older kernels, but has shown similar performance problems.
I need to also check again that reaim and dbt2 still show similar performance issues with newer kernel versions.
I've lost my test machine for today. But I'll try test5 as-iosched in a test8 kernel with reaim tomorrow. If it works well, I'll try your following patch. Probably get it in the mail tomorrow afternoon.
Dave
Quoted 16 lines · Nick Piggin
Quoted 7 lines · Dave Olien
Sorry, this patch didn't fix our performance problems. Mary just finished running dbt2 on test8 with your patch:
NOTPM kernel scheduler 965 2.6.0-test8-np AS 1632 2.6.-test6-mm4 deadlineThanks. hmm.
And NOTPM was better with AS in test5? Does usingas-iosched.cfrom test5 in a test8 kernel help?
Quoted 11 lines · Dave Olien
test5 didn't work with dbt2. The database run kept hanging. I've been running reaim, which doesn't have those problems with older kernels, but has shown similar performance problems.
I need to also check again that reaim and dbt2 still show similar performance issues with newer kernel versions.
I've lost my test machine for today. But I'll try test5 as-iosched in a test8 kernel with reaim tomorrow. If it works well, I'll try your following patch. Probably get it in the mail tomorrow afternoon.
Hi Dave,
Yeah thats right - I forgot. It was hanging because of as-iosched.c too, so don't bother trying to run it :(
Anyway, Randy can reproduce regressions, so I'll work on his first.