Linux
負載時網路延遲減少
我正在做一個實驗來查看 CPU 負載對網路延遲的影響。我的結果毫無意義,我希望你能理解它。這些機器通過兩個網路連結連接。
First link: [ Host A ] < -- InfiniBand (200 Gbps) -- > [ Host B ] Second link: [ Host A ] < -- Ethernet --> [ Switch ] <-- Ethernet -- > [ Host B ]
上面是空閒的主機 A 和主機 B 通過乙太網和 InfiniBand ping 主機 A。乙太網中值延遲為 0.550 毫秒,InfiniBand 中值延遲為 0.330 毫秒。
上面是一個壓力主機 A 和主機 B 通過乙太網和 InfiniBand ping 主機 A。乙太網中值延遲現在為 0.360 毫秒,InfiniBand 中值延遲為 0.115 毫秒。
兩台主機都執行 Ubuntu 20.04 和 Linux 5.8。
為什麼當我對主機 A 的所有核心施加壓力時,我的網路延遲會降低?
這是完全正常的。讓我更詳細地解釋一下。空閒核心(沒有工作要做的程序)將 CPU 置於省電模式,並可能降低 CPU 的核心頻率。
每當一個數據包到達網卡時,網卡就會引發一個中斷,向核心發出“網路數據包已到達”的信號。這需要處理,直到核心網路堆棧決定發送 ping 回复。現在談到響應時間,預設的 linux 核心調度程序並沒有對此進行優化,因為通常情況下,回复在 0.3 毫秒或 0.1 毫秒內到達都沒有關係。
現在考慮一下:活動 CPU 處於最大 CPU 頻率,並且不需要從省電模式中喚醒……活動 CPU 比空閒 CPU 對 ping 請求的響應更快。(除非您啟動一個實時核心,該核心針對響應時間進行了優化)。