gpt4 book ai didi

linux-kernel - 在网络处理中使用自旋变体

转载 作者:行者123 更新时间:2023-12-04 03:10:07 25 4
gpt4 key购买 nike

我编写了一个与网络过滤器 Hook 交互的内核模块。
net-filter 钩子(Hook)在 Softirq 上下文中运行。

我正在访问一个全局数据结构
“哈希表”来自 softirq 上下文以及来自 Process 上下文。进程上下文访问是由于 系统控制 用于修改哈希表内容的文件。

我正在使用 spinlock_irq_save。

spin_lock api 的这种选择是否正确?在性能和锁定标准方面。

如果在另一个处理器上安排中断会发生什么?而在当前处理器上的锁已经被进程上下文代码持有?

最佳答案

首先:

So, with all the above details I concluded that my softirqs can run concurrently on both cores.



是的,这是正确的。您的 softirq 处理程序可能会“在多个 CPU 上同时执行”。

您使用自旋锁的结论对我来说听起来是正确的。但是,这假定临界区(即,在持有自旋锁的情况下执行的部分)具有以下属性:
  • 它不能休眠(例如,获取阻塞互斥体)
  • 应该尽量短

  • 一般来说,如果你只是更新你的哈希表,你应该没问题。

    如果 IRQ 处理程序试图获取进程上下文持有的自旋锁,那很好。只要您的进程上下文没有在持有该锁的情况下休眠,该锁就应该在很短的时间内释放,从而允许 IRQ 处理程序向前推进。

    关于linux-kernel - 在网络处理中使用自旋变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081481/

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