gpt4 book ai didi

linux - 为什么在 linux 内核中 radix_tree_preload 返回时禁用了抢占

转载 作者:IT王子 更新时间:2023-10-29 00:35:41 29 4
gpt4 key购买 nike

我正在阅读一篇关于 linux 内核基数树实现的文章,文章链接如下:

http://lwn.net/Articles/175432/

在这篇文章中提到radix_tree_preload 分配了足够的内存,以便后续插入树时不会失败。虽然它在每个 CPU 的基础上分配结构,因此函数返回时禁用了抢占。调用者有责任调用 radix_tree_preload_end 以启用抢占。

我的问题是:

1) 为什么 radix_tree_preload 以 per-CPU 为基础分配结构?

2) 用户应该什么时候调用 radix_tree_preload_end?是紧跟在radix_tree_insert之后吗?

3) 基数树用于页面缓存操作是否会影响性能,因此任何插入都会导致抢占被禁用?如果我的理解有误,请纠正我。

最佳答案

(1) 为确保您的请求按要求执行,一个CPU将处理整个插入序列。如果在结构完全初始化之前将进程移动到不同的 CPU,则另一个 CPU 将从其自己的每个 CPU 副本开始工作(对于每个 CPU 变量的优点,另请参见,例如 here),这将是不同的如果某些工作已经在初始 CPU 上完成。

(2) 所以你想预留足够的内存,禁用抢占,插入/删除,然后重新启用抢占,所有这些都在最初启动序列的上下文中。这意味着,是的,您 _preload、_insert,然后是 _preload_end,让您的系统尽快再次从抢占中受益。

(3) 性能影响很小,但为了确保数据完整性,如果选择 per-CPU 变量,这是很难(不可能)避免的。内核开发者必须判断利大于弊,他们通常是对的。

关于linux - 为什么在 linux 内核中 radix_tree_preload 返回时禁用了抢占,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20612565/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com