加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux内核 – 在网络处理中使用自旋变体

发布时间:2020-12-13 19:33:31 所属栏目:Linux 来源:网络整理
导读:我写了一个与网络过滤器钩子交互的内核模块. 网络过滤器钩子在Softirq上下文中运行. 我正在访问全局数据结构 来自softirq上下文以及从Process上下文的“哈希表”.进程上下文访问是由于使用sysctl文件来修改哈希表的内容. 我正在使用spinlock_irq_save. 这个s
我写了一个与网络过滤器钩子交互的内核模块.
网络过滤器钩子在Softirq上下文中运行.

我正在访问全局数据结构
来自softirq上下文以及从Process上下文的“哈希表”.进程上下文访问是由于使用sysctl文件来修改哈希表的内容.

我正在使用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处理程序取得进展.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读