Over here we had spectacular results by having wireguard pass the skb->hash to sqm...
However, that explicitly forces the hash on encapsulation if skb->hash has not already been calculated.
My question then became complicated -
For many years now, I have been making a possibly false assumption (in the case of embedded hardware) that the hash was already frequently calculated in the RSS (receive side steering) part of the path, and thus did not (usually) need to be calculated again. (Most of the higher end ethernet cards I work with do do RSS already...)
packets that enter the fq_codel qdisc or sqm directly gets a hash if it is not there, however in the case of encapsulation, it helps (see above wireguard link) a LOT if the inner hash is passed through to fq_codel and not recalculated on the outer ip header.
A) how many encapsulation types are commonly used in openwrt?
I imagine gre, ipsec, 6in4, fou, maps, 6xlat and other encapsulations are pretty common nowadays. of these it's the ipv6 related ones that concern/interest me most. Do any of these explicitly force the hash calc as wireguard now does?
B) Is the hash calculated on rx or not on many openwrt related ethernet chips? (the r7800 for example, ar71xx? others?) (e.g. how often should we try to force the hash if not found)
C) to what extent is RSS actually used in openwrt related devices? I mostly see ip running on a single cpu mostly and not load balancing well.