Re: getdents - ext4 vs btrfs performance
From: Jacek Luczak <hidden>
Date: 2012-03-03 22:41:46
Also in:
linux-btrfs, linux-fsdevel, lkml
2012/3/2 Chris Mason [off-list ref]:
On Fri, Mar 02, 2012 at 03:16:12PM +0100, Jacek Luczak wrote:quoted
2012/3/2 Chris Mason [off-list ref]:quoted
On Fri, Mar 02, 2012 at 11:05:56AM +0100, Jacek Luczak wrote:quoted
I've took both on tests. The subject is acp and spd_readdir used with tar, all on ext4: 1) acp: http://91.234.146.107/~difrost/seekwatcher/acp_ext4.png 2) spd_readdir: http://91.234.146.107/~difrost/seekwatcher/tar_ext4_readir.png 3) both: http://91.234.146.107/~difrost/seekwatcher/acp_vs_spd_ext4.png The acp looks much better than spd_readdir but directory copy with spd_readdir decreased to 52m 39sec (30 min less).Do you have stats on how big these files are, and how fragmented they are? For acp and spd to give us this, I think something has gone wrong at writeback time (creating individual fragmented files).How big? Which files?All the files you're reading ;) filefrag will tell you how many extents each file has, any file with more than one extent is interesting. (The ext4 crowd may have better suggestions on measuring fragmentation). Since you mention this is a compile farm, I'm guessing there are a bunch of .o files created by parallel builds. There are a lot of chances for delalloc and the kernel writeback code to do the wrong thing here.
This took some time be here it goes ... * B size files - total: 1064462 (53.81%) | Size range | File cnt | Fragmented | Fragmented % | | [0,100) | 288702 | 0 | 0 | | [100,200) | 165997 | 0 | 0 | | [200,300) | 45993 | 0 | 0 | | [300,400) | 64883 | 0 | 0 | | [400,500) | 39282 | 0 | 0 | | [500,600) | 61612 | 0 | 0 | | [600,700) | 208822 | 0 | 0 | | [700,800) | 64016 | 0 | 0 | | [800,900) | 58181 | 0 | 0 | | [900,1024) | 66974 | 0 | 0 | * K size files - total: 907375 (45.86%) | Size range | File cnt | Fragmented | Fragmented % | | [1,2) | 285481 | 0 | 0 | | [2,3) | 148461 | 0 | 0 | | [3,4) | 102569 | 0 | 0 | | [4,5) | 45089 | 0 | 0 | | [5,6) | 44223 | 0 | 0 | | [6,10) | 94202 | 0 | 0 | | [10,20) | 83760 | 0 | 0 | | [20,30) | 42548 | 0 | 0 | | [30,40) | 15274 | 0 | 0 | | [40,50) | 4060 | 0 | 0 | | [50,60) | 3517 | 0 | 0 | | [60,100) | 7834 | 0 | 0 | | [100,1024) | 30357 | 0 | 0 | *M size files - total: 6312 (0.33%) | Size range | File cnt | Fragmented | Fragmented % | | [1.10) | 5806 | 100 | 1.72 | | [10,100) | 482 | 200 | 41.49 | | [100,1024) | 24 | 13 | 54.16 | All files scanned: 1978149 Files fragmented: 313 (0.015%) where 11 have 3+ extents Total size of fragmented files: 7GB (~13% of dir size) tar cf on fragmented files: 1) time: 7sec 2) sw graph: http://91.234.146.107/~difrost/seekwatcher/tar_fragmented.png 3) sw graph with spd_readdir: http://91.234.146.107/~difrost/seekwatcher/tar_fragmented_spd.png 4) both on one: http://91.234.146.107/~difrost/seekwatcher/tar_fragmented_pure_spd.png tar cf of fragmented files disturbed with [40,50) K files (in total 4373 files). K files before fragmented M files: 1) size: 7.2GB 2) time: 1m 14sec 3) sw graph: http://91.234.146.107/~difrost/seekwatcher/tar_disturbed.png 4) sw graph with spd_readdir: http://91.234.146.107/~difrost/seekwatcher/tar_disturbed_spd.png 5) both on one: http://91.234.146.107/~difrost/seekwatcher/tar_disturbed_pure_spd.png I will perform same tests on btrfs tomorrow. -Jacek