mbox

[v7,0/3] ticketlock: implement ticketlock and add test case

Message ID 1553159608-205213-1-git-send-email-joyce.kong@arm.com (mailing list archive)
Headers

Message

Joyce Kong March 21, 2019, 9:13 a.m. UTC
  v7:
    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.

v6:
    Add rte_ticketlock.h in lib/librte_eal/common/include/arch/arm/.
    Sort header inside ticketlock files by alphabetical order.

v5:
    Change the variants inside rte_ticket_lock from unint to uint16_t for binary
    compatibility with the plain spin lock(suggested by Honnappa Nagarahalli)).

v4:
    Change some assignment operation in recursive ticket lock to __atomic.

V3:
    1.Update ticketlock intrduction(suggested by Honnappa Nagarahalli).
    2.Change the implementation of rte_ticketlock_trylock to CAS(suggested by Honnappa Nagarahalli).

V2:
    1.Update commit message(suggested by Jerin Jacob).
    2.Add ticketlock test cases(suggested by Jerin Jacob).

V1:
    Implement ticket lock to improve lock fairness and prdictability.

    As shown on thundex-2 platform:
    *** ticketlock_autotest with this patch ***
        Core [0] count = 496
        Core [1] count = 495
        Core [2] count = 498
        ...
        Core [209] count = 488
        Core [210] count = 490
        Core [211] 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