reiserfs speedup for 2.4.9+
PATCH 1/1 reiserfs speedup for 2.4.9+
Hello everyone,
Beau pointed me towards a performance bug in reiserfs, where reiserfs_write_super would be called excessively.
Turns out that 2.4.9 included some new super handling code that interacted poorly with how reiserfs uses kupdated calls to write_super to trigger writebacks of metadata.
This is most obvious with benchmarks like bonnie++, where 2.4.9 and 2.4.10 reiserfs do very poorly.
This patch makes things much better in my tests, I'd appreciate a few more testers. The only risk is reiserfs using slightly more memory, but only if I've screwed something up.
-chris
fs/reiserfs/journal.c +4 -8
@@ -746,6 +746,8 @@ }atomic_set (&(jl->j_commit_flushing),0 ) ;wake_up (&(jl->j_commit_wait)) ; + + s->s_dirt =1 ;return 0 ; }
@@ -2378,7 +2381,6 @@int count =0 ;int start ;time_t now ; -int keep_dirty =0 ;struct reiserfs_transaction_handle th ; start =SB_JOURNAL_LIST_INDEX (p_s_sb) ;
@@ -2388,10 +2390,6 @@if (SB_JOURNAL_LIST_INDEX (p_s_sb) <0 ) {return 0 ; } -if (!strcmp (current->comm,"kupdate" )) { - immediate =0 ; - keep_dirty =1 ; - }/* starting with oldest, loop until we get to the start */ i = (SB_JOURNAL_LIST_INDEX (p_s_sb) +1 ) %JOURNAL_LIST_COUNT ;while (i != start) {
@@ -2416,7 +2414,6 @@reiserfs_prepare_for_journal (p_s_sb,SB_BUFFER_WITH_SB (p_s_sb),1 ) ;journal_mark_dirty (&th, p_s_sb,SB_BUFFER_WITH_SB (p_s_sb)) ;do_journal_end (&th, p_s_sb,1 ,COMMIT_NOW ) ; - keep_dirty =0 ; }else if (immediate) {/* belongs above, but I wanted this to be very explicit as a special case. If they say to flush, we must be sure old transactions hit the disk too. */ journal_join (&th, p_s_sb,1 ) ;
@@ -2424,8 +2421,8 @@journal_mark_dirty (&th, p_s_sb,SB_BUFFER_WITH_SB (p_s_sb)) ;do_journal_end (&th, p_s_sb,1 ,COMMIT_NOW |WAIT ) ; } - keep_dirty |=reiserfs_journal_kupdate (p_s_sb) ; -return keep_dirty ; +reiserfs_journal_kupdate (p_s_sb) ; +return 0 ; }/*
Quoted 2 lines · Chris Mason
Hello everyone,
Hello Chris,
Quoted 6 lines
Beau pointed me towards a performance bug in reiserfs, where
reiserfs_write_superwould be called excessively.Turns out that 2.4.9 included some new super handling code that interacted poorly with how reiserfs uses kupdated calls to
write_superto trigger writebacks of metadata.
Quoted 6 lines
This is most obvious with benchmarks like bonnie++, where 2.4.9 and 2.4.10 reiserfs do very poorly.
This patch makes things much better in my tests, I'd appreciate a few more testers. The only risk is reiserfs using slightly more memory, but only if I've screwed something up.
Just to share my two cents. First I have to tell that the skipping of alsaplayer playing .wav files I experienced during kernel compiles or other activities is almost completly gone. Furthermore I did some performance testing of kernel compiles (actions that are done:
untar kernel, patch kernel, make -j50 bzImage modules, 5 times in a row). These are the results of plain 2.4.10-pre14aa1:
Elapsed (wall clock) time (h:mm:ss or m:ss): 6:25.90 Elapsed (wall clock) time (h:mm:ss or m:ss): 6:15.43 Elapsed (wall clock) time (h:mm:ss or m:ss): 6:01.95 Elapsed (wall clock) time (h:mm:ss or m:ss): 6:12.56 Elapsed (wall clock) time (h:mm:ss or m:ss): 6:35.61
And here are the results of 2.4.10-pre14aa1 + your patch:
Elapsed (wall clock) time (h:mm:ss or m:ss): 5:23.55 Elapsed (wall clock) time (h:mm:ss or m:ss): 5:32.21 Elapsed (wall clock) time (h:mm:ss or m:ss): 5:34.77 Elapsed (wall clock) time (h:mm:ss or m:ss): 6:17.55 Elapsed (wall clock) time (h:mm:ss or m:ss): 5:49.31
Is the performance fix also required for 2.4.9-acXX ?
Regards,
Jogi
Signature · 3 lines
Well, yeah ... I suppose there's no point in getting greedy, is there?
<< Calvin & Hobbes >>On Sunday, September 23, 2001 03:28:41 PM +0200 [email protected] wrote:
[ benchmarks ]
Thanks to everyone who gave it a try, the patch is in 2.4.10.
Quoted 2 lines
Is the performance fix also required for 2.4.9-acXX ?
Yes, I just sent to Alan for inclusion.
-chris