[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