[dm-devel] [PATCH 3/4] libmultipath: path latency: simplify getprio()
Guan Junxiong
guanjunxiong at huawei.com
Thu Dec 7 04:26:15 UTC 2017
Hi Martin,
I have tested this patch and found something needed to be correct. My comments inline.
On 2017/11/18 8:11, Martin Wilck wrote:
> The log standard deviation can be calculated much more simply
> by realizing
>
> sum_n (x_i - avg(x))^2 == sum_n x_i^2 - n * avg(x)^2
>
> @@ -340,8 +323,14 @@ int getprio(struct path *pp, char *args, unsigned int timeout)
> ".It is recommend to be set larger",
> pp->dev, base_num);
>
> + standard_deviation = sqrt((sum_squares - lg_toldelay * lg_toldelay)
> + / (io_num -1));
>
This assignment is wrong. It gets a "NAN" for standard_deviation.
It should be the following equation according to sum_n (x_i - avg(x))^2 == sum_n x_i^2 - n * avg(x)^2
standard_deviation = sqrt((sum_squares - io_num* lg_avglatency* lg_avglatency)/ (io_num -1));
= sqrt((sum_squares - lg_toldelay* lg_avglatency)/ (io_num -1));
> rc = calcPrio(lg_avglatency, lg_maxavglatency, lg_minavglatency);
>
> + pp_pl_log(3, "%s: latency avg=%.2e uncertainty=%.1f prio=%d\n",
> + pp->dev, exp(lg_avglatency * lg_base),
> + exp(standard_deviation * lg_base), rc);
> +
I still have the doubt about the computation of the "uncertainty" item.
Because I have observed that the uncertainty is in the range of 1.3 ~ 1.6 whenever
the base_num varies from 1.1 to 10.
Do you mean the uncertainty as the "Error function" of (log) normal distribution?
Here is the definition of https://en.wikipedia.org/wiki/Error_function
I prefer to using "Error function" that describes accumulated probability of how prio
locates in the (-inf, prio-1) and (prio+1, +inf).
Thanks
Guan
More information about the dm-devel
mailing list