1. 程式人生 > >Linux效能優化 第七章 效能工具:網路

Linux效能優化 第七章 效能工具:網路

7.1 網路I/O介紹

       Linux和其他主流作業系統中的網路流量被抽象為一系列的硬體和軟體層次。

       鏈路層,也就是最低的一層,包含網路硬體,如乙太網裝置。在傳送網路流量時,這一層並不區分流量型別,而僅僅以儘可能快的速度傳送和接收資料(幀)。

       鏈路層上面是網路層。這一層使用IP協議和ICMP協議在機器間定址並路由資料包。IP/ICMP盡其最大努力嘗試在機器之間傳遞資料包,但是它們不能保證資料包是否能真正達到其目的地。

       網路層上面是傳輸層,它定義了TCP和UDP。TCP是可靠的協議,它保證訊息通過網路送達,如果訊息無法送達它就會產生一個錯誤。而UDP則一個不可靠的協議,它無法保證資訊能夠送達(為了更高的速率)。TCP和UDP增加了“服務”的概念。UDP和TCP接收的編號“埠”的訊息。按照慣例,每個型別的網路服務都會被分配不懂的編號,也就是不同的埠。比如HTTP是80埠,SSH是22埠,FTP是23.通常服務會區分埠的型別,但是為了避免埠被混用,通常著名埠的TCP埠和UDP埠都設定為一樣。比如大家都說ssh是22埠,雖然使用的是TCP協議,但是通常SSH也會佔用22埠的UDP服務,所以說著名埠很多時候都不針對協議的。在Linux系統中,檔案/etc/services定義了全部的埠以及它們提供的服務型別。

       最上層是應用層。這一層包含了各種的應用程式。

       Linux核心實現或控制的是最低三層(鏈路層、網路層、傳輸層)。核心可以提供每層的效能統計資訊,包括資料流經過每一層的頻寬使用情況資訊和錯誤計數資訊。

7.1.1 鏈路層的網路流量

       鏈路層,通常是乙太網,以幀序列的形式將資訊傳送到網路上。即便是其上層次的資訊片段大小比幀大很多,鏈路層也會把它們分割為幀,再發送到網路上。資料幀的最大尺寸叫做最大傳輸單位(MTU)。你可以用網路配置工具,如ip或者ifconfig來設定MTU、對乙太網而言,最大大小一般為1500位元組,雖然有些硬體支援巨型幀高達9000位元組。MTU的大小對網路效率有直接的影響。由於每個幀都有一個小容量的頭部,所以MTU越大,傳輸的效率也就越高,但是資料組被損壞或丟棄的機率就越高。對於清潔的網路鏈路來說,大尺寸的MTU帶來更好的效能,但是嘈雜的鏈路來說更小的MTU會有更好的效能。因為,當單個幀損壞時,它要重傳的資料更少。

       在物理層,幀流經物理網路,Linux核心可以收集大量有關幀數量和型別不同的統計資訊。

l  傳送/接收——如果一個幀成功地流入或流出機器,那麼它就會被計為一個已傳送或已接收的幀。

l  錯誤——有錯誤的幀(可能是網路電纜壞了,或者雙工不匹配)

l  丟棄——被丟棄的幀(很可能是因為記憶體或緩衝區容量小)

l  溢位——由於核心或網絡卡有過多的幀,因此被網路丟棄的幀。通常這種情況不應該發生。

l  幀——由於物理問題導致被丟棄的幀。其原因可能是迴圈冗餘校驗(CRC)錯誤或者其他低級別的問題。

l  多播——這些幀不直接定址到當前系統,而是同時廣播到一組節點。

l  壓縮——一些底層介面,如點對點協議(PPP)裝置在把幀傳送到網路上之前,會對其進行壓縮。該值表示的就是被壓縮幀的數量。

7.1.2 協議層網路流量

       對TCP/UDP流量而言,Linux使用套接字/埠來抽象兩臺機器的連線。當與遠端機器連線時,本地應用程式用一個網路套接字來開啟遠端機器的一個埠。如HTTP的80埠,web伺服器會監聽80埠上的連線,當發生連線時,web伺服器就為web頁面的傳輸設定該連線。

7.2網路效能工具

7.2.1 mii-tool(媒體無關介面工具)

       mii-tool是乙太網專用硬體工具,主要用來設乙太網裝置,但它也可以提供當前相關的設定資訊。這個資訊,諸如連結速度和雙工設定,對於追蹤效能不佳的裝置的成因是非常有用的。

第一行的資訊告訴我們網路裝置正在使用100baseTx-FD全雙工連線。

 

 

7.2.2 ethtool

       對比mii-tool,ethtool 的功能更加強大,包含更多的配置選項和裝置統計資訊。

下圖顯示了eth0的配置資訊,顯示該裝置支援多種不同速度和連結的設定,當前連線的是一個全雙工,1000Mbps的鏈路。

 

 

7.2.3 ifconfig(介面配置)

       ifconfig的主要工作就是在Linux機器上安裝和配置網路介面。它還提供了系統中所有的網路裝置的基本效能統計資訊。

ifconifg的效能統計資訊

RX packets

裝置已接收的資料包數

TX packets

裝置已傳送的資料包數

errors

傳送或者接收時的錯誤數

dropped

傳送或者接收時丟棄的資料包數

overruns

網路裝置沒有足夠的緩衝區來發送或者接收一個數據包的次數

frame

底層乙太網幀錯誤的數量

carrier

由於鏈路介質故障(如電纜故障)而丟棄的資料包數量

在下圖中可以看到eth0一共接收了3.2G的資料,傳送了10.6G的資料。該資料是自系統啟動開始計算的,可以用watch觀察資料的變化。

 

 

 

7.2.4 ip

       ip命令是用來取代老舊的ifconfig的,ip不僅可以讓你對Linux聯網的各個不同方面進行配置,還可以顯示每個網路裝置的效能統計資訊。

       和ifconfig類似,ip提供的是自系統啟動以來的資料的彙總。

 

 

7.2.5 sar

       sar除了能提供鏈路層的網路效能資料之外,還能提供一些關於傳輸層開啟的套接字數量的基本資訊。

 

sar顯示所有網路裝置收發的統計資訊

 

 

 

sar顯示套接字的數量

 

 

7.2.6 netstat

       netstat是一個基本的網路效能工具,它幾乎出現在所有的Linux裝置上。可以用它抽象的資訊包括:當前正在使用的網路套接字的數量和型別,以及有關流入和流出當前系統的UDP和TCP資料包數量的特定介面統計資料。它還能將一個套接字回溯到其特定程序或PID,這在試圖確定哪個應用程式要對網路流量負責時是很有用的。

每秒都更新一次活躍的tcp連線

 

 

顯示系統自啟動以來UDP流量的統計資訊: