mbox series

[bpf-next,v5,0/3] Arena Spin Lock

Message ID 20250306035431.2186189-1-memxor@gmail.com (mailing list archive)
Headers show
Series Arena Spin Lock | expand

Message

Kumar Kartikeya Dwivedi March 6, 2025, 3:54 a.m. UTC
This set provides an implementation of queued spin lock for arena.
There is no support for resiliency and recovering from deadlocks yet.
We will wait for the rqspinlock patch set to land before incorporating
support.

One minor change compared to the qspinlock algorithm in the kernel is
that we don't have the trylock fallback when nesting count exceeds 4.
The maximum number of supported CPUs is 1024, but this can be increased
in the future if necessary.

The API supports returning an error, so resiliency support can be added
in the future. Callers are still expected to check for and handle any
potential errors.

Errors are returned when the spin loops time out, when the number of
CPUs is greater than 1024, or when the extreme edge case of NMI
interrupting NMI interrupting HardIRQ interrupting SoftIRQ interrupting
task, all of them simultaneously in slow path, occurs, which is
unsupported.

Changelog:
----------
v4 -> v5
v4: https://lore.kernel.org/bpf/20250305045136.2614132-1-memxor@gmail.com

 * Add better comment and document LLVM bug for __unqual_typeof.
 * Switch to precise counting in the selftest and simplify test.
 * Add comment about return value handling.
 * Reduce size for 100k to 50k to cap test runtime.

v3 -> v4
v3: https://lore.kernel.org/bpf/20250305011849.1168917-1-memxor@gmail.com

 * Drop extra corruption handling case in decode_tail.
 * Stick to 1, 1k, 100k critical section sizes.
 * Fix unqual_typeof to not cast away arena tag for pointers.
 * Remove hack to skip first qnode.
 * Choose 100 as repeat count, 1000 is too much for 100k size.
 * Use pthread_barrier in test.

v2 -> v3
v2: https://lore.kernel.org/bpf/20250118162238.2621311-1-memxor@gmail.com

 * Rename to arena_spin_lock
 * Introduce cond_break_label macro to jump to label from cond_break.
 * Drop trylock fallback when nesting count exceeds 4.
 * Fix bug in try_cmpxchg implementation.
 * Add tests with critical sections of varying lengths.
 * Add comments for _Generic trick to drop __arena tag.
 * Fix bug due to qnodes being placed on first page, leading to CPU 0's
   node being indistinguishable from NULL.

v1 -> v2
v1: https://lore.kernel.org/bpf/20250117223754.1020174-1-memxor@gmail.com

 * Fix definition of lock in selftest

Kumar Kartikeya Dwivedi (3):
  selftests/bpf: Introduce cond_break_label
  selftests/bpf: Introduce arena spin lock
  selftests/bpf: Add tests for arena spin lock

 .../selftests/bpf/bpf_arena_spin_lock.h       | 512 ++++++++++++++++++
 tools/testing/selftests/bpf/bpf_atomic.h      | 140 +++++
 .../testing/selftests/bpf/bpf_experimental.h  |  15 +-
 .../bpf/prog_tests/arena_spin_lock.c          | 108 ++++
 .../selftests/bpf/progs/arena_spin_lock.c     |  51 ++
 5 files changed, 820 insertions(+), 6 deletions(-)
 create mode 100644 tools/testing/selftests/bpf/bpf_arena_spin_lock.h
 create mode 100644 tools/testing/selftests/bpf/bpf_atomic.h
 create mode 100644 tools/testing/selftests/bpf/prog_tests/arena_spin_lock.c
 create mode 100644 tools/testing/selftests/bpf/progs/arena_spin_lock.c


base-commit: 7781fd0ddeb43d078b750ff27a54dd3f85a26481

Comments

patchwork-bot+netdevbpf@kernel.org March 6, 2025, 6:30 a.m. UTC | #1
Hello:

This series was applied to bpf/bpf-next.git (master)
by Alexei Starovoitov <ast@kernel.org>:

On Wed,  5 Mar 2025 19:54:28 -0800 you wrote:
> This set provides an implementation of queued spin lock for arena.
> There is no support for resiliency and recovering from deadlocks yet.
> We will wait for the rqspinlock patch set to land before incorporating
> support.
> 
> One minor change compared to the qspinlock algorithm in the kernel is
> that we don't have the trylock fallback when nesting count exceeds 4.
> The maximum number of supported CPUs is 1024, but this can be increased
> in the future if necessary.
> 
> [...]

Here is the summary with links:
  - [bpf-next,v5,1/3] selftests/bpf: Introduce cond_break_label
    https://git.kernel.org/bpf/bpf-next/c/994fd3eae1b5
  - [bpf-next,v5,2/3] selftests/bpf: Introduce arena spin lock
    https://git.kernel.org/bpf/bpf-next/c/0201027a026c
  - [bpf-next,v5,3/3] selftests/bpf: Add tests for arena spin lock
    https://git.kernel.org/bpf/bpf-next/c/313149fd0a07

You are awesome, thank you!