首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么linux内核中的radix_tree_preload返回时禁用了抢占?

为什么linux内核中的radix_tree_preload返回时禁用了抢占?
EN

Stack Overflow用户
提问于 2013-12-16 21:51:04
回答 1查看 235关注 0票数 4

我正在看一篇关于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)它是否不会影响性能,因为基数树用于页面缓存操作,因此任何插入都会导致抢占被禁用?如果我的理解是错误的,请纠正我。

EN

回答 1

Stack Overflow用户

发布于 2013-12-17 00:22:19

(1)为了确保您的请求按要求执行,一个CPU将处理整个插入序列。如果你在结构完全初始化之前将你的进程移到一个不同的CPU上,另一个CPU将从它自己的每CPU拷贝中工作(关于每CPU变量的优点,另见,例如,here),如果一些工作已经在初始CPU上完成,这将是不同的。--

(2)因此,您希望留出足够的内存,禁用抢占,插入/删除,然后重新启用抢占,所有这些都是在最初启动序列的上下文中完成的。这意味着,是的,您可以先执行_preload、_insert,然后再执行_preload_end,以便尽快让您的系统再次从抢占中受益。--

(3)有一个小的性能影响,但为了确保数据完整性,如果您选择每个CPU的变量,这是很难(不可能)避免的。内核开发人员必须判断比缺点更重要的好处,他们通常是正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20612565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档