On Sat, Sep 14, 2019 at 8:30 PM Gavin Hu <gavin...@arm.com> wrote: > > V6: > - squash the RTE_ARM_USE_WFE configuration entry patch into the new API patch > - move the new configuration to the end of EAL > - add doxygen comments to reflect the relaxed and acquire semantics > - correct the meson configuration > V5: > - add doxygen comments for the new APIs > - spinlock early exit without wfe if the spinlock not taken by others. > - add two patches on top for opdl and thunderx > V4: > - rename the config as CONFIG_RTE_ARM_USE_WFE to indicate it applys to arm > only > - introduce a macro for assembly Skelton to reduce the duplication of code > - add one patch for nxp fslmc to address a compiling error > V3: > - Convert RFCs to patches > V2: > - Use inline functions instead of marcos > - Add load and compare in the beginning of the APIs > - Fix some style errors in asm inline > V1: > - Add the new APIs and use it for ring and locks > > DPDK has multiple use cases where the core repeatedly polls a location in > memory. This polling results in many cache and memory transactions. > > Arm architecture provides WFE (Wait For Event) instruction, which allows > the cpu core to enter a low power state until woken up by the update to the > memory location being polled. Thus reducing the cache and memory > transactions. > > x86 has the PAUSE hint instruction to reduce such overhead. > > The rte_wait_until_equal_xxx APIs abstract the functionality of 'polling > for a memory location to become equal to a given value'. > > For non-Arm platforms, these APIs are just wrappers around do-while loop > with rte_pause, so there are no performance differences. > > For Arm platforms, use of WFE can be configured using CONFIG_RTE_USE_WFE > option. It is disabled by default. > > Currently, use of WFE is supported only for aarch64 platforms. armv7 > platforms do support the WFE instruction, but they require explicit wake up > events(sev) and are less performannt. > > Testing shows that, performance varies across different platforms, with > some showing degradation. > > CONFIG_RTE_ARM_USE_WFE should be enabled depending on the performance > benchmarking on the target platforms. Power saving should be an bonus, > but currenly we don't have ways to characterize that. > > Gavin Hu (7): > bus/fslmc: fix the conflicting dmb function > eal: add the APIs to wait until equal > spinlock: use wfe to reduce contention on aarch64 > ticketlock: use new API to reduce contention on aarch64 > ring: use wfe to wait for ring tail update on aarch64 > net/thunderx: use new API to save cycles on aarch64 > event/opdl: use new API to save cycles on aarch64
There is checkpatch failure. ### eal: add the APIs to wait until equal WARNING:LONG_LINE_COMMENT: line over 80 characters #123: FILE: lib/librte_eal/common/include/generic/rte_pause.h:29: + * Wait for *addr to be updated with a 16-bit expected value, with a relaxed memory With checkpatch fixes: Acked-by: Jerin Jacob <jer...@marvell.com>