1

在Linux內核中,有許多函數,例如on_each_cpu_mask,它們有文檔警告,不會傳入長時間運行的回調,因爲在回調期間中斷和/或搶佔將被禁用。目前還不清楚回調「必須」是否很短,因爲它太長會導致糟糕的系統性能,或者長時間運行的回調實際上會以某種方式破壞系統的正確性。長期禁用中斷/搶佔有什麼後果?

顯然,當中斷和搶佔被禁用時,繁忙核心無法做任何其他工作,並且可以通過讓兩個CPU相互等待來調整可能導致死鎖的情況。但爲了爭論,回調只是做了一大堆純粹的計算,花費了大量的時間然後返回。這可以以某種方式破壞內核嗎?如果那麼多久太久了?或者在計算完成之前性能會受損?

回答

1

禁用一個CPU的中斷一段時間最終會導致所有其他CPU掛起,因爲內核通常需要在所有CPU上執行短操作。在任何CPU上關閉中斷將阻止它完成這些操作。 (ref

所有的CPU,有意或無意地禁用中斷,將使系統完全響應。這包括用戶界面(包括控制檯上的TTY切換)以及內核通常自動執行的任務,例如響應網絡活動(如ARP響應和TCP確認)或執行熱管理任務(如調整系統風扇速度) 。這不好。不要這樣做。