Closed bcronje closed 6 years ago
When PCC sets the congestion window, it sets it such that the cwnd does not interfere with the rate-based control. PCC is a rate-based congestion control family, so it doesn't really need a congestion window. Because many implementations have congestion windows built in, we're forced to set it to something high, like the BDP, so it doesn't stop us from sending. BBR uses a similar trick.
Hi Nathan.
I'm quite familiar with the BBR spec and they use a combination of pacing + cwnd + send quantum. Hence my assumption that PCC also combines rate (how fast to send) with cwnd (how much data permitted on pipe).
So if I understand you correctly, if I integrate PCC with our protocol, I could purely rely on the rate to emit data on the network given that the receiver has space?
My understanding of the choice of cwnd in BBR is that they set it high enough that it shouldn't get in the way of sending at their chosen pace.
You should be able to rely entirely on the rate limiting to emit data at an appropriate pace. It shouldn't even really matter if the receiver has space. PCC just measures the response to packets and reacts accordingly. Whether it is a network buffer or receiver-side buffer that drops a packet because of lack of space, PCC understands both to mean that packet loss has increased, and should back off accordingly.
Thank you for your feedback @nathanhjay
I've started reviewing the PCC code and need some clarification on how PCC uses or sets the congestion window (cwnd).
I've setup my local repository for UDT running the command
sunifdef -r -UQUIC_PORT -UQUIC_PORT_LOCAL ./pcc/\*
. But looking at the code I do not see anywhere that PCC actually sets or changes the congestion window. I can see PCC calculates the rate and applies the utility function etc, but nowhere in the code or in the paper can I see how PCC manages the congestion window.If I look at the QUIC code there does seem to be a PccSender::GetCongestionWindow() function, that appears to set the congestion window to BDP.
Can anyone explain to me how PCC should be managing the congestion window? Or point me to a paper that gives more information on how it should work?