mbox series

[bpf-next,RFC,v3,0/6] bpf: add BPF_MAP_DUMP command to dump more than one entry per call

Message ID 20190703170118.196552-1-brianvv@google.com
Headers show
Series bpf: add BPF_MAP_DUMP command to dump more than one entry per call | expand


Brian Vazquez July 3, 2019, 5:01 p.m. UTC
This introduces a new command to retrieve a variable number of entries
from a bpf map.

This new command can be executed from the existing BPF syscall as

err =  bpf(BPF_MAP_DUMP, union bpf_attr *attr, u32 size)
using attr->dump.map_fd, attr->dump.prev_key, attr->dump.buf,
returns zero or negative error, and populates buf and buf_len on

This implementation is wrapping the existing bpf methods:
map_get_next_key and map_lookup_elem
the results show that even with a 1-elem_size buffer, it runs ~40 faster
than the current implementation, improvements of ~85% are reported when
the buffer size is increased, although, after the buffer size is around
5% of the total number of entries there's no huge difference in
increasing it.

Tried different size buffers to handle case where the bulk is bigger, or
the elements to retrieve are less than the existing ones, all runs read
a map of 100K entries. Below are the results(in ns) from the different

buf_len_1:	 69038725 entry-by-entry: 112384424 improvement
buf_len_2:	 40897447 entry-by-entry: 111030546 improvement
buf_len_230:	 13652714 entry-by-entry: 111694058 improvement
buf_len_5000:	 13576271 entry-by-entry: 111101169 improvement
buf_len_73000:	 14694343 entry-by-entry: 111740162 improvement
buf_len_100000:	 13745969 entry-by-entry: 114151991 improvement
buf_len_234567:	 14329834 entry-by-entry: 114427589 improvement


- add explanation of the API in the commit message
- fix masked errors and return them to user
- copy last_key from return buf into prev_key if it was provided
- run test with kpti and retpoline mitigations

- use proper bpf-next tag

Brian Vazquez (6):
  bpf: add bpf_map_value_size and bp_map_copy_value helper functions
  bpf: add BPF_MAP_DUMP command to dump more than one entry per call
  bpf: keep bpf.h in sync with tools/
  libbpf: support BPF_MAP_DUMP command
  selftests/bpf: test BPF_MAP_DUMP command on a bpf hashmap
  selftests/bpf: add test to measure performance of BPF_MAP_DUMP

 include/uapi/linux/bpf.h                |   9 +
 kernel/bpf/syscall.c                    | 252 ++++++++++++++++++------
 tools/include/uapi/linux/bpf.h          |   9 +
 tools/lib/bpf/bpf.c                     |  28 +++
 tools/lib/bpf/bpf.h                     |   4 +
 tools/lib/bpf/libbpf.map                |   2 +
 tools/testing/selftests/bpf/test_maps.c | 147 +++++++++++++-
 7 files changed, 388 insertions(+), 63 deletions(-)