為什麼有人會選擇不使用低延遲核心?
我找不到任何關於Linux 核心的
rt
好資訊。lowlatency
我想知道為什麼有人不想使用低延遲核心。
另外,如果有人能說出具體的區別是什麼,那也很好。
不同的配置,“通用”、“低延遲”(在 Ubuntu 中配置)和 RT(“實時”),都是為了平衡吞吐量與延遲。通用核心更傾向於吞吐量而不是延遲,其他核心更傾向於延遲而不是吞吐量。因此,需要吞吐量超過需要低延遲的使用者不會選擇低延遲核心。
與通用配置相比,低延遲核心更改了以下設置:
- 預設情況下,IRQ 是執行緒化的,這意味著更多的 IRQ(仍然不是所有的 IRQ)可以被搶占,並且它們也可以被優先處理並控制它們的 CPU 親和性;
- 在整個核心中啟用了搶占(
CONFIG_PREEMPT
而不是CONFIG_PREEMPT_VOLUNTARY
);- 啟用延遲調試工具,以便使用者可以確定哪些核心操作正在阻塞進度;
- 定時器頻率設置為1000 Hz而不是250 Hz。
RT 核心為主線核心添加了許多更新檔,並進行了更多配置調整。大多數更新檔的目的是通過刪除或拆分鎖來提供更多搶占機會,並減少核心處理不間斷任務所花費的時間(特別是通過改進日誌機制並減少使用它們) . 所有這一切的目標是讓核心滿足最後期限,即確保在需要處理某些事情時,它不會忙於做其他事情;這與高吞吐量或低延遲不同,但解決延遲問題會有所幫助。
在大多數發行版中預設配置的通用核心被設計為一種“明智的”折衷方案:它們試圖確保沒有單個任務可以長時間獨占系統,並且任務可以合理頻繁地切換,但不會影響吞吐量——因為核心花在考慮是否切換任務(核心內部或外部)或處理中斷上的時間越多,整個系統“工作”的時間就越少。對於實時音頻或影片處理等對延遲敏感的工作負載,這種折衷方案還不夠好:對於這些工作負載,低延遲核心以犧牲一些吞吐量為代價來提供更低的延遲。對於實時要求,實時核心會以更高的吞吐量為代價,盡可能多地移除低延遲阻塞器。
Linux的主流發行版大多安裝在伺服器上,傳統上延遲並沒有被認為是那麼重要(儘管如果您進行百分位性能分析,並且關心最高百分位性能,您可能會不同意),因此預設核心相當保守的。正如核心自己的文件所建議的那樣,桌面使用者可能應該使用低延遲核心。事實上,使用的低延遲核心越多,關於它們的相關性的回饋就越多,這有助於對預設核心配置進行普遍適用的改進;RT 核心也是如此(許多 RT 更新檔在某些時候是針對主流核心的)。
這個主題的演講提供了相當多的背景。