Re: [PATCH 3/4] xfs_io: add a quiet option to bulkstat

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 27, 2022 at 09:44:52AM +1000, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> 
> This is purely for driving the kernel bulkstat operations as hard
> as userspace can drive them - we don't care about the actual output,
> just want to drive maximum IO rates through the inode cache.
> 
> Bulkstat at 3.4 million inodes a second via xfs_io currently burns
> about 30% of CPU time just formatting and outputting the stat
> information to stdout and dumping it to /dev/null.
> 
> 		wall time	rate	IOPS	bandwidth
> unpatched	17.823s		3.4M/s	70k	1.9GB/s
> with -q		15.682		6.1M/s  150k	3.5GB/s
> 
> The disks are at about 30% of max bandwidth and only at 70kiops, so
> this CPU can be used to drive the kernel and IO subsystem harder.
> 
> Wall time doesn't really go down on this specific test because the
> increase in inode cache turn-over (about 10GB/s of cached metadata
> (in-core inodes and buffers) is being cycled through memory on a
> machine with 16GB of RAM) and that hammers memory reclaim into a
> utter mess that often takes seconds for it to recover from...
> 
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>

Heh, moar bulkstat.

Reviewed-by: Darrick J. Wong <djwong@xxxxxxxxxx>

--D

> ---
>  io/bulkstat.c     | 9 ++++++++-
>  man/man8/xfs_io.8 | 6 +++++-
>  2 files changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/io/bulkstat.c b/io/bulkstat.c
> index 201470b29223..411942006591 100644
> --- a/io/bulkstat.c
> +++ b/io/bulkstat.c
> @@ -67,6 +67,7 @@ bulkstat_help(void)
>  "\n"
>  "   -a <agno>  Only iterate this AG.\n"
>  "   -d         Print debugging output.\n"
> +"   -q         Be quiet, no output.\n"
>  "   -e <ino>   Stop after this inode.\n"
>  "   -n <nr>    Ask for this many results at once.\n"
>  "   -s <ino>   Inode to start with.\n"
> @@ -104,11 +105,12 @@ bulkstat_f(
>  	uint32_t		ver = 0;
>  	bool			has_agno = false;
>  	bool			debug = false;
> +	bool			quiet = false;
>  	unsigned int		i;
>  	int			c;
>  	int			ret;
>  
> -	while ((c = getopt(argc, argv, "a:de:n:s:v:")) != -1) {
> +	while ((c = getopt(argc, argv, "a:de:n:qs:v:")) != -1) {
>  		switch (c) {
>  		case 'a':
>  			agno = cvt_u32(optarg, 10);
> @@ -135,6 +137,9 @@ bulkstat_f(
>  				return 1;
>  			}
>  			break;
> +		case 'q':
> +			quiet = true;
> +			break;
>  		case 's':
>  			startino = cvt_u64(optarg, 10);
>  			if (errno) {
> @@ -198,6 +203,8 @@ _("bulkstat: startino=%lld flags=0x%x agno=%u ret=%d icount=%u ocount=%u\n"),
>  		for (i = 0; i < breq->hdr.ocount; i++) {
>  			if (breq->bulkstat[i].bs_ino > endino)
>  				break;
> +			if (quiet)
> +				continue;
>  			dump_bulkstat(&breq->bulkstat[i]);
>  		}
>  	}
> diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8
> index e3c5d3ea99dd..d876490bf65d 100644
> --- a/man/man8/xfs_io.8
> +++ b/man/man8/xfs_io.8
> @@ -1143,7 +1143,7 @@ for the current memory mapping.
>  
>  .SH FILESYSTEM COMMANDS
>  .TP
> -.BI "bulkstat [ \-a " agno " ] [ \-d ] [ \-e " endino " ] [ \-n " batchsize " ] [ \-s " startino " ] [ \-v " version" ]
> +.BI "bulkstat [ \-a " agno " ] [ \-d ] [ \-e " endino " ] [ \-n " batchsize " ] [ \-q ] [ \-s " startino " ] [ \-v " version" ]
>  Display raw stat information about a bunch of inodes in an XFS filesystem.
>  Options are as follows:
>  .RS 1.0i
> @@ -1164,6 +1164,10 @@ Defaults to stopping when the system call stops returning results.
>  Retrieve at most this many records per call.
>  Defaults to 4,096.
>  .TP
> +.BI \-q
> +Run quietly.
> +Does not parse or output retrieved bulkstat information.
> +.TP
>  .BI \-s " startino"
>  Display inode allocation records starting with this inode.
>  Defaults to the first inode in the filesystem.
> -- 
> 2.35.1
> 



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux