bpf.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yonghong Song <yhs@fb.com>
To: <bpf@vger.kernel.org>
Cc: Alexei Starovoitov <ast@kernel.org>,
	Andrii Nakryiko <andrii@kernel.org>,
	Daniel Borkmann <daniel@iogearbox.net>, <kernel-team@fb.com>,
	KP Singh <kpsingh@kernel.org>,
	Martin KaFai Lau <martin.lau@kernel.org>,
	Tejun Heo <tj@kernel.org>
Subject: [PATCH bpf-next v6 0/9] bpf: Implement cgroup local storage available to non-cgroup-attached bpf progs
Date: Tue, 25 Oct 2022 21:28:35 -0700	[thread overview]
Message-ID: <20221026042835.672317-1-yhs@fb.com> (raw)

There already exists a local storage implementation for cgroup-attached
bpf programs. See map type BPF_MAP_TYPE_CGROUP_STORAGE and helper
bpf_get_local_storage(). But there are use cases such that non-cgroup
attached bpf progs wants to access cgroup local storage data. For example,
tc egress prog has access to sk and cgroup. It is possible to use
sk local storage to emulate cgroup local storage by storing data in socket.
But this is a waste as it could be lots of sockets belonging to a particular
cgroup. Alternatively, a separate map can be created with cgroup id as the key.
But this will introduce additional overhead to manipulate the new map.
A cgroup local storage, similar to existing sk/inode/task storage,
should help for this use case.

This patch implemented new cgroup local storage available to
non-cgroup-attached bpf programs. In the patch series, Patches 1 and 2
are preparation patches. Patch 3 implemented new cgroup local storage
kernel support. Patches 4 and 5 implemented libbpf and bpftool support.
Patches 6-8 fixed one existing test and added four new tests to validate
kernel/libbpf implementations. Patch 9 added documentation for new
BPF_MAP_TYPE_CGRP_STORAGE map type and comparison of the old and new
cgroup local storage maps.

Changelogs:
  v5 -> v6:
    . fix selftest test_libbpf_str/bpf_map_type_str due to marking
      BPF_MAP_TYPE_CGROUP_STORAGE as deprecated.
    . add cgrp_local_storage test in s390x denylist since the test
      has some fentry/fexit programs.
  v4 -> v5:
    . additional refactoring in patch 2
    . fix the call site for bpf_cgrp_storage_free() in kernel/cgroup/cgroup.c.
    . add a test for progs attaching to cgroups
    . add a negative test (the helper key is a task instead of expected cgroup)
    . some spelling fixes
  v3 -> v4:
    . fix a config guarding problem in kernel/cgroup/cgroup.c when
      cgrp_storage is deleted (CONFIG_CGROUP_BPF => CONFIG_BPF_SYSCALL).
    . rename selftest from cgroup_local_storage.c to cgrp_local_storage.c
      so the name can better align with map name.
    . fix a few misspellings.
  v2 -> v3:
    . fix a config caused kernel test complaint.
    . better description/comments in uapi bpf.h and bpf_cgrp_storage.c.
    . factor code for better resue for map_alloc/map_free.
    . improved explanation in map documentation.
  v1 -> v2:
    . change map name from BPF_MAP_TYPE_CGROUP_LOCAL_STORAGE to
      BPF_MAP_TYPE_CGRP_STORAGE.
    . removed support of sleepable programs.
    . changed the place of freeing cgrp local storage from put_css_set_locked()
      to css_free_rwork_fn().
    . added map documentation.

Yonghong Song (9):
  bpf: Make struct cgroup btf id global
  bpf: Refactor some inode/task/sk storage functions for reuse
  bpf: Implement cgroup storage available to non-cgroup-attached bpf
    progs
  libbpf: Support new cgroup local storage
  bpftool: Support new cgroup local storage
  selftests/bpf: Fix test test_libbpf_str/bpf_map_type_str
  selftests/bpf: Add selftests for new cgroup local storage
  selftests/bpf: Add test cgrp_local_storage to DENYLIST.s390x
  docs/bpf: Add documentation for new cgroup local storage

 Documentation/bpf/map_cgrp_storage.rst        | 109 ++++++++
 include/linux/bpf.h                           |   7 +
 include/linux/bpf_local_storage.h             |  17 +-
 include/linux/bpf_types.h                     |   1 +
 include/linux/btf_ids.h                       |   1 +
 include/linux/cgroup-defs.h                   |   4 +
 include/uapi/linux/bpf.h                      |  50 +++-
 kernel/bpf/Makefile                           |   2 +-
 kernel/bpf/bpf_cgrp_storage.c                 | 247 ++++++++++++++++++
 kernel/bpf/bpf_inode_storage.c                |  38 +--
 kernel/bpf/bpf_local_storage.c                | 190 +++++++++-----
 kernel/bpf/bpf_task_storage.c                 |  38 +--
 kernel/bpf/cgroup_iter.c                      |   2 +-
 kernel/bpf/helpers.c                          |   6 +
 kernel/bpf/syscall.c                          |   3 +-
 kernel/bpf/verifier.c                         |  13 +-
 kernel/cgroup/cgroup.c                        |   1 +
 kernel/trace/bpf_trace.c                      |   4 +
 net/core/bpf_sk_storage.c                     |  35 +--
 scripts/bpf_doc.py                            |   2 +
 .../bpf/bpftool/Documentation/bpftool-map.rst |   2 +-
 tools/bpf/bpftool/map.c                       |   2 +-
 tools/include/uapi/linux/bpf.h                |  50 +++-
 tools/lib/bpf/libbpf.c                        |   1 +
 tools/lib/bpf/libbpf_probes.c                 |   1 +
 tools/testing/selftests/bpf/DENYLIST.s390x    |   1 +
 .../bpf/prog_tests/cgrp_local_storage.c       | 171 ++++++++++++
 .../selftests/bpf/prog_tests/libbpf_str.c     |   8 +
 .../bpf/progs/cgrp_ls_attach_cgroup.c         | 101 +++++++
 .../selftests/bpf/progs/cgrp_ls_negative.c    |  26 ++
 .../selftests/bpf/progs/cgrp_ls_recursion.c   |  70 +++++
 .../selftests/bpf/progs/cgrp_ls_tp_btf.c      |  88 +++++++
 32 files changed, 1102 insertions(+), 189 deletions(-)
 create mode 100644 Documentation/bpf/map_cgrp_storage.rst
 create mode 100644 kernel/bpf/bpf_cgrp_storage.c
 create mode 100644 tools/testing/selftests/bpf/prog_tests/cgrp_local_storage.c
 create mode 100644 tools/testing/selftests/bpf/progs/cgrp_ls_attach_cgroup.c
 create mode 100644 tools/testing/selftests/bpf/progs/cgrp_ls_negative.c
 create mode 100644 tools/testing/selftests/bpf/progs/cgrp_ls_recursion.c
 create mode 100644 tools/testing/selftests/bpf/progs/cgrp_ls_tp_btf.c

-- 
2.30.2


             reply	other threads:[~2022-10-26  4:28 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-26  4:28 Yonghong Song [this message]
2022-10-26  4:28 ` [PATCH bpf-next v6 1/9] bpf: Make struct cgroup btf id global Yonghong Song
2022-10-26  4:28 ` [PATCH bpf-next v6 2/9] bpf: Refactor some inode/task/sk storage functions for reuse Yonghong Song
2022-10-26  4:28 ` [PATCH bpf-next v6 3/9] bpf: Implement cgroup storage available to non-cgroup-attached bpf progs Yonghong Song
2022-10-26  4:28 ` [PATCH bpf-next v6 4/9] libbpf: Support new cgroup local storage Yonghong Song
2022-10-26  4:29 ` [PATCH bpf-next v6 5/9] bpftool: " Yonghong Song
2022-10-26  4:29 ` [PATCH bpf-next v6 6/9] selftests/bpf: Fix test test_libbpf_str/bpf_map_type_str Yonghong Song
2022-10-26  4:29 ` [PATCH bpf-next v6 7/9] selftests/bpf: Add selftests for new cgroup local storage Yonghong Song
2022-10-26  4:29 ` [PATCH bpf-next v6 8/9] selftests/bpf: Add test cgrp_local_storage to DENYLIST.s390x Yonghong Song
2022-10-26  4:29 ` [PATCH bpf-next v6 9/9] docs/bpf: Add documentation for new cgroup local storage Yonghong Song
2022-10-26  6:40 ` [PATCH bpf-next v6 0/9] bpf: Implement cgroup local storage available to non-cgroup-attached bpf progs patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221026042835.672317-1-yhs@fb.com \
    --to=yhs@fb.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bpf@vger.kernel.org \
    --cc=daniel@iogearbox.net \
    --cc=kernel-team@fb.com \
    --cc=kpsingh@kernel.org \
    --cc=martin.lau@kernel.org \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).