Re: [PATCH 03/17] stat: save the default ioprio in struct thread_stat

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

 



On 2/1/22 06:13, Niklas Cassel wrote:
> From: Niklas Cassel <niklas.cassel@xxxxxxx>
> 
> To be able to report clat stats on a per priority granularity (instead of
> only high/low priority), we need to be able to get the priority value that
> was used for the stats in clat_stat.
> 
> When a thread is using a single priority (e.g. option prio/prioclass is
> used (without any cmdprio options)), all the clat stats for this thread
> will be stored in clat_stat. The problem with this is sum_thread_stats()
> does not know the priority value that corresponds to the stats stored in
> clat_stat.
> 
> Since we cannot access td->ioprio from sum_thread_stats(), simply mirror
> td->ioprio inside struct thread_stat.
> 
> This way, sum_thread_stats() will be able to reuse the global clat stats
> in clat_stat, without the need to duplicate the data for per priority
> stats, in the case where there is only a single priority in use.
> 
> Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>
> ---
>  backend.c | 1 +
>  client.c  | 1 +
>  server.c  | 1 +
>  stat.h    | 3 +++
>  4 files changed, 6 insertions(+)
> 
> diff --git a/backend.c b/backend.c
> index f7398b23..abaaeeb8 100644
> --- a/backend.c
> +++ b/backend.c
> @@ -1786,6 +1786,7 @@ static void *thread_main(void *data)
>  			goto err;
>  		}
>  		td->ioprio = ioprio_value(o->ioprio_class, o->ioprio);
> +		td->ts.ioprio = td->ioprio;
>  	}
>  
>  	if (td_io_init(td))
> diff --git a/client.c b/client.c
> index be8411d8..381af054 100644
> --- a/client.c
> +++ b/client.c
> @@ -953,6 +953,7 @@ static void convert_ts(struct thread_stat *dst, struct thread_stat *src)
>  	dst->pid		= le32_to_cpu(src->pid);
>  	dst->members		= le32_to_cpu(src->members);
>  	dst->unified_rw_rep	= le32_to_cpu(src->unified_rw_rep);
> +	dst->ioprio		= le32_to_cpu(src->ioprio);
>  
>  	for (i = 0; i < DDIR_RWDIR_CNT; i++) {
>  		convert_io_stat(&dst->clat_stat[i], &src->clat_stat[i]);
> diff --git a/server.c b/server.c
> index 90c52e01..af94cd78 100644
> --- a/server.c
> +++ b/server.c
> @@ -1483,6 +1483,7 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs)
>  	p.ts.pid		= cpu_to_le32(ts->pid);
>  	p.ts.members		= cpu_to_le32(ts->members);
>  	p.ts.unified_rw_rep	= cpu_to_le32(ts->unified_rw_rep);
> +	p.ts.ioprio		= cpu_to_le32(ts->ioprio);
>  
>  	for (i = 0; i < DDIR_RWDIR_CNT; i++) {
>  		convert_io_stat(&p.ts.clat_stat[i], &ts->clat_stat[i]);
> diff --git a/stat.h b/stat.h
> index 15ca4eff..3ce821a7 100644
> --- a/stat.h
> +++ b/stat.h
> @@ -252,6 +252,9 @@ struct thread_stat {
>  	fio_fp64_t ss_deviation;
>  	fio_fp64_t ss_criterion;
>  
> +	/* A mirror of td->ioprio. */
> +	uint32_t ioprio;
> +
>  	uint64_t io_u_plat_high_prio[DDIR_RWDIR_CNT][FIO_IO_U_PLAT_NR] __attribute__((aligned(8)));;
>  	uint64_t io_u_plat_low_prio[DDIR_RWDIR_CNT][FIO_IO_U_PLAT_NR];
>  	struct io_stat clat_high_prio_stat[DDIR_RWDIR_CNT] __attribute__((aligned(8)));

Reviewed-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx>

-- 
Damien Le Moal
Western Digital Research



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux