[PATCH v11] net: optimize raw checksum computation
Morten Brørup
mb at smartsharesystems.com
Fri Jan 9 10:26:16 CET 2026
> Changes in v8:
> - __rte_raw_cksum: use native pointer arithmetic instead of RTE_PTR_ADD
> to avoid incorrect results with -O3 for UDP checksums. Also improves
> performance due to less assembly generated with Clang.
Personally, I also have observed GCC's optimizer behave as if it loses some contextual information when using RTE_PTR_ADD, and thus emitting less optimal code.
I didn't look further into it, and thus have no data or examples to back up the claim. Which is why I haven't started a discussion about discouraging the use of RTE_PTR_ADD.
In other words: I support this change.
> /* if length is odd, keeping it byte order independent */
> - if (unlikely(len % 2)) {
> + if (len & 1) {
> uint16_t left = 0;
> -
> memcpy(&left, end, 1);
> sum += left;
> }
Changing "len % 2" to "len & 1" made sense for consistency in previous versions handling 32/16/8/4/2-byte chunks before this 1-byte chunk; now it makes no difference, so consider not changing this part at all.
Under all circumstances, don't remove the unlikely() for handling odd length in __rte_raw_cksum(). The vast majority of packets (and partial packets, e.g. headers) being checksummed are even length.
More information about the dev
mailing list