Re: [PATCH 01/17] init: verify option lat_percentiles consistency for all jobs in group

[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>
> 
> lat_percentiles is used to control if the high/low latency statistics
> (which are saved in ts->io_u_plat_high_prio/ts->io_u_plat_high_prio)

missing io_u_plat_low_prio (io_u_plat_high_prio twice)

> should collect and display total latencies instead of completion latencies.
> 
> When doing group reporting, stat.c:__show_run_stats() happily overwrites
> the dst ts with the setting of each job, which means that the summing can
> take total lat samples for some jobs, and clat samples for some jobs, while
> adding samples into the same group result.
> 
> The output summary will claim that the results are of whatever type the
> final job in the group is set to.
> 
> To make sure that this cannot happen, verify that the option
> lat_percentiles is consistent for all jobs in group.
> 
> Signed-off-by: Niklas Cassel <niklas.cassel@xxxxxxx>

With the nit above fixed, this looks good to me.

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

> ---
>  init.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/init.c b/init.c
> index 07daaa84..7d5f2221 100644
> --- a/init.c
> +++ b/init.c
> @@ -1445,6 +1445,26 @@ static bool wait_for_ok(const char *jobname, struct thread_options *o)
>  	return true;
>  }
>  
> +static int verify_per_group_options(struct thread_data *td, const char *jobname)
> +{
> +	struct thread_data *td2;
> +	int i;
> +
> +	for_each_td(td2, i) {
> +		if (td->groupid != td2->groupid)
> +			continue;
> +
> +		if (td->o.stats &&
> +		    td->o.lat_percentiles != td2->o.lat_percentiles) {
> +			log_err("fio: lat_percentiles in job: %s differs from group\n",
> +				jobname);
> +			return 1;
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>  /*
>   * Treat an empty log file name the same as a one not given
>   */
> @@ -1563,6 +1583,10 @@ static int add_job(struct thread_data *td, const char *jobname, int job_add_num,
>  	td->groupid = groupid;
>  	prev_group_jobs++;
>  
> +	if (td->o.group_reporting && prev_group_jobs > 1 &&
> +	    verify_per_group_options(td, jobname))
> +		goto err;
> +
>  	if (setup_rate(td))
>  		goto err;
>  


-- 
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