[dpdk-dev] [PATCH 00/10] Improve cast alignment for strict aligned machines
Olivier MATZ
olivier.matz at 6wind.com
Mon May 4 11:50:09 CEST 2015
Hi Cyril,
On 04/29/2015 06:15 PM, Cyril Chemparathy wrote:
> This series contains a few improvements that allow the DPDK code base to build
> properly on machines that enforce strict pointer cast alignment constraints.
>
> When dealing with packet data which could be arbitrarily aligned, we get the
> compiler to do the right thing by (a) making sure that header types are
> packed, and (b) introducing and using unaligned_uint(16|32|64)_t types when
> upcasting from byte pointers.
>
> In a few other instances, we know apriori that the pointer cast cannot
> possibly break alignment. This applies to the changes in mempool, hash, mbuf,
> and the ethdev stats code. Here, we simply silence the compiler by casting
> through (void *) using the RTE_PTR_(ADD|SUB) macros.
>
> Finally, we introduce a new rte_pktmbuf_mtod_offset() helper to return a type
> casted pointer to an offset within the packet data. This replaces the
> following commonly used pattern:
> (struct foo *)(rte_pktmbuf_mtod(m, char *) + offset)
> with:
> rte_pktmbuf_mtod_offset(m, struct foo *, offset)
> To ensure consistency, the above transform was applied throughout the code
> base using the coccinelle semantic patching tool.
>
Before diving into the patches, I'm wondering if adding aligned(1) or
(packed) attribute at some places would have a performance impact on
supported architectures (Intel or IBM Power). Did you manage to test
it?
Regards,
Olivier
More information about the dev
mailing list