Messages in this thread | | | Subject | Re: [PATCH] kretprobe scalability improvement | From | Matt Wu <> | Date | Mon, 5 Jul 2021 10:50:17 +0800 |
| |
On 2021/7/5 AM7:59, Masami Hiramatsu wrote: > On Sun, 4 Jul 2021 10:16:47 +0100 > Christoph Hellwig <hch@infradead.org> wrote: > >> Would it make sense to just reuse kernel/bpf/percpu_freelist.c for >> kretprobes? > > Hmm, I don't think so. > It seems that what Wuqiang proposed is more efficient than the > percpu_freelist, and it will be less efficient from the viewpoint > of memory usage because kretprobe freelist manages instance pool > among all CPUs (which can be unbalanced, sometimes 95% used by one > core, sometimes used evenly). > > Actually, the best solution is to have per-task fixed-size instance > pool which is shared by all kretprobes (e.g. 4kb/task), because > the instance makes a "shadow stack" for each task. This may consume > more memory but is not increased by adding kretprobes, and should be > scalable.
Yes, per-task pool is the best for scalability.
How about allocating the kretprobe instance just from stack ? The size of kretprobe instance is very likely to be "small", then most of allocs could be fed quickly from current stack.
Expanding default kernel stack by 1 page is also an option, but the impact of memory occupation would be huge, after all the kretprobe is a rare thing and uncertain to normal threads.
Regards, Matt Wu
| |