我使用的是 HP DL360p Gen8。我已經安裝了雙重開機 Windows Server 2008 R2 和 RHEL7。在這兩個系統中,我都設定了 LACP 和 VLAN。所以這是相同的伺服器、相同的硬體、相同的網路、相同的路由表等。
我擔心延遲,包括網路延遲,因為我使用此伺服器進行高頻交易。
現在我期望如果我從 Windows 和 Linux ping 同一台主機,那麼 Linux 一定會稍微好一點。令人驚訝的是,它根本沒有好轉。實際上,當我 ping 同一台主機時,它甚至比 Windows 還要差 5-10 微秒。
- 我
hrping
在 Windows 和ping
Linux 中使用 - 在 Windows 中,我使用 HP 實用程式進行分組,在 RHEL 7 中,我使用內建的「分組」(不是綁定)
我期待 Linux 會更好,因為:
- 我認為 RHEL 7 網路實作比 Windows Server 2008 R2 更快
- 我認為 RHEL 7 分組/LACP/VLAN 實作比 Windows Server 2008 R2/HP 更快
我的問題:
- 如果有這樣的數字:RHEL 7 的 ping 速度比 Windows Server 2008 R2 快多少微秒?
- 如果它表明 Linux 慢 5-10 微秒的潛在問題
ping
,或者我應該忽略這個事實? - 我可以做什麼/診斷/排除故障以使 Linux ping 比 Windows 更快
當然,在現實生活中,我更關心實際流量的延遲,例如 TCP/UDP,但我將其ping
作為第一步。可能會ping
顯示相同的數字,因為它“簡單”,但在真實的 TCP/UDP 流量上 Linux 會更快嗎?
答案1
有很多因素。首先是您正在運行的機器。如果windows和linux在不同的硬體上,那麼測量就沒有意義。
當然,您必須在多次嘗試後測量平均 ping,前幾次 ping 可能包括其他延遲。
資料包必須經過核心(IP 堆疊和網路裝置驅動程式)傳出,然後在收到回應時再次傳入。在此階段,可能有許多因素影響差異:
- 實際計時的內容:兩種不同的 ping 實作可以在啟動計時器和實際發送內容之間執行或多或少的樣板工作(在接收路徑上也是如此)。
- 存在過濾器:防火牆等,可以引入額外的步驟
- 時鐘粒度:核心多工進程的精細程度如何?即使在不同的 Linux 等級中,tick 長度也可能有很大差異,或者核心可能或多或少是無tick的(如果只有一個進程正在運行,則運行不會中斷)。
- 進程管理:當封包返回時,進程被喚醒的速度和方式如何? Windows 和 Linux 以完全不同的方式實現這一點。
- 系統的其餘部分在做什麼?是否同時發生大量 IO 導致核心繁忙?如果您
nice
ping 到更高優先級,會有變化嗎? - 頻率縮放:CPU 頻率的管理可能會有很大差異:Linux 有許多做不同事情的「調控器」。因此,Linux 在空閒時有可能以較低的時脈速度運行 - 而且,頻率切換的時刻會產生額外的延遲。
- 實用程式的實作和編譯
ping
也可能會產生一些較小的影響(儘管核心中的延遲可能是主要的影響)。
眾所周知,Linux 核心的網路吞吐量達到了極限10千兆級別。所以......在微秒速度下應該不會產生太大的差異。這可能是調度、作業系統延遲等問題。且 ping 延遲並不代表負載下的實際效能。當您做出任何決定時,不應將此衡量標準作為一個因素。您需要許多其他基準,特別是在實際負載下。
最後,Linux 核心設定可以極大地影響效能 - 即時專案需要專用核心才能以最佳水準執行。您會發現不同配置(在兩個平台上)之間的變化比這兩次嘗試中發現的變化更多。