Whamcloud - gitweb
LU-16169 e2fsck: fix parallel thread balance 92/53292/3
authorAndreas Dilger <adilger@whamcloud.com>
Thu, 30 Nov 2023 09:28:58 +0000 (02:28 -0700)
committerLi Dongyang <dongyangli@ddn.com>
Wed, 6 Dec 2023 23:45:27 +0000 (23:45 +0000)
commitf4ba833854aceb430f4ded14789d55eb4a30b4f6
tree572793e9fa34a06dff57ab6a8c64abfc4e1af38e
parentc573b3c046027a995d7e25dfdc25231f958faee0
LU-16169 e2fsck: fix parallel thread balance

Calculate the average number of *used* inodes for each thread to
process instead of the overall average number of inodes in the
filesystem per thread.  Otherwise, if the filesystem is not very
full it will allocate too many groups to the first threads and
none to the last threads.

For example, a filesystem with a total of 5242880 inodes, with
3789293 used inodes should process on average 473661 used inodes
per thread with 8 threads, but this wasn't the case:

    # e2fsck -fn -m8 /dev/vgmyth/lvmythmdt0.ssd
    Pass 1: Checking inodes, blocks, and sizes
    [Thread 0] Scan group range [0, 20), inode_count = 655358/655360
    [Thread 1] Scan group range [20, 40), inode_count = 655360/655360
    [Thread 2] Scan group range [40, 66), inode_count = 647340/655360
    [Thread 3] Scan group range [66, 92), inode_count = 651555/655360
    [Thread 4] Scan group range [92, 112), inode_count = 655360/655360
    [Thread 5] Scan group range [112, 160), inode_count = 524320/655360
    [Thread 6] Scan group range [159, 160), inode_count = 0/655360
    [Thread 7] Scan group range [159, 160), inode_count = 0/655360

With the fix the thread balance is much better, with each thread
processing approximately the same number of used inodes, even the
last thread which has more groups but with fewer used inodes:

    Pass 1: Checking inodes, blocks, and sizes
    [Thread 0] Scan group range [0, 13], used inodes 458750/458752
    [Thread 1] Scan group range [14, 28], used inodes 491520/491520
    [Thread 2] Scan group range [29, 42], used inodes 458752/458752
    [Thread 3] Scan group range [43, 63], used inodes 486191/688128
    [Thread 4] Scan group range [64, 84], used inodes 485024/688128
    [Thread 5] Scan group range [85, 98], used inodes 458752/458752
    [Thread 6] Scan group range [99, 113], used inodes 491520/491520
    [Thread 7] Scan group range [114, 159], used inodes 458784/1507328

Also print the group ranges as closed sets so the brackets align.

Change-Id: If0536d50bf82d0ca76399dad825a894218af0e3f
Fixes: 4e82819edc ("LU-16169 e2fsck: improve parallel thread balance")
Signed-off-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/tools/e2fsprogs/+/53292
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Li Dongyang <dongyangli@ddn.com>
e2fsck/pass1.c
tests/f_multithread/expect.1
tests/f_multithread_logfile/expect.1
tests/f_multithread_no/expect.1