Andi Kleen writes: > eth_type_trans checks the ethernet protocol ID and sets the broadcast/multicast/ > unicast L2 type. > > Some NICs have bits in the RX descriptor for most of them. They have a > "packet is TCP or UDP or IP" bit and also a bit for unicast or sometimes > even multicast/broadcast. So when you have the RX descriptor you > can just derive these values from there and put them into the skb > without calling eth_type_trans or looking at the cache cold header. > > Then you do a prefetch on the header. When the packet reaches the > network stack later the header has already reached cache and it can be > processed without a memory round trip latency. > > Caveats: > On some cards it doesn't work for all packets or can be only done > if you don't have any multicast addresses hashed (that's the case > for the e1000 if I read the header bits correctly). The lxt1001 > (old EOLed card) can do it for all packet types. Thanks! Yes. Like to give this a try when I got chance. It should be something for the driver authors. Any patch handy? e1000? Cheers. --ro - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html