我正在浏览一篇关于linux内核基数树实现的文章,文章链接如下:
http://lwn.net/Articles/175432/
在这篇文章中提到 radix_tree_preload 分配了足够的内存,以便后续插入树不会失败。尽管它基于每个 CPU 分配结构,因此该函数在禁用抢占的情况下返回。调用 radix_tree_preload_end 以启用抢占是调用者的责任。
我的问题是:
1) 为什么 radix_tree_preload 在每个 CPU 基础上分配结构?
2) 用户应该何时调用 radix_tree_preload_end?是在 radix_tree_insert 之后吗?
3)它不会影响性能,因为基数树用于页面缓存操作,因此任何插入都会导致抢占被禁用?如果我的理解有误,请纠正我。