linux内核 – 在网络处理中使用自旋变体
我写了一个与网络过滤器钩子交互的内核模块.
网络过滤器钩子在Softirq上下文中运行. 我正在访问全局数据结构 我正在使用spinlock_irq_save. 这个spin_lock api的选择是否正确?在性能和锁定标准方面. 如果在另一个处理器上安排中断,会发生什么?而当前的处理器锁已经被一个进程上下文代码保存了? 解决方法
首先:
是的,这是正确的.您的softirq处理程序可能会同时在多个CPU上执行. 你使用螺旋锁的结论听起来对我来说是正确的.但是,这假设关键部分(即,使用旋转锁持有执行的部分)具有以下属性: >它不能睡觉(例如,获取一个阻塞互斥体) 一般来说,如果你只是更新哈希表,你应该在这里很好. 如果一个IRQ处理程序尝试获取一个由进程上下文保存的自旋锁,那没关系.只要你的进程上下文没有保持锁定,锁应该在短时间内释放,允许IRQ处理程序取得进展. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |