mbox series

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

Message ID 1553512269-146074-1-git-send-email-joyce.kong@arm.com (mailing list archive)
Headers show
Series ticketlock: implement ticketlock and add test case | expand

Message

Joyce Kong March 25, 2019, 11:11 a.m. UTC
v8:
    1. Enhance functional test for ticketlock by adding extra verification to ensure correct locking in MT env.
    2. Amortize the cost of getting time in test case.
    (Suggested by Konstantin Ananyev)

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                         | 319 +++++++++++++++++++++
 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, 608 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

Comments

Ananyev, Konstantin March 27, 2019, 11:20 a.m. UTC | #1
> 
> v8:
>     1. Enhance functional test for ticketlock by adding extra verification to ensure correct locking in MT env.
>     2. Amortize the cost of getting time in test case.
>     (Suggested by Konstantin Ananyev)
> 
> 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                         | 319 +++++++++++++++++++++
>  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, 608 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
> 
> --

Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

> 2.7.4
Thomas Monjalon March 28, 2019, 2:02 p.m. UTC | #2
> > 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                         | 319 +++++++++++++++++++++
> >  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, 608 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
> 
> Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>

Applied, thanks