網(wǎng)卡抓包丟包排查一

一 背景

有時(shí)候,需要關(guān)注下網(wǎng)絡(luò)的是否丟包,特別是高帶寬情況下測(cè)試系統(tǒng)的性能的時(shí)候, 這次我們?cè)跍y(cè)試很小的流量的情況下,用ifconfig命令查看發(fā)現(xiàn)丟包:

watch ifconfig eno2
[root@localhost ~]#  ifconfig eno2
eno2: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        ether 78:ac:44:0f:16:00  txqueuelen 1000  (Ethernet)
        RX packets 1445302589  bytes 255819232376 (238.2 GiB)
        RX errors 0  dropped 43330140683  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

dropped 數(shù)據(jù)在一直增加.

二 分析

2.1 實(shí)際網(wǎng)卡速率

既然沒有錯(cuò)誤,那么看看網(wǎng)卡的支持的速率多大,是否可以滿足現(xiàn)有的要求:

[root@localhost ~]# ethtool eno2 | egrep 'Speed|Duplex'
    Speed: 10000Mb/s
    Duplex: Full

10Gbps大于測(cè)試的速率,這個(gè)原因排除.

2.2 ethtool 分析具體丟包原因

通過ethtool -S來查看丟包原因:

[root@localhost ~]# ethtool -S eno2|grep drop
     rx_dropped: 1996379212
     tx_dropped: 0
     port.rx_dropped: 0
     port.tx_dropped_link_down: 0
[root@localhost ~]# ethtool -S eno2|grep error
     rx_errors: 0
     tx_errors: 0
     rx_length_errors: 0
     rx_crc_errors: 0
     port.tx_errors: 0
     port.rx_crc_errors: 0
     port.rx_length_errors: 0

發(fā)現(xiàn)除了丟包數(shù)據(jù),并沒有明顯的錯(cuò)誤.


網(wǎng)卡收包過程-圖來自互聯(lián)網(wǎng)

2.2.1 rx_missed_errors

此原因是ring-buffer不夠了,可能原因來的速率確實(shí)很大,超出了預(yù)期,如果是臨時(shí)的大流量,可以通過增加rx的ring-buffer大小來解決,這里面的ring-buffer大小是指存的幀的數(shù)量,而不是字節(jié)數(shù).

# ethtool -g eno2
Ring parameters for eno2:
Pre-set maximums:
RX:     4096
RX Mini:    0
RX Jumbo:   0
TX:     4096
Current hardware settings:
RX:     1024
RX Mini:    0
RX Jumbo:   0
TX:     512

2.2.2 overruns

這玩意增大,說明數(shù)據(jù)包還沒到ring buffer就被物理網(wǎng)卡丟棄了,可能原因是中斷不均衡造成的.
如果沒有做線程綁定cpu的設(shè)置,就要看下是否開啟了中斷均衡:

service irqbalance status

如果指定了處理網(wǎng)絡(luò)包的線程綁定了具體的CPU,則需要將系統(tǒng)自帶的中斷均衡程序關(guān)閉:

service irqbalance stop

注意,處理網(wǎng)絡(luò)包的線程綁定cpu后, 可以達(dá)到的目的是網(wǎng)絡(luò)包的中斷是這個(gè)線程處理,而且后續(xù)也是
這個(gè)線程再進(jìn)一步分析包,好處是緩存可以重用,不用因?yàn)榍袚Q不同線程導(dǎo)致緩存失效的問題.
特別是NUMA架構(gòu),要將網(wǎng)卡歸屬NUMA節(jié)點(diǎn)的CPU綁定給線程,查看辦法:

lscpu 
...
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39
...

網(wǎng)卡歸屬的NUMA節(jié)點(diǎn)查看:

[root@localhost ~]# cat /sys/class/net/eno2/device/numa_node
0

我們就可以把NUMA節(jié)點(diǎn)0上的CPU綁定給線程,用于處理eno2網(wǎng)卡的數(shù)據(jù)包薄料。

如何把網(wǎng)卡的隊(duì)列的中斷處理綁定到特定的cpu上,雖然可以手工設(shè)置,但是比較麻煩玩郊,網(wǎng)上有個(gè)腳本:set_irq_affinity 伴嗡,通過這個(gè)腳本可以方便地設(shè)置:

set_irq_affinity 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38 eno2

即用0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38 這些cpu來處理eno2網(wǎng)卡的中斷婉支。
我們可以將eno2的網(wǎng)卡隊(duì)列改成了20帆卓,這樣剛好可以一一對(duì)應(yīng)稽穆,更改辦法:

ethtool -L eno2 combined 20

負(fù)載均衡相關(guān)設(shè)置:

ethtool -K  eno2   rxhash on
ethtool -K  eno2   ntuple on
for proto in tcp4 udp4 ah4 esp4 sctp4 tcp6 udp6 ah6 esp6 sctp6
do
ethtool -N eno2 rx-flow-hash ${proto} sd
done

