• Chao Yu's avatar
    f2fs: enhance foreground GC · 718e53fa
    Chao Yu authored
    If we configure section consist of multiple segments, foreground GC will
    do the garbage collection with following approach:
    
    	for each segment in victim section
    		blk_start_plug
    		for each valid block in segment
    			write out by OPU method
    		submit bio cache   <---
    		blk_finish_plug   <---
    
    There are two issue:
    1) for most of the time, 'submit bio cache' will break the merging in
    current bio buffer from writes of next segments, making a smaller bio
    submitting.
    2) block plug only cover IO submitting in one segment, which reduce
    opportunity of merging IOs in plug with multiple segments.
    
    So refactor the code as below structure to strive for biggest
    opportunity of merging IOs:
    
    	blk_start_plug
    	for each segment in victim section
    		for each valid block in segment
    			write out by OPU method
    	submit bio cache
    	blk_finish_plug
    
    Test method:
    1. mkfs.f2fs -s 8 /dev/sdX
    2. touch 32 files
    3. write 2M data into each file
    4. punch 1.5M data from offset 0 for each file
    5. trigger foreground gc through ioctl
    
    Before patch, there are totoally 40 bios submitted.
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 65536, size = 122880
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 65776, size = 122880
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 66016, size = 122880
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 66256, size = 122880
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 66496, size = 32768
    ----repeat for 8 times
    
    After patch, there are totally 35 bios submitted.
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 65536, size = 122880
    ----repeat 34 times
    f2fs_submit_write_bio: dev = (8,32), WRITE_SYNC, DATA, sector = 73696, size = 16384
    Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    718e53fa
gc.c 22 KB