Hi, CC'ing developers, it is a very important discussion and should be
keeped in mind for the future.
On 12/05/16 at 04:25pm, Qiao Zhang wrote:
> Hi Tommaso and Nat,
>
> I see that TCP socket Send() blocks and wakes up through callback when the
> TCP TxBuffer is full. Do you think it would properly back-pressure if I
> have a dynamic limit on the TCP TxBuffer that shrinks ahead of time when
> the underlying L2.5 or L2 buffer is close to full (simulating the behavior
> of TCP small buffer)? I'm hoping that BulkSend would see that its socket
> buffer is full and stop sending. However, I'm not sure if making TCP socket
> buffer smaller would actually slow down sending or simply adds some
> function call overhead *that doesn't really take up logical time* in ns-3.
Hi both,
first of all of course we should be sure that the losses are happening
in the node :). Anyway, in any case, the congestion control of TCP
should kick in when we exceed the rate allowed for anything along the
path. Without TCP-TC backpressure, these packets are lost; with TCP-TC
backressure, these packets remain in the application. That means that if
the TCP congestion control discover a local congestion, it could take
less drastic decisions.
Qiao, if you implement correctly what you are saying (shrinking the
sender buffer size), the bulk send application will stop transmitting.
Anyway, the thing that seems not so easy is the implementation itself:
for instance, how much space of the TC queue do you assign to each TCP
flow? A static value (e.g. 64, or queuedisc_max_size() / #TCP-flows)?
A dynamic one, based on cwnd? But depending on the rewarding strategy,
you will lock-out the flow with the smallest cwnd or cut the flow with
the biggest cwnd.. To be honest I don't know, I should take a look on
the Linux code.
Unfortunately, right now there's not possibility to know the max
dimension of the underlying queue disc; you should cast to every
possible type of queue disc (the same applies for ns3.23, with
s/QueueDisc/Queue/g). And another limitation is the API of IP layer...
Really interesting challenge by the way :)
Nat