On 1/14/20 8:46 AM, Brian Vazquez wrote: > This patch series introduce batch ops that can be added to bpf maps to > lookup/lookup_and_delete/update/delete more than 1 element at the time, > this is specially useful when syscall overhead is a problem and in case > of hmap it will provide a reliable way of traversing them. > > The implementation inclues a generic approach that could potentially be > used by any bpf map and adds it to arraymap, it also includes the specific > implementation of hashmaps which are traversed using buckets instead > of keys. > > The bpf syscall subcommands introduced are: > > BPF_MAP_LOOKUP_BATCH > BPF_MAP_LOOKUP_AND_DELETE_BATCH > BPF_MAP_UPDATE_BATCH > BPF_MAP_DELETE_BATCH > > The UAPI attribute is: > > struct { /* struct used by BPF_MAP_*_BATCH commands */ > __aligned_u64 in_batch; /* start batch, > * NULL to start from beginning > */ > __aligned_u64 out_batch; /* output: next start batch */ > __aligned_u64 keys; > __aligned_u64 values; > __u32 count; /* input/output: > * input: # of key/value > * elements > * output: # of filled elements > */ > __u32 map_fd; > __u64 elem_flags; > __u64 flags; > } batch; > > > in_batch and out_batch are only used for lookup and lookup_and_delete since > those are the only two operations that attempt to traverse the map. > > update/delete batch ops should provide the keys/values that user wants > to modify. > > Here are the previous discussions on the batch processing: > - https://lore.kernel.org/bpf/20190724165803.87470-1-brianvv@xxxxxxxxxx/ > - https://lore.kernel.org/bpf/20190829064502.2750303-1-yhs@xxxxxx/ > - https://lore.kernel.org/bpf/20190906225434.3635421-1-yhs@xxxxxx/ > > Changelog sinve v3: > - Do not use copy_to_user inside atomic region (Yonghong Song) > - Use _opts approach on libbpf APIs (Andrii Nakryiko) > - Drop generic_map_lookup_and_delete_batch support > - Free malloc-ed memory in tests (Yonghong Song) > - Reverse christmas tree (Yonghong Song) > - Add acked labels Thanks for the new revision! Overall looks good. Only have a few minor comments. Also tested in my environment and everything works as expected.