-
Notifications
You must be signed in to change notification settings - Fork 5
bpf: optimize bpf_map_update_elem() for map-in-map types #6433
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpf: optimize bpf_map_update_elem() for map-in-map types #6433
Conversation
|
Upstream branch: 688b745 |
8c83cb5 to
f015201
Compare
|
Upstream branch: 19f4091 |
1050610 to
41b7c7c
Compare
f015201 to
884c5bc
Compare
|
Upstream branch: bd5bdd2 |
41b7c7c to
3884cff
Compare
884c5bc to
4355736
Compare
|
Upstream branch: 34235a3 |
3884cff to
f7c61cb
Compare
4355736 to
5bece43
Compare
|
Upstream branch: c1af446 |
Updating a BPF_MAP_TYPE_HASH_OF_MAPS or BPF_MAP_TYPE_ARRAY_OF_MAPS via bpf_map_update_elem() is very expensive. In one of our workloads, we're inserting ~1400 maps of type BPF_MAP_TYPE_ARRAY into a BPF_MAP_TYPE_ARRAY_OF_MAPS. This takes ~21 seconds on a single thread, with an average of ~15ms per call: Function Name: map_update_elem Number of calls: 1369 Total time: 21s 182ms 966µs Maximum: 47ms 937µs Average: 15ms 473µs Minimum: 7µs Profiling shows that nearly all of this time is going to synchronize_rcu(), via maybe_wait_bpf_programs() in map_update_elem(). The call to synchronize_rcu() is done to ensure that after bpf_map_update_elem() returns, no BPF programs are still looking at the old value of the map, per commit 1ae80cf ("bpf: wait for running BPF programs when updating map-in-map"). As discussed on the bpf mailing list, replace synchronize_rcu() with synchronize_rcu_expedited(). This is 175x faster: it now takes an average of 88 microseconds per call, for a total of 127 milliseconds in the same benchmark: Function Name: map_update_elem Number of calls: 1439 Total time: 127ms 626µs Maximum: 445µs Average: 88µs Minimum: 10µs Link: https://lore.kernel.org/bpf/CAH6OuBR=w2kybK6u7aH_35B=Bo1PCukeMZefR=7V4Z2tJNK--Q@mail.gmail.com/ Signed-off-by: Ritesh Oedayrajsingh Varma <[email protected]>
f7c61cb to
533761a
Compare
5bece43 to
52f5a27
Compare
|
At least one diff in series https://patchwork.kernel.org/project/netdevbpf/list/?series=1028467 irrelevant now. Closing PR. |
Pull request for series with
subject: bpf: optimize bpf_map_update_elem() for map-in-map types
version: 1
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=1028467