我有一个顺序用户空间程序(某种内存密集型搜索数据结构)。该程序的性能(以 CPU 周期数衡量)取决于底层数据结构的内存布局和数据缓存大小 (LLC)。
到目前为止,我的用户空间程序已经调到死了,现在我想知道是否可以通过将用户空间代码移入内核(作为内核模块)来获得性能提升。我可以想到以下提高内核空间性能的因素......
- 没有系统调用开销(每个系统调用获得多少 CPU 周期)。这不太重要,因为我几乎没有在我的程序中使用任何系统调用,除了在程序启动时分配内存。
- 控制调度,我可以创建一个内核线程并让它在给定的内核上运行而不会被丢弃。
- 我可以使用 kmalloc 内存分配,因此可以更好地控制分配的内存,还可以通过控制分配的内存来更精确地控制缓存着色。值得尝试吗?
我对内核专家的问题...
- 我是否错过了上述列表中可以进一步提高性能的任何因素?
- 是否值得尝试,或者直接知道我不会得到太多的性能改进?
- 如果内核中的性能提升是可能的,是否有任何估计它可以获得多少增益(任何理论猜测)?
谢谢。