Linux 核心搶占

2021-10-08 13:54:21 字數 712 閱讀 8753

核心搶占(kernel preemption)是一種有效的降低系統響應延時的方法。在核心裡,有三個相關的配置選項。

顧名思義,不開啟核心搶占。這是很多伺服器的預設配置選項。

在沒有開啟核心搶占的時候,程序的排程時機僅僅發生在非常有限的幾處:

程序自己主動觸發排程,例如:通過sleep(), schedule(), yield() api等等。

系統呼叫返回時,核心會檢查當前程序是否需要掛起(need_resched),如果是,則去觸發程序排程。

因此,如果程序在繁忙的時候,例如純軟體的加解密等,即使當前程序消耗了很多時間片,核心也沒有機會去排程其他的程序。當這個程序霸佔cpu的時候,其他程序很難的到排程,從而業務會卡頓。

開啟核心搶占是低延時系統的預設配置選項,例如desktop系統。開啟了這個選項後,核心的排程時機會會增加一處:

當核心退出中斷上下文的時候,核心會去檢查是否需要去排程程序.

因為,linux系統裡,中斷非常頻繁,而且中斷的優先順序很高,所以可以非常頻繁的觸發程序排程。童鞋們可能要問,既然他可以降低系統響應延時,為什麼不永遠開啟呢?答案就是因為頻繁的排程,會降低系統的效能。世界上似乎沒有兩全其美的事情。那麼,有沒有一種方法,既不會導致效能有明顯的下降,還能保持較低的響應延時? 於是乎,新的搶占策略被設計出來了。

自願搶占是介於關閉搶占和開啟搶占的折中。自願搶占是實現方式是核心在很多可以睡眠的地方插入了排程。因此它不會像中斷那樣頻繁,是一種折中的方案。

Linux核心 了解Linux核心搶占

目錄 無強制搶占 可搶占核心 自願核心搶占 完全實時搶占 在配置linux核心時,我們可以設定一些影響系統行為的引數。您可以使用不同的優先順序,排程類和搶占模型。了解並選擇正確的引數非常重要。在這篇文章中,我將介紹不同的搶占模型,以及每種模型如何影響使用者和核心行為 如果配置核心 使用make me...

Linux核心搶占 2

早期的linux核心是不可搶占的。它的排程方法是 乙個程序可以通過schedule 函式自願地啟動一次排程。非自願的強制性排程只能發生在每次從系統呼叫返回的前夕以及每次從中斷或異常處理返回到使用者空間的前夕。但是,如果在系統空間發生中斷或異常是不會引起排程的。這種方式使核心實現得以簡化。但常存在下面...

linux核心搶占及配置

1 linux 核心 linux 2.6以前 是不可搶占的,但支援使用者搶占它的排程方法是 乙個程序可以通過schedule 函式自願地啟動一次排程。非自願的強制性排程只能發生在每次從系統呼叫返回的前夕以及每次從中斷或異常處理返回到使用者空間的前夕 這種強制性排程又叫使用者搶占 但是,如果在系統空間...