1

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

显然,当中断和抢占被禁用时,繁忙核心无法做任何其他工作,并且可以通过让两个CPU相互等待来调整可能导致死锁的情况。但为了争论,回调只是做了一大堆纯粹的计算,花费了大量的时间然后返回。这可以以某种方式破坏内核吗?如果那么多久太久了?或者在计算完成之前性能会受损?

回答

1

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

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