為了讓一個(gè)流所屬的雙向包都均衡到同一個(gè)網(wǎng)卡隊(duì)列中冠王,需要設(shè)置對(duì)稱哈希算法的key,設(shè)置方法如下:

ethtool -X eno2 hkey   6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A:6D:5A equal 20

2.2.3 rx_drop

這里面直觀看是丟包數(shù)舌镶,其實(shí)不僅僅是丟包數(shù)柱彻,比較坑豪娜。
The RT and RHEL7 kernels contains code that updates the rx_dropped counter for other non-error conditions.

The softnet backlog full
Bad VLAN tags
Packets received with unknown or unregistered protocols
IPv6 frames when the server is configured only for ipv4

具體可以參考:

[https://access.redhat.com/solutions/657483](https://access.redhat.com/solutions/657483)

如果想看實(shí)際網(wǎng)卡上是否有丟包,可以通過ethtool -S eno2|grep error,想看下重傳率绒疗,可以通過
netstat -s 查看:

tcp重傳

奇怪的是侵歇,同樣的包回放,如果不處理吓蘑,只收包就不丟包惕虑,這樣上面的原因就說不過去了,繼續(xù)排查磨镶。

三 程序排查

3.1 首先是磁盤io排查

因?yàn)槌绦蛴写罅繉懳募僮骼D瑁钥纯词遣皇谴疟P的IO滿了造成的丟包。

 iostat -x 1 10

磁盤IO并未達(dá)到瓶頸琳猫。

yum install iotop
iotop -oP

也未看到特別大的磁盤IO伟叛,排除這個(gè)問題。

3.2 CPU

線程是綁定cpu的方式脐嫂,而且整體來說占用很均衡统刮,說明不存在cpu不均衡導(dǎo)致中斷處理不過來造成的丟包問題。

top -Hp pid

查看關(guān)鍵線程的cpu占用情況账千,比較均衡侥蒙,無瓶頸。

3.3 內(nèi)存查看

yum install numactl
#查看內(nèi)存占用
numastat -m

沒發(fā)現(xiàn)什么異常匀奏,內(nèi)存占用很均衡鞭衩。

3.4 排查中斷

通過以下命令看下,軟中斷在各個(gè)cpu上是否均衡娃善,如果不均衡按照overrun的辦法均衡下论衍。

watch cat /proc/softirqs

四 其他

目前該排查的都排查了,包括驅(qū)動(dòng)程序聚磺,已經(jīng)按照安裝了最新的驅(qū)動(dòng)程序坯台,仍然存在丟包問題。
由于是采用netmap庫抓包瘫寝,所以下一步要進(jìn)行源碼或驅(qū)動(dòng)排查蜒蕾。
如果不是網(wǎng)卡丟包,而是正常的網(wǎng)絡(luò)丟包矢沿,可以參考下安裝下dropwatch排查

#yum install dropwatch
#dropwatch -l kas
>start

具體可以參考下面第一個(gè)鏈接:

[https://vcpu.me/categories/](https://vcpu.me/categories/)
[https://blog.huoding.com/2020/04/27/814](https://blog.huoding.com/2020/04/27/814)

五 詩詞欣賞

《訪戴天山道士不遇》

李白

犬吠水聲中滥搭,桃花帶露濃酸纲。
樹深時(shí)見鹿捣鲸,溪午不聞鐘。
野竹分青靄闽坡,飛泉掛碧峰栽惶。
無人知所去愁溜,愁倚兩三松。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末外厂,一起剝皮案震驚了整個(gè)濱河市冕象,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汁蝶,老刑警劉巖渐扮,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掖棉,居然都是意外死亡墓律,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門幔亥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耻讽,“玉大人,你說我怎么就攤上這事帕棉≌敕剩” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵香伴,是天一觀的道長慰枕。 經(jīng)常有香客問我,道長瞒窒,這世上最難降的妖魔是什么捺僻? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮崇裁,結(jié)果婚禮上匕坯,老公的妹妹穿的比我還像新娘。我一直安慰自己拔稳,他們只是感情好葛峻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巴比,像睡著了一般术奖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轻绞,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天采记,我揣著相機(jī)與錄音,去河邊找鬼政勃。 笑死唧龄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奸远。 我是一名探鬼主播既棺,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讽挟,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了丸冕?” 一聲冷哼從身側(cè)響起耽梅,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胖烛,沒想到半個(gè)月后眼姐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佩番,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妥凳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片答捕。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逝钥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拱镐,到底是詐尸還是另有隱情艘款,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布沃琅,位于F島的核電站哗咆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏益眉。R本人自食惡果不足惜晌柬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望郭脂。 院中可真熱鬧年碘,春花似錦、人聲如沸展鸡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莹弊。三九已至涤久,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忍弛,已是汗流浹背响迂。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留细疚,地道東北人蔗彤。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幕与。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容