Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
章 8. 網路
RHEL 的網路堆疊已與時俱進,升級了數項自動優化功能。對於大部份工作量來說,自動配置的網路設定能提供優化的效能。
在大部份情況下,網路效能問題實際上是因為硬體功能發生問題,或是設備發生了錯誤。這些問題的討論範圍不包含在本指南中;本章節提到的效能問題和解決方法,僅適用於優化可正常運作的系統。
網路是個專門的子系統,它包含了諸多不同的部分以及敏感的連線功能。這也是為什麼自由軟體社群與 Red Hat 耗費了許多心力,實作了各項自動優化網路效能的方式。正因如此,您可能永遠也無須重新配置網路效能。
8.1. 網路效能提升
RHEL 6.1 提升了下列網路效能:
8.1.1. 接收封包操控(Receive Packet Steering,RPS)
RPS 會啟用一個 NIC
rx
佇列,使其接收 softirq
的工作量散佈在數個 CPU 之間。這可避免網路流量在單一 NIC 硬體佇列上遇上瓶頸。
若要啟用 RPS,請在
/sys/class/net/ethX/queues/rx-N/rps_cpus
中指定目標 CPU 的名稱,請將 ethX
取代為 NIC 的相應裝置名稱(例如 eth1
、eth2
),並將 rx-N
取代為指定的 NIC 接收佇列。這便能讓檔案中指定的 CPU 處理來自於 ethX
上,rx-N
佇列中的資料。當指定 CPU 時,請考量佇列的「快取關聯」(cache affinity) [4]。
8.1.2. 接收流量操控(Receive Flow Steering,RFS)
RFS 乃 RPS 的延伸,它能讓管理員配置一個雜湊表,此雜湊表會在應用程式接收資料和被網路堆疊查閱時,自動填入。這能判斷哪個應用程式會接收哪些網路資料(根據 source:destination 網路資訊)。
透過使用這項資訊,網路堆疊可排程最適合的 CPU 接收各個封包。若要配置 RFS,請使用下列微調項目:
/proc/sys/net/core/rps_sock_flow_entries
- 這可控制 kernel 能轉至特定 CPU 的最大 socket/流量數。這是系統全域的共享限制。
/sys/class/net/ethX/queues/rx-N/rps_flow_cnt
- 這能控制 kernel 在一張網路卡(
ethX
)上,所能轉至特定接收佇列(rx-N
)的最大插槽/流量數量。請注意,此微調項目所有各佇列的值的加總,在所有網路卡上皆應與/proc/sys/net/core/rps_sock_flow_entries
的值相等或更低。
和 RPS 不同,RFS 允許接收佇列和應用程式在處理封包流量時,共享相同的 CPU。這在某些情況下可提升效能。然而,此效能改善取決於快取階層、應用程式負載等等。
8.1.3. TCP 精簡串流的 getsockopt 支援
Thin-stream(精簡串流)是個用來描繪某種傳輸協定的名詞,在其中,應用程式會以極低的速率傳送資料,因此此協定的重新傳輸機制不處於飽和狀況下。使用精簡串流協定的應用程式一般會透過 TCP 之類的可靠協定進行傳輸;大部份情況下,此類型的應用程式會提供對於時間非常敏感的服務(比方說股市交易、線上遊戲、控制系統等服務)。
對於時間敏感的服務來說,封包遺失可能會造成極大的影響。為了避免此問題,
getsockopt
已改善以支援兩項額外選項:
- TCP_THIN_DUPACK
- 此布林值能在進行了一項精簡串流的 dupACK 之後,啟用重新傳輸的動態觸發。
- TCP_THIN_LINEAR_TIMEOUTS
- 此布林值會動態觸發精簡串流的線性逾時。
這兩項選項皆能透過應用程式具體地啟用。欲取得更多有關於這些選項的相關資訊,請參閱
file:///usr/share/doc/kernel-doc-version/Documentation/networking/ip-sysctl.txt
。欲取得更多有關於精簡串流上的相關資訊,請參閱 file:///usr/share/doc/kernel-doc-version/Documentation/networking/tcp-thin.txt
。
8.1.4. 支援通透式代理
Kernel 現在已能處理非本機綁定的 IPv4 TCP 和 UDP socket,以支援通透式代理(TProxy,transparent proxy)。若要啟用此功能,您需要配置相應的 iptables。同時,您也必須正確啟用和配置政策路由。
欲取得更多有關於通透式代理的相關資訊,請參閱
file:///usr/share/doc/kernel-doc-version/Documentation/networking/tproxy.txt
。