From: Ben McKeegan on
Paul Mackerras wrote:

>> I needed to do something similar a while back and I took a very
>> different approach, which I think is more flexible. Rather than
>> implement a new round-robin scheduler I simply introduced a target
>> minimum fragment size into the fragment size calculation, as a per
>> bundle parameter that can be configured via a new ioctl. This
>> modifies the algorithm so that it tries to limit the number of
>> fragments such that each fragment is at least the minimum size. If
>> the minimum size is greater than the packet size it will not be
>> fragmented all but will instead just get sent down the next
>> available channel.
>>
>> A pppd plugin generates the ioctl call allowing this to be tweaked
>> per connection. It is more flexible in that you can still have the
>> larger packets fragmented if you wish.
>
> I like this a lot better than the other proposed patch. It adds less
> code because it uses the fact that ppp_mp_explode() already has a
> round-robin capability using the ppp->nxchan field, plus it provides a
> way to control it per bundle via pppd.
>
> If you fix up the indentation issues (2-space indent in some of the
> added code -- if you're using emacs, set c-basic-offset to 8), I'll
> ack it and hopefully DaveM will pick it up.

Okay, I'll fix it up when I'm back at work Tuesday and submit (today is
a UK public holiday) and also dig out and fix up the userspace code to
go with it.

Ben.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
From: Ben McKeegan on
Ben McKeegan wrote:
> Paul Mackerras wrote:
>
>>> I needed to do something similar a while back and I took a very
>>> different approach, which I think is more flexible. Rather than
>>> implement a new round-robin scheduler I simply introduced a target
>>> minimum fragment size into the fragment size calculation, as a per
>>> bundle parameter that can be configured via a new ioctl. This
>>> modifies the algorithm so that it tries to limit the number of
>>> fragments such that each fragment is at least the minimum size. If
>>> the minimum size is greater than the packet size it will not be
>>> fragmented all but will instead just get sent down the next
>>> available channel.
>>>
>>> A pppd plugin generates the ioctl call allowing this to be tweaked
>>> per connection. It is more flexible in that you can still have the
>>> larger packets fragmented if you wish.
>>
>> I like this a lot better than the other proposed patch. It adds less
>> code because it uses the fact that ppp_mp_explode() already has a
>> round-robin capability using the ppp->nxchan field, plus it provides a
>> way to control it per bundle via pppd.
>>
>> If you fix up the indentation issues (2-space indent in some of the
>> added code -- if you're using emacs, set c-basic-offset to 8), I'll
>> ack it and hopefully DaveM will pick it up.
>
> Okay, I'll fix it up when I'm back at work Tuesday and submit (today is
> a UK public holiday) and also dig out and fix up the userspace code to
> go with it.

Still working on this, updating the patch wasn't as trivial as I thought
as it clashed with Gabriele Paoloni's ppp_mp_explode redesign. However,
while looking at this code I believe I have found a bug which might have
been contributing to the poor performance the OP was experiencing. For
the case where channel speeds are unknown and there are more than 2
channels it would miscalculate the fragment sizes so they are not
balanced on the channels.

Patch for the bug to follow immediately.

Regards,
Ben.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/