Hi, On 6/21/2023 12:15 AM, Alexei Starovoitov wrote: > On Mon, Jun 19, 2023 at 7:00 AM Hou Tao <houtao@xxxxxxxxxxxxxxx> wrote: >> +static void bpf_rcu_gp_acc_work(struct callback_head *head) >> +{ >> + struct bpf_rcu_gp_acc_ctx *ctx = container_of(head, struct bpf_rcu_gp_acc_ctx, work); >> + >> + local_irq_disable(); >> + rcu_momentary_dyntick_idle(); >> + local_irq_enable(); > We discussed this with Paul off-line and decided to go a different route. "A different route" means the method used to reduce the memory footprint is different or the method to do reuse-after-rcu-gp is different ? > Paul prepared a patch for us to expose rcu_request_urgent_qs_task(). > I'll be sending the series later this week. Do you plan to take over the reuse-after-rcu-gp patchset ? I did a quick test, it showed that the memory footprint is smaller and the performance is similar when using rcu_request_urgent_qs_task() instead of rcu_momentary_dyntick_idle(). overwrite: Summary: per-prod-op 27.25 ± 0.08k/s, memory usage 29.52 ± 1.60MiB, peak memory usage 37.84MiB batch_add_batch_del: Summary: per-prod-op 45.84 ± 0.29k/s, memory usage 24.18 ± 1.44MiB, peak memory usage 30.38MiB add_del_on_diff_cpu: Summary: per-prod-op 13.09 ± 0.33k/s, memory usage 32.48 ± 3.51MiB, peak memory usage 53.54MiB