Whamcloud - gitweb
LU-17814 utils: add parallel find arg 21/57221/14
authorPatrick Farrell <pfarrell@whamcloud.com>
Tue, 25 Mar 2025 16:10:14 +0000 (12:10 -0400)
committerOleg Drokin <green@whamcloud.com>
Fri, 25 Apr 2025 00:53:27 +0000 (00:53 +0000)
lfs find is currently serial, but it can be much faster if
we add a parallel implementation where it creates a work
unit for every directory and handles them in parallel.

This is the first patch of that implementation.

Add arg to control thread count.
No implementation yet.

Test-Parameters: trivial
Signed-off-by: Patrick Farrell <pfarrell@whamcloud.com>
Change-Id: I73b542decd75e1f7580f584d2ea6a219af51be4c
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/57221
Reviewed-by: Marc Vef <mvef@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/include/lustre/lustreapi.h
lustre/utils/lfs.c

index 614e498..15ee893 100644 (file)
@@ -422,6 +422,7 @@ struct find_param {
        int                      fp_bsign;
        unsigned int             fp_hash_inflags;
        unsigned int             fp_hash_exflags;
+       __u8                     fp_thread_count;
        /* Print all information (lfs find only) */
        char                     *fp_format_printf_str;
        nlink_t                  fp_nlink;
index c690d5c..7ace058 100755 (executable)
@@ -3727,6 +3727,7 @@ enum {
        LFS_QUOTA_IHARDLIMIT_OPT,
        LFS_QUOTA_IGRACE_OPT,
        LFS_FILES_FROM,
+       LFS_THREAD_OPT,
 };
 
 #ifndef LCME_USER_MIRROR_FLAGS
@@ -5801,6 +5802,8 @@ static int lfs_find(int argc, char **argv)
        { .val = LFS_POOL_OPT,
                        .name = "pool",         .has_arg = required_argument },
        { .val = '0',   .name = "print0",       .has_arg = no_argument },
+       { .val = LFS_THREAD_OPT,
+               .name = "thread",               .has_arg = required_argument },
        { .val = 'P',   .name = "print",        .has_arg = no_argument },
        { .val = LFS_PRINTF_OPT,
                        .name = "printf",       .has_arg = required_argument },
@@ -6493,6 +6496,9 @@ static int lfs_find(int argc, char **argv)
                case '0':
                        param.fp_zero_end = 1;
                        break;
+               case LFS_THREAD_OPT:
+                       param.fp_thread_count = strtol(optarg, &endptr, 0);
+                       break;
                case 'P': /* we always print, this option is a no-op */
                        break;
                case LFS_PRINTF_OPT: