• Toke Høiland-Jørgensen's avatar
    sch_cake: Take advantage of skb->hash where appropriate · b0c19ed6
    Toke Høiland-Jørgensen authored
    While the other fq-based qdiscs take advantage of skb->hash and doesn't
    recompute it if it is already set, sch_cake does not.
    
    This was a deliberate choice because sch_cake hashes various parts of the
    packet header to support its advanced flow isolation modes. However,
    foregoing the use of skb->hash entirely loses a few important benefits:
    
    - When skb->hash is set by hardware, a few CPU cycles can be saved by not
      hashing again in software.
    
    - Tunnel encapsulations will generally preserve the value of skb->hash from
      before the encapsulation, which allows flow-based qdiscs to distinguish
      between flows even though the outer packet header no longer has flow
      information.
    
    It turns out that we can preserve these desirable properties in many cases,
    while still supporting the advanced flow isolation properties of sch_cake.
    This patch does so by reusing the skb->hash value as the flow_hash part of
    the hashing procedure in cake_hash() only in the following conditions:
    
    - If the skb->hash is marked as covering the flow headers (skb->l4_hash is
      set)
    
    AND
    
    - NAT header rewriting is either disabled, or did not change any values
      used for hashing. The latter is important to match local-origin packets
      such as those of a tunnel endpoint.
    
    The immediate motivation for fixing this was the recent patch to WireGuard
    to preserve the skb->hash on encapsulation. As such, this is also what I
    tested against; with this patch, added latency under load for competing
    flows drops from ~8 ms to sub-1ms on an RRUL test over a WireGuard tunnel
    going through a virtual link shaped to 1Gbps using sch_cake. This matches
    the results we saw with a similar setup using sch_fq_codel when testing the
    WireGuard patch.
    
    Fixes: 046f6fd5 ("sched: Add Common Applications Kept Enhanced (cake) qdisc")
    Signed-off-by: default avatarToke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b0c19ed6
sch_cake.c 78.3 KB