前面咱們談了的內容以下:數據庫
(1)Linux性能調優之Linux進程管理windows
這一節咱們將談下Linux的網絡子系統服務器
網絡子系統是另外一個影響性能的重要子系統!網絡操做相關的組件有不少,例如交換機、路 由器、網關、PC等等。儘管這些組件不受到Linux系統的控制,可是,他們對系統的總體性能 有很大影響。網絡
如今,讓咱們主要集中注意力看看Linux是如何處理網絡操做的。socket
TCP/IP協議和OSI模型有相似的層級結構。Linux內核的網絡實現採用了類似的辦法。下圖展 示了Linux的TCP/IP棧的層級和TCP/IP通訊概覽:tcp
和不少Unix操做系統同樣,Linux爲TCP/IP網絡操做提供套接字(Socket)接口。套接字爲用 戶應用程序提供接口。下面咱們看看在網絡數據傳遞過程當中,基本的數據處理順序:post
3.1 套接字緩衝(Socket buffer)
正如前文所說,內核使用緩衝來發送和接收數據。下圖展現了網絡緩存的配置項。能夠 用/proc/sys/net
下的文件調整。
/proc/sys/net/core/rmem_max
/proc/sys/net/core/rmem_default
/proc/sys/net/core/wmem_max
/proc/sys/net/core/wmem_default
/proc/sys/net/ipv4/tcp_mem
/proc/sys/net/ipv4/tcp_rmem
/proc/sys/net/ipv4/tcp_wmem
複製代碼
下圖展現了這些參數:
3.2 網絡API(Network API,NAPI)
新的網絡子系統API發生了一些變化。Linux網絡棧的標準實現更關注可靠性和低延時,而不是低負載和高吞吐。這個特徵雖然有利於建立防火牆,可是大多數企業應用,例如文件、打印和數據庫都會比相同狀況下的windows慢一些。
在一個典型的網絡包處理中,以下圖藍色箭頭所描繪的,網卡把數據包移動到操做系統內核 的網絡緩衝,而且觸發一個CPU的硬中斷。
這只是是進程處理網絡包的一個簡單視圖,可是顯示出了這種方法的一個不足。每次當一個 MAC地址匹配的以太網幀到達接口,都會引發一次硬中斷。不管如何,CPU必須停下正在處 理的進程,而後處理這個硬中斷,引起一次上下文切換和刷新處理器緩存。你可能以爲,若是隻有不多的數據包,那這就不是什麼大問題。可是,GB級別的以太網卡和現代的應用程序 一秒鐘能產生數千個包,致使數量龐大的中斷和上下文切換。
所以,Linux引入NAPI來對抗處理網絡流量引起的相關開銷。對於第一個包,NAPI就和傳統 的實現同樣,觸發一次中斷。可是第一個包以後的包,接口進入了polling模式。只要還有數據 包在網卡DMA 的環狀緩衝(ring buffer)中,就不會引起新的中斷,從而高效的減小了上下文 切換和相關的消耗。在最後的包被處理,環狀緩存被清空以後,網卡又回到了中斷模式。 NAPI的的另外一個好處是經過生成能被多處理器支持的軟中斷,加強了多處理器的擴展。NAPI 對大多數企業級種的多處理器操做系統都是巨大的改進,須要NAPI支持的驅動。還有極大的 調優空間等着咱們在後面探索。
3.3 Netfilter
Linux已經把防火牆做爲內核的一部分。這一功能由Netfilter模塊提供。你可使用iptables命 令來管理和配置Netfilter。
通常來講,Netfilter提供了以下的幾個功能。
匹配過濾器能夠定義以下的屬性。
下圖展現了數據包如何在Netfilter鏈中傳遞,以及順序中每個點定義的可用規則。
若是匹配到規則,Netfilter將會採起相應的操做,這個操做被叫作目標(target),下面是一 些可用的target。
3.4 鏈接追蹤(Connection tracking)
爲了知足更多的防火牆功能,Netfilter使用鏈接追蹤機制,跟蹤全部網絡流量的狀態。經過 TCP鏈接狀態和其它網絡屬性(IP地址,端口,協議,序列號,ack,ICMP類型,等), Netfilter把每個包分類到下面四個狀態。
做爲補充,Netfilter可使用其它模塊,經過分析協議特定屬性和操做進行更詳細的鏈接跟 蹤。例如,有FTP、NetBIOS、TFTP、IRC的鏈接跟蹤模塊。
TCP/IP一直是默認的網絡協議。Linux上的TCP/IP實現是十分契合TCP/IP標準的。爲了更好 的性能優化,應該熟悉基本的TCP/IP網絡。
4.1 鏈接創建
在應用數據傳輸以前,服務器和客戶端就應該創建起鏈接,鏈接創建的過程叫作TCP/IP三次 握手。下圖展現了基本的鏈接創建和中斷過程。
在回話期間,鏈接狀態會發生改變。下圖展現了TCP/IP鏈接狀態圖:
一旦創建起鏈接,應用數據就能夠經過這個鏈接來傳送,在全部的數據傳輸完成以後,鏈接關閉。下面是四次揮手的簡單過程:
4.2 流量控制(Traffic control)
TCP/IP有一種機制,確保即便在擁擠時段和網絡傳輸質量惡劣的狀況下,高效數據傳輸!這種機制就是TCP/IP滑動窗口(TCP/IP transfer window)
滑動窗口是Linux操做系統上TCP/IP實現的重要組成。基本上,TCP滑動窗口就是在發送數據 以前,一臺機器和對方機器確認能發送和接收的最大數據量的機制。窗口大小放在TCP頭的 滑動窗口字段中,由接受端傳遞給發送端。使用滑動窗口可使數據傳遞更加高效,由於發 送主機沒必要等待每個數據包的確認。這使得網絡更加有效利用,也提升了延遲確認效率。 在鏈接中,TCP窗口從很小開始,隨着收到每個對端的確認而慢慢增加。下面是圖示:
談完Linux的網絡子系統,理論知識梳理完了,下一節將會談談:理解Linux性能指標。