On 2022-05-01 22:17, Stephen Hemminger wrote: > On Sun, 1 May 2022 16:03:27 +0200 > Mattias Rönnblom <mattias.ronnb...@ericsson.com> wrote: > >> +struct data { >> + rte_seqlock_t lock; >> + >> + uint64_t a; >> + uint64_t b __rte_cache_aligned; >> + uint64_t c __rte_cache_aligned; >> +} __rte_cache_aligned; > > This will end up taking 192 bytes per lock. > Which is a lot especially if embedded in another structure.
"b" and "c" are cache-line aligned to increase the chance of exposing any bugs in the seqlock implementation. With these annotations, accessing all struct data's fields are multiple distinct interactions with the memory hierarchy, instead of one atomic "request for ownership" type operation for a particular cache line, from the core. At least that what the difference would be in my simple mental model of the typical CPU. You mention this because you think it serves as a bad example, or what is the reason? The lock itself is much smaller than that, and not cache-line aligned. "struct data" are only used by the unit tests. I should have mentioned the reason for the __rte_cache_aligned as a comment.