Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

8.3. 封包接收總覽

若要有效分析網路瓶頸和效能問題,您必須理解封包接收如何運作。封包接收(packet reception)對於網路效能微調來說相當重要,因為網路的 frame 通常會在接收路徑中遺失。在接收路徑中遺失的 frame,將造成顯著的網路效能影響。
網路接收路徑圖形

圖形 8.1. 網路接收路徑圖形

Linux kernel 會接收各個 frame,並進行以下四個步驟的程序:
  1. 硬體接收:「網路介面卡」(NIC)會接收到線路上的 frame。根據其驅動程式配置,NIC 會將 frame 傳輸至一個內部硬體緩衝記憶體上,或至一個指定的信號緩衝區(ring buffer)上。
  2. Hard IRQ:NIC 會藉由插斷 CPU 來判斷網路 frame 是否存在。這會使 NIC 驅動程式被通知插斷,並排程「soft IRQ 作業」。
  3. Soft IRQ:此階段會實作實際的 frame 接收程序,並且以 softirq 執行。這代表此階段會先佔所有在指定 CPU 上執行的應用程式,但還是允許插入 hard IRQ。
    在此情況下(在與 hard IRQ 相同的 CPU 上執行,藉此減少鎖定額外負荷),kernel 會實際將 frame 由 NIC 硬體緩衝區上移除,並透過網路堆疊來處理它。在此,frame 會被轉送、丟棄或是傳送至一個目標監聽 socket 上。
    當傳送至一個 socket 時,frame 會被附加至擁有此 socket 的應用程式。這項程序會反覆進行,直到 NIC 硬體緩衝區的 frame 耗盡,或是直到達到「裝置權重」(dev_weight)值為止。欲取得更多有關於裝置權重的相關資訊,請參閱〈節 8.4.1, “NIC 硬體緩衝區”〉。
  4. 應用程式接收:應用程式會透過標準的 POSIX 呼叫(readrecvrecvfrom),來接收 frame,並清除任何所屬 socket 中的佇列。在此情況下,透過網路接收的資料將不再存在網路堆疊上。

8.3.1. CPU/快取關聯

若要維持接收路徑上的高傳輸量,建議您維持 L2 快取的「速度」。如先前所描述,網路緩衝區會在與偵測到它們的 IRQ 相同的 CPU 上被接收。這代表緩衝區資料將會存在該接收 CPU 的 L2 快取上。
若要有效善用,請為應用程式設置程序關聯,這些應用程式乃在與 L2 快取共享相同核心的 NIC 上,將會接收到最多資料的應用程式。這將會大幅增加快取命中(cache hit)的機會,並因此改善效能。