[dm-devel] Re: [PATCH 3/3] dm-mpath: add service-time oriented dynamic load balancer
Kiyoshi Ueda
k-ueda at ct.jp.nec.com
Fri May 15 03:09:21 UTC 2009
Hi Alasdair,
Thank you for the review and comments.
I'm totally agree with your comments.
I found that you have already updated the patch in your editing tree, thanks.
But I'm considering to update the patch to be simpler.
Please see below.
On 05/09/2009 09:49 AM +0900, Alasdair G Kergon wrote:
> On Fri, Apr 24, 2009 at 05:08:02PM +0900, Kiyoshi Ueda wrote:
>> + struct selector *s = (struct selector *) ps->context;
>> + status_type_t type, char *result, unsigned int maxlen)
>> + int sz = 0;
>> + DMEMIT("%u %lu ", atomic_read(&pi->in_flight_size),
>
> (similar comments)
OK, you have already fixed the pointer cast, the sz type and
the print format for in_flight_size.
I'll fix the type of maxlen.
>> +/*
>> + * Returns:
>> + * < 0 : pi1 is better
>> + * 0 : no difference between pi1 and pi2
>> + * > 0 : pi2 is better
>> + */
>
> Please document the parameters and algorithm.
> Nothing explains what the performance value is for and examples of anticipated values.
OK, I'll add comments and documentation like the attached patch.
>> + DMEMIT("%u %lu ", pi->repeat_count, pi->perf);
>
> Need to handle both 32 and 64 bit archs: cast to llu.
>
>> + if ((argc == 2) && (sscanf(argv[1], "%lu", &perf) != 1)) {
>
> Please do sscanf for size_t the same way as dm-crypt does.
> (Or scan for lu, if the intent is to impose a size limit ahead of the later
> do_div() then cast explicitly.)
>
>> + do_div(sz1, pi1->perf);
>> + do_div(sz2, pi2->perf);
>
> Or sector_div ?
>
> But what's the performance of those divisions like?
> Is there a better way of getting the same answer?
> Is there validation limiting the size of 'perf'?
I tried to use multiplication before, but it didn't work well,
because overflow happened when 'in_flight_size' and 'perf' had
pretty big values, and then I got wrong comparison results.
So I decided to use division.
However, if I limit the 'perf' value in smaller range (e.g. 0 to 100),
such overflow shouldn't happen. So I should be able to use
multiplication. Also, I don't need to use size_t for 'perf',
because 'unsinged' should be enough for such small values.
> (Also, did you check there's adequate locking & memory barriers around all the
> atomics?)
Yes, I did and I found no problem in both dm-queue-length and
dm-service-time.
Thanks,
Kiyoshi Ueda
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: rqdm-dlb-04-service-time-dlb-document.patch
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20090515/e6f03475/attachment.ksh>
More information about the dm-devel
mailing list