长期禁用中断/抢占有什么后果?

时间:2017-05-02 17:49:08

标签: linux linux-kernel linux-device-driver interrupt interrupt-handling

在Linux内核中,有许多函数,例如on_each_cpu_mask,它们具有文档警告,以防止传入长时间运行的回调,因为在回调期间将禁用中断和/或抢占。目前还不清楚回调是否“必须”很短,因为它很长只会导致糟糕的系统性能,或者因为长时间运行的回调实际上会破坏系统的正确性。

显然,当中断和抢占被禁用时,繁忙的核心不能执行任何其他工作,并且您可以通过使两个CPU等待彼此来编制强制死锁的情况。但是为了争论起见,回调只是做了一堆纯粹的计算,需要花费大量的时间然后返回。这会以某种方式打破内核吗?如果是这样,多久太久了?或者在计算完成之前性能是否会受到影响?

1 个答案:

答案 0 :(得分:1)

在一段时间内禁用一个CPU上的中断最终会导致所有其他CPU挂起,因为内核经常需要对所有CPU执行短操作。在任何CPU上关闭中断将阻止它完成这些操作。 (ref

无论是有意还是无意地禁用所有 CPU上的中断,都会使系统完全无响应。这包括用户界面(包括控制台上的TTY切换),以及内核通常自动执行的任务,如响应网络活动(如ARP响应和TCP确认)或执行热管理任务(如调整系统风扇速度) 。这是不好的。不要这样做。