mptcp_net-next
mptcp_net-next copied to clipboard
scheduler: frequently probe "stale" subflow with reinjected data
Subflows marked as "stale" should be probed from time to time, e.g. once per RTT if there are data to send, at the end of a batch.
Currently, these subflows will be somehow probed if there are data in the subflow send queue thanks to TCP RTO. But once the send queue has been emptied and if the packet scheduler wants to keep the subflow as "stale", it is no longer probed.
If there are data to send at MPTCP level and nothing in the send queue of the subflow marked as "stale", the subflow should be probed by reinjecting already and still in-flight data (one full packet or one byte). It is important here to duplicate data not to block the transfer by using a "bad" subflow.
One of the challenges here is how to design the probing.
- If you send probes, it is to verify that the subflow connection is still alive but the RTT value resulting of the probe might be unreliable to consider it for a scheduling decision;
- If you probe too often, depending on the environment you are e.g. cellualr networks, there is a cost per byte sent and the probe_t1 might not reflecht the RTT of probe_t2 depending on the behavior of the user (mobility);
I agree in principle to mark subflows as stale, but the question is how to best "reactiviate" it without making a suboptimal scheduling decision e.g. if you look at RTT and CWND as metrics. Maybe using already inflight or duplicates is a way, however, will it need some additional logic to sort this out for the sender?
Hi @sferlin,
Thank you for your feedback (and sorry for the delay, I was off and a huge backlog :( )
Good point, when we use this, we need to be careful about the consequences.
I think the use-case we had in mind is something like: we were using a subflow but it got bad, we marked it as "stale" but we want to know if we can re-use it. So it should be fine to re-use it and if we would like to (e.g. because we need more capacity) we just need to probe it min once every 1 RTT to be able to unmark it.