On Fri, Mar 15, 2019 at 12:36:34PM -0500, Eric Sandeen wrote: > On 3/14/19 4:05 PM, Darrick J. Wong wrote: > > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > > > During phases 2-5, xfs_scrub should estimate the level of > > parallelization possible on the data device to determine the number of > > threads spawned to scrub filesystem metadata, not just blindly using the > > number of CPUs. This avoids flooding non-rotational storage with random s/non-//g in the line above, is what you complained about last time and then I didn't bother to fix for subsequent repostings. :( --D > > reads, which totally destroys performance and makes scrub runtimes > > higher. > > > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > seems like when I first looked at this I had a concern but now I don't > remember, and today it seems fine? :) > > Reviewed-by: Eric Sandeen <sandeen@xxxxxxxxxx> > > > --- > > scrub/phase1.c | 14 +++++++------- > > 1 file changed, 7 insertions(+), 7 deletions(-) > > > > > > diff --git a/scrub/phase1.c b/scrub/phase1.c > > index 2113014b..6b472147 100644 > > --- a/scrub/phase1.c > > +++ b/scrub/phase1.c > > @@ -109,13 +109,6 @@ _("Must be root to run scrub.")); > > return false; > > } > > > > - ctx->nr_io_threads = nproc; > > - if (verbose) { > > - fprintf(stdout, _("%s: using %d threads to scrub.\n"), > > - ctx->mntpoint, scrub_nproc(ctx)); > > - fflush(stdout); > > - } > > - > > if (!platform_test_xfs_fd(ctx->mnt_fd)) { > > str_info(ctx, ctx->mntpoint, > > _("Does not appear to be an XFS filesystem!")); > > @@ -193,6 +186,13 @@ _("Unable to find realtime device path.")); > > return false; > > } > > > > + ctx->nr_io_threads = disk_heads(ctx->datadev); > > + if (verbose) { > > + fprintf(stdout, _("%s: using %d threads to scrub.\n"), > > + ctx->mntpoint, scrub_nproc(ctx)); > > + fflush(stdout); > > + } > > + > > if (ctx->fsinfo.fs_log) { > > ctx->logdev = disk_open(ctx->fsinfo.fs_log); > > if (error) { > >