天天看點

伺服器網卡丢包

有時會發生網絡丢包現象,此處的丢包有兩種,真正意義上的丢包和邏輯丢包(此處以tcp協定棧丢包為例)。之前falcon-agent也上報了相應的名額,在此處對一些疑問給出盡量詳細的解釋。

二、linux系統pakcet接收的過程

過程簡單概括為

 網卡收到包以後通過DMA傳至ring buffer 

網卡觸發硬體中斷,中斷處理函數調用包接受軟中斷(softirq) 

Softirq檢測各cpu的網卡poll list,并輪詢相應網卡的ring buffer 

包從相應packet desciptor 中移到更上一層處理,并把該packet descriptor重置

真實的丢包就是說這三個階段的任一階段收到了包,但因為某些原因把它丢棄了。

三、發生真實丢包的原因

上述過程均可能發生丢包,

當ring buffer滿了并且kernel softirq并不能及時處理後續的進來的包,那就會導緻丢包。可以通過ethtool -G eth1 rx number增大receive buffer的值可以緩解丢包,同理也可以設定transfer buffer。

當socket backlog滿了導緻丢包,可以設定/proc/sys/net/ipv4/tcp_max_syn_backlog來增加tcp syn隊列的長度。

四、真實丢包判斷

可以通過ethtool、ifconfig、netstat指令檢視丢包統計,也可以直接檢視/proc/net/dev、/sys/class/net/dev_name檢視,如ifconfig eth0

第三行,第四行表示收包和發包的情況,errors,dropped,overruns,frame不為0即表示發生了真正的丢包,此處參考了http://jaseywang.me/2014/08/16/ifconfig-%E4%B8%8B%E9%9D%A2%E7%9A%84%E4%B8%80%E4%BA%9B%E5%AD%97%E6%AE%B5errors-dropped-overruns/,結果如下

RX errors: 表示總的收包的錯誤數量,這包括 too-long-frames 錯誤,Ring Buffer 溢出錯誤,crc 校驗錯誤,幀同步錯誤,fifo overruns 以及 missed pkg 等等。

RX dropped: 表示資料包已經進入了 Ring Buffer,但是由于記憶體不夠等系統原因,導緻在拷貝到記憶體的過程中被丢棄。

RX overruns: 表示了 fifo 的 overruns,這是由于 Ring Buffer(aka Driver Queue) 傳輸的 IO 大于 kernel 能夠處理的 IO 導緻的,而 Ring Buffer 則是指在發起 IRQ 請求之前的那塊 buffer。很明顯,overruns 的增大意味着資料包沒到 Ring Buffer 就被網卡實體層給丢棄了,而 CPU 無法即使的進行中斷是造成 Ring Buffer 滿的原因之一,上面那台有問題的機器就是因為 interruprs 分布的不均勻(都壓在 core0),沒有做 affinity 而造成的丢包。

RX frame: 表示 misaligned 的 frames。

對于 TX 的來說,出現上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error,而 collisions 則表示由于 CSMA/CD 造成的傳輸中斷。

五、邏輯意義上的丢包

相信大家多少都了解tcp協定棧,tcp協定棧中有逾時重傳算法,此處的邏輯丢包指的是接收方沒有在發出ack後收到正确序号範圍的packet

六、邏輯意義上的丢包原因及判斷方法

原因很可能是發生了網絡問題,具體包括如網絡擁塞、網線松動、網絡不穩定及其他線路故障,也有可能是網絡流量突增,但是我們做監控的不能去實時的拿着線路檢測儀去檢查線路,目前拟定使用如下名額,來源/proc/net/netstat:

TcpExt.TCPLoss,tcp協定棧丢失資料包而進行恢複的次數,此時falcon-agent所在主機為接收方

TcpExt.TCPTimeouts tcp資料在指定時間内沒有受到應答ack而逾時的次數,此時falcon-agent所在主機為發送方

TcpExt.TCPLossFailures,tcp協定棧丢失資料包進行恢複失敗的次數

TcpExt.TcpFastRetrans,tcp快速重傳的次數

參考:

https://www.cnblogs.com/276815076/p/5736272.html

https://blog.csdn.net/changyourmind/article/details/53127100