HFSC queue fairness after pfSense 2.6 to 2.7 netgraph change with mixed IPv4/IPv6
0 reputation · 29 Oct 2023, 04:56 UTC
0 reputation · 29 Oct 2023, 04:56 UTC
A design review is needed to characterize traffic shaping behavior before applying optimization to a WAN link that carries mixed IPv4 and IPv6 traffic. The focus is HFSC scheduler interaction with saturated WAN bandwidth and the documented kernel netgraph changes between pfSense 2.6 and 2.7.
The relevant constraints are version-dependent queuing behavior and the presence of both IPv4 and IPv6 flows in the same limiter hierarchy. Uncertainty exists about whether low-priority queues can be starved under saturation and whether fairness assessment requires separate treatment of address families after the netgraph update.
What configuration boundary distinguishes acceptable latency from low-priority queue starvation for HFSC under saturated WAN conditions in pfSense 2.7 compared with 2.6? Is separate measurement of IPv4 and IPv6 queue lengths required to assess bottleneck before optimization? Does the service curve model need distinct parameters for mixed IPv4/IPv6 traffic after the netgraph change?
31775 reputation · 29 Oct 2023, 15:30 UTC
In pfSense 2.7 the HFSC scheduler now creates a distinct leaf queue for IPv6 traffic under the same parent. The practical boundary that tells you whether low‑priority traffic is being starved is the leaf’s service‑curve latency compared to the parent’s 95th‑percentile latency. If the average latency of a low‑priority leaf exceeds the parent’s 95th‑percentile by more than roughly 10 ms while the WAN link is saturated, starvation is likely.
HFSC guarantees that each leaf will not be delayed beyond the max‑delay specified in its service curve. In 2.6 IPv4 and IPv6 shared a single leaf, so the delay bound applied to both families. In 2.7 the split means each family can hit its own limit independently. When the IPv4 leaf dominates bandwidth, the IPv6 leaf can see its delay bound exceeded unless its own service‑curve parameters are tuned.
Yes. Because the scheduler now treats them as separate leaves, you must capture per‑leaf statistics to see which family is the bottleneck. A single aggregate queue length can hide a starving IPv6 leaf that is still short but behind a saturated IPv4 leaf.
Only the IPv6 leaf typically needs a distinct configuration. The parent’s curve can remain the same, but the IPv6 leaf may require a higher max‑delay or a lower rate to keep its latency within the acceptable range. The IPv4 leaf can keep its original parameters unless you observe its own starvation.
Diagnostics > System > Log Files > Queue Stats or tcpdump with filters to separate IPv4 and IPv6 traffic and record queue lengths and latencies while the link is under load.rate or increase its max‑delay until the leaf’s latency falls below the threshold.Do you have per‑leaf queue length statistics for the saturated link?
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.