-
Notifications
You must be signed in to change notification settings - Fork 180
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
L4S simulation is simplistic #1825
Comments
The PI2 algorithm is specified in Annex A of RFC 9332. The initial variables are:
Note that The packet handling and rate update code utilizes the objects
The update algorithms runs every
The proposed implementation distinguishes time to "enqueue" and "dequeue". We don't really do that in our simulation architecture, since we combine the two functions and mark the packet with a dequeue time corresponding to delivery over the link, but the key parts are:
|
The test code has minimal support for L4S-style active queue management: each link description has an
l4smax
property. If the queue size exceeds that value, the incoming packets are marked ascongestion experienced
. This allows us to test the Prague or ECN code paths, but it is not quite the "Dual-Queue Coupled AQM" described in RFC 9332:The multiple queue requirement is hard to satisfy in our architecture. The current design has just one queue, serviced first-in first-out. If we introduce two queues, we have to decide a service rate for each of the queues. The L4S specification envisages giving priority to the L4S queue, but that does not seem fair if there is just one connection using the L4S queue and many using the default queue.
The handling can be simplified by using just one queue, but computing a marking rate based on the delay experienced by L4S packets. We could update the marking rate for each incoming L4S packet. This is wrong because if there is no incoming L4S packet at all, the marking rate remains constant. We could update the marking rate periodically, based on the longest delay experienced by L4S packet during that period -- or zero if there are no L4S packets. We could also update the marking rate periodically, but using delay measurement for every incoming packet, L4S or not, which is more robust -- and is indeed what appears recommended for the PI2. It does have the downside of preventing non L4S traffic from building queues, which might slow it somewhat -- but that's logical if we only manage a single queue.
When doing periodic updates, we have to consider the "response time" of the system. If a router increases the marking rate, the traffic will only slow down after about 1 RTT -- but the router does not know the end-to-end RTT. Applying control actions too often or too brutally can lead to oscillations. The original PI controller uses a default period of 15ms, which is the same as the target latency value. In our simulation, the target latency value is the parameter
l4smax
-- we may want to use it for both the update period and the latency target.The text was updated successfully, but these errors were encountered: