All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf-next v4 0/7] bpf: Reduce memory usage for bpf_global_percpu_ma
@ 2023-12-18  6:30 Yonghong Song
  2023-12-18  6:30 ` [PATCH bpf-next v4 1/7] bpf: Avoid unnecessary extra percpu memory allocation Yonghong Song
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Yonghong Song @ 2023-12-18  6:30 UTC (permalink / raw)
  To: bpf
  Cc: Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, kernel-team,
	Martin KaFai Lau

Currently when a bpf program intends to allocate memory for percpu kptr,
the verifier will call bpf_mem_alloc_init() to prefill all supported
unit sizes and this caused memory consumption very big for large number
of cpus. For example, for 128-cpu system, the total memory consumption
with initial prefill is ~175MB. Things will become worse for systems
with even more cpus.

Patch 1 avoids unnecessary extra percpu memory allocation.
Patch 2 adds objcg to bpf_mem_alloc at init stage so objcg can be
associated with root cgroup and objcg can be passed to later
bpf_mem_alloc_percpu_unit_init().
Patch 3 addresses memory consumption issue by avoiding to prefill
with all unit sizes, i.e. only prefilling with user specified size.
Patch 4 further reduces memory consumption by limiting the
number of prefill entries for percpu memory allocation.
Patch 5 rejects percpu memory allocation with bpf_global_percpu_ma
when allocation size is greater than 512 bytes.
Patch 6 fixed test_bpf_ma test due to Patch 5.
Patch 7 added one test to show the verification failure log message.

Changelogs:
  v3 -> v4:
    . Add objcg to bpf_mem_alloc during init stage.
    . Initialize objcg at init stage but use it in bpf_mem_alloc_percpu_unit_init().
    . Remove check_obj_size() in bpf_mem_alloc_percpu_unit_init().
  v2 -> v3:
    . Clear the bpf_mem_cache if prefill fails.
    . Change test_bpf_ma percpu allocation tests to use bucket_size
      as allocation size instead of bucket_size - 8.
    . Remove __GFP_ZERO flag from __alloc_percpu_gfp() call.
  v1 -> v2:
    . Avoid unnecessary extra percpu memory allocation.
    . Add a separate function to do bpf_global_percpu_ma initialization
    . promote.
    . Promote function static 'sizes' array to file static.
    . Add comments to explain to refill only one item for percpu alloc.

Yonghong Song (7):
  bpf: Avoid unnecessary extra percpu memory allocation
  bpf: Add objcg to bpf_mem_alloc
  bpf: Allow per unit prefill for non-fix-size percpu memory allocator
  bpf: Refill only one percpu element in memalloc
  bpf: Limit up to 512 bytes for bpf_global_percpu_ma allocation
  selftests/bpf: Cope with 512 bytes limit with bpf_global_percpu_ma
  selftests/bpf: Add a selftest with > 512-byte percpu allocation size

 include/linux/bpf.h                           |  2 +-
 include/linux/bpf_mem_alloc.h                 |  8 ++
 kernel/bpf/core.c                             |  8 +-
 kernel/bpf/memalloc.c                         | 90 ++++++++++++++++---
 kernel/bpf/verifier.c                         | 36 ++++----
 .../selftests/bpf/prog_tests/test_bpf_ma.c    | 20 +++--
 .../selftests/bpf/progs/percpu_alloc_fail.c   | 18 ++++
 .../testing/selftests/bpf/progs/test_bpf_ma.c | 34 +++----
 8 files changed, 160 insertions(+), 56 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2023-12-20 19:55 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-18  6:30 [PATCH bpf-next v4 0/7] bpf: Reduce memory usage for bpf_global_percpu_ma Yonghong Song
2023-12-18  6:30 ` [PATCH bpf-next v4 1/7] bpf: Avoid unnecessary extra percpu memory allocation Yonghong Song
2023-12-18  6:30 ` [PATCH bpf-next v4 2/7] bpf: Add objcg to bpf_mem_alloc Yonghong Song
2023-12-19  3:03   ` Hou Tao
2023-12-18  6:30 ` [PATCH bpf-next v4 3/7] bpf: Allow per unit prefill for non-fix-size percpu memory allocator Yonghong Song
2023-12-19  3:04   ` Hou Tao
2023-12-20  4:37   ` Alexei Starovoitov
2023-12-20 17:57     ` Yonghong Song
2023-12-18  6:30 ` [PATCH bpf-next v4 4/7] bpf: Refill only one percpu element in memalloc Yonghong Song
2023-12-19 11:31   ` Hou Tao
2023-12-20 19:55     ` Yonghong Song
2023-12-18  6:30 ` [PATCH bpf-next v4 5/7] bpf: Limit up to 512 bytes for bpf_global_percpu_ma allocation Yonghong Song
2023-12-18  6:31 ` [PATCH bpf-next v4 6/7] selftests/bpf: Cope with 512 bytes limit with bpf_global_percpu_ma Yonghong Song
2023-12-18  6:31 ` [PATCH bpf-next v4 7/7] selftests/bpf: Add a selftest with > 512-byte percpu allocation size Yonghong Song

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.