Hi! On Wed, 5 Aug 2009 23:37:03 +0900, Jiro SEKIBA <[email protected]> wrote: > Hi, > > This is a candidate patch to improve write performance. > > When GC is runnning, GC moves live block to difference segments. > Moving live blocks to different segment is done in a transaction, > but it is not necessarily to be in the transaction. > This patch will get the nilfs_ioctl_move_blocks() out from > transaction lock and put it before the transaction. > > Here are the bonnie++ bench mark results against rc5. > I used sata disk so performace difference is not big. > So I modified nilfs_cleanerd.conf to ensure lock will be long enough. > > I ran "bonnie++ -b" three times in each environment. > Create clean nilfs2 partition each time before test run. > > Results > - write performance of rc5 > * Char|17472.333 K/sec > * Block|30748.000 K/sec > * Rewrite|18506.000 K/sec > > - write performance of the patched rc5 > * Char|17961.000 K/sec -> 102.700% > * Block|30987.666 K/sec -> 100.700% > * Rewrite|18775.666 K/sec -> 101.400%
Thank you for the patch. I think this patch can mitigate freeze-time of writes due to GC, but this benchmark seems not to be suited for measuring the effect. Particularly, GC fires only once per five seconds with the following config, and this may limit the efficacy in this kind of integrative test. Is it possible to compare single write time hit GC with the time not hit GC ? I will check correctness of the patch. Thanks, Ryusuke Konishi > Here are the nilfs_cleanerd.conf and raw data. > -------8<---------8<---------nilfs_cleanerd.conf---------8<---------8<------- > protection_period 150 > selection_policy timestamp # timestamp in ascend order > nsegments_per_clean 10 > cleaning_interval 5 > retry_interval 60 > use_mmap > log_priority info > -------8<---------8<---------nilfs_cleanerd.conf---------8<---------8<------- > ---------8<---------8<---------rc5---------8<---------8<--------- > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 17404 22 30751 5 18519 3 33855 38 45560 4 47.3 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 103 1 +++++ +++ 255 0 251 4 +++++ +++ 223 > 1 > foras,10G,17404,22,30751,5,18519,3,33855,38,45560,4,47.3,0,16,103,1,+++++,+++,255,0,251,4,+++++,+++,223,1 > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 17561 22 30781 5 18412 3 33973 38 46063 3 46.6 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 102 1 +++++ +++ 237 0 244 3 +++++ +++ 222 > 1 > foras,10G,17561,22,30781,5,18412,3,33973,38,46063,3,46.6,0,16,102,1,+++++,+++,237,0,244,3,+++++,+++,222,1 > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 17452 22 30712 5 18587 3 34071 38 45479 4 50.6 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 102 1 +++++ +++ 238 0 252 4 +++++ +++ 222 > 1 > foras,10G,17452,22,30712,5,18587,3,34071,38,45479,4,50.6,0,16,102,1,+++++,+++,238,0,252,4,+++++,+++,222,1 > ---------8<---------8<---------rc5---------8<---------8<--------- > ---------8<---------8<---------patch---------8<---------8<--------- > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 18004 22 31375 5 19110 3 33755 38 45224 4 97.1 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 99 1 +++++ +++ 223 0 231 3 +++++ +++ 209 > 1 > foras,10G,18004,22,31375,5,19110,3,33755,38,45224,4,97.1,0,16,99,1,+++++,+++,223,0,231,3,+++++,+++,209,1 > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 17866 22 30673 5 18619 3 33923 38 45878 4 55.3 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 97 1 +++++ +++ 211 0 224 3 +++++ +++ 203 > 1 > foras,10G,17866,22,30673,5,18619,3,33923,38,45878,4,55.3,0,16,97,1,+++++,+++,211,0,224,3,+++++,+++,203,1 > Version 1.03d ------Sequential Output------ --Sequential Input- > --Random- > -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- > --Seeks-- > Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec > %CP > foras 10G 18013 22 30915 5 18598 3 33879 38 44957 4 47.5 > 0 > ------Sequential Create------ --------Random > Create-------- > -Create-- --Read--- -Delete-- -Create-- --Read--- > -Delete-- > files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec > %CP > 16 99 1 +++++ +++ 255 0 253 4 +++++ +++ 226 > 1 > foras,10G,18013,22,30915,5,18598,3,33879,38,44957,4,47.5,0,16,99,1,+++++,+++,255,0,253,4,+++++,+++,226,1 > ---------8<---------8<---------patch---------8<---------8<--------- > > fs/nilfs2/ioctl.c | 12 ++++++------ > 1 files changed, 6 insertions(+), 6 deletions(-) > > Signed-off-by: Jiro SEKIBA <[email protected]> > --- > fs/nilfs2/ioctl.c | 12 ++++++------ > 1 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/fs/nilfs2/ioctl.c b/fs/nilfs2/ioctl.c > index 6ea5f87..83a885c 100644 > --- a/fs/nilfs2/ioctl.c > +++ b/fs/nilfs2/ioctl.c > @@ -442,12 +442,6 @@ int nilfs_ioctl_prepare_clean_segments(struct the_nilfs > *nilfs, > const char *msg; > int ret; > > - ret = nilfs_ioctl_move_blocks(nilfs, &argv[0], kbufs[0]); > - if (ret < 0) { > - msg = "cannot read source blocks"; > - goto failed; > - } > - > ret = nilfs_ioctl_delete_checkpoints(nilfs, &argv[1], kbufs[1]); > if (ret < 0) { > /* > @@ -548,6 +542,12 @@ static int nilfs_ioctl_clean_segments(struct inode > *inode, struct file *filp, > } > } > > + ret = nilfs_ioctl_move_blocks(nilfs, &argv[0], kbufs[0]); > + if (ret < 0) { > + printk(KERN_ERR "NILFS: GC failed during preparation: cannot > read source blocks: err=%d\n", ret); > + goto out_free; > + } > + > ret = nilfs_clean_segments(inode->i_sb, argv, kbufs); > > out_free: > -- > 1.5.6.5 _______________________________________________ users mailing list [email protected] https://www.nilfs.org/mailman/listinfo/users
