[dpdk-dev] [PATCH v7 0/3] ticketlock: implement ticketlock and add test case
joyce.kong at arm.com
Thu Mar 21 10:13:25 CET 2019
1. Modify trylock to compare both current and next fields to gurantee the lock
being obtained only if tl->current==1(lock is free).
As within the trylock function, suppose next==curr=1, then this thread will
experience really long context switch, and next time it continues its
execution and tl->next wraps around to 1 again and tl_couurent==0(lock
held by another thread),this trylock will return a success, that means
two threads holding the lock. (Suggested by Konstantin Ananyev)
2. Let all archs use generic ticketlock implementation.
Add rte_ticketlock.h in lib/librte_eal/common/include/arch/arm/.
Sort header inside ticketlock files by alphabetical order.
Change the variants inside rte_ticket_lock from unint to uint16_t for binary
compatibility with the plain spin lock(suggested by Honnappa Nagarahalli)).
Change some assignment operation in recursive ticket lock to __atomic.
1.Update ticketlock intrduction(suggested by Honnappa Nagarahalli).
2.Change the implementation of rte_ticketlock_trylock to CAS(suggested by Honnappa Nagarahalli).
1.Update commit message(suggested by Jerin Jacob).
2.Add ticketlock test cases(suggested by Jerin Jacob).
Implement ticket lock to improve lock fairness and prdictability.
As shown on thundex-2 platform:
*** ticketlock_autotest with this patch ***
Core  count = 496
Core  count = 495
Core  count = 498
Core  count = 488
Core  count = 490
Core  count = 474
Joyce Kong (3):
eal/ticketlock: ticket based to improve fairness
eal/ticketlock: enable generic ticketlock on all arch
test/ticketlock: add ticket lock test case
MAINTAINERS | 5 +
app/test/Makefile | 1 +
app/test/autotest_data.py | 6 +
app/test/meson.build | 1 +
app/test/test_ticketlock.c | 311 +++++++++++++++++++++
doc/api/doxy-api-index.md | 1 +
lib/librte_eal/common/Makefile | 2 +-
.../common/include/arch/arm/rte_ticketlock.h | 22 ++
.../common/include/arch/ppc_64/rte_ticketlock.h | 18 ++
.../common/include/arch/x86/rte_ticketlock.h | 18 ++
.../common/include/generic/rte_ticketlock.h | 215 ++++++++++++++
lib/librte_eal/common/meson.build | 1 +
12 files changed, 600 insertions(+), 1 deletion(-)
create mode 100644 app/test/test_ticketlock.c
create mode 100644 lib/librte_eal/common/include/arch/arm/rte_ticketlock.h
create mode 100644 lib/librte_eal/common/include/arch/ppc_64/rte_ticketlock.h
create mode 100644 lib/librte_eal/common/include/arch/x86/rte_ticketlock.h
create mode 100644 lib/librte_eal/common/include/generic/rte_ticketlock.h
More information about the dev