Re: [PATCH v2 06/14] libmultipath: io_err_stat: use higher number of aio slots

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

 



On Thu, Oct 26, 2023 at 07:41:45PM +0200, mwilck@xxxxxxxx wrote:
> From: Martin Wilck <mwilck@xxxxxxxx>
> 
> Currently the number of iocbs per path to test is the same as the
> total number of iocbs in the ioctx. This can easily cause iocb
> starvation, in particular if some IOs are hanging. In that case
> io_submit() will fail, and some paths under test will use much
> less IOs as intended, or in the worst case, none at all.
> 
> The total number of iocbs reserved in the kernel should be higher.
> With this patch, we will be able to run the marginal path test for
> at least NR_IOSTAT_PATHS=32 paths at the same time. This is not an upper
> limit, because kernel IOCBs can be reused between paths.
> 
> Increase the log levels of io_setup and io_submit to make it sure
> we catch problems with this approach.
> 
> Signed-off-by: Martin Wilck <mwilck@xxxxxxxx>
Reviewed-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx>
> Cc: Li Xiao Keng <lixiaokeng@xxxxxxxxxx>
> Cc: Miao Guanqin <miaoguanqin@xxxxxxxxxx>
> Cc: Guan Junxiong <guanjunxiong@xxxxxxxxxx>
> ---
>  libmultipath/io_err_stat.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/libmultipath/io_err_stat.c b/libmultipath/io_err_stat.c
> index 3f32e32..5749003 100644
> --- a/libmultipath/io_err_stat.c
> +++ b/libmultipath/io_err_stat.c
> @@ -38,6 +38,7 @@
>  #define TIMEOUT_NO_IO_NSEC		10000000 /*10ms = 10000000ns*/
>  #define FLAKY_PATHFAIL_THRESHOLD	2
>  #define CONCUR_NR_EVENT			32
> +#define NR_IOSTAT_PATHS			32
>  
>  #define PATH_IO_ERR_IN_CHECKING		-1
>  #define PATH_IO_ERR_WAITING_TO_CHECK	-2
> @@ -477,7 +478,7 @@ static int send_each_async_io(struct dio_ctx *ct, int fd, char *dev)
>  		get_monotonic_time(&ct->io_starttime);
>  		io_prep_pread(&ct->io, fd, ct->buf, ct->blksize, 0);
>  		if (io_submit(ioctx, 1, ios) != 1) {
> -			io_err_stat_log(5, "%s: io_submit error %i",
> +			io_err_stat_log(2, "%s: io_submit error %i",
>  					dev, errno);
>  			return rc;
>  		}
> @@ -703,8 +704,8 @@ int start_io_err_stat_thread(void *data)
>  	if (uatomic_read(&io_err_thread_running) == 1)
>  		return 0;
>  
> -	if (io_setup(CONCUR_NR_EVENT, &ioctx) != 0) {
> -		io_err_stat_log(4, "io_setup failed");
> +	if (io_setup(CONCUR_NR_EVENT * NR_IOSTAT_PATHS, &ioctx) != 0) {
> +		io_err_stat_log(1, "io_setup failed - increase /proc/sys/fs/aio-nr ?");
>  		return 1;
>  	}
>  
> -- 
> 2.42.0





[Index of Archives]     [DM Crypt]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Packaging]     [Fedora SELinux]     [Yosemite Discussion]     [KDE Users]     [Fedora Docs]

  Powered by Linux