可用頻寬與udp包大小的關係

2021-07-05 17:24:32 字數 2337 閱讀 1816

昨天花了大量時間在「調優」:因為伺服器的網路輸出頻寬死活與計算值不符合。理論判斷網路輸出頻寬應該是90mbps,但是檢測卻只有50+mbps而已。做了幾個試驗後,我們覺得是伺服器效能問題,於是祭出profile殺器,可是優化了幾個耗時多的函式後,頻寬巍然不動。之後我們先xxoo,再 ooxx,搞得是雞飛狗跳,最後發現一方面是由於我們被頻寬顯示工具誤導了,另一方面當udp包較小的時候,並不是所有網路頻寬都可使用。

1)我們在linux主機用「iftop -i eth0」檢視網路頻寬,iftop顯示的情況極其詳盡,但是它會影響可用頻寬!!!當我們關掉iftop程序後,主機的輸出頻寬立馬從50+mbps上公升到80mbps。所以iftop適合在發現頻寬與理論不一致的時候用來檢視是否有其他連線在使用頻寬。平時顯示頻寬用「watch -n 1 "vnstat -tr 2"」。 windows下直接用任務管理器,檢視「聯網」選項卡即可。

2)當udp包較小的時候,沒辦法充分使用所有頻寬。下表兩台主機都使用100m網絡卡接入100m區域網。表中第一行表示使用linux主機傳送,windows主機接收;第二行表示使用windows傳送,linux主機接收。頻寬並不是確定不變的,表中的數值只是近似值。左邊表示傳送方的頻寬統計,右邊表示接收方的頻寬統計,如果基本一致則只列出一項。頻寬單位均是bps。

udp包長度(不含udp頭) 

5b  

10b  

20b  

40b  

80b  

160b  

320b  

640b  

1280b

linux傳送 

47m/60m 

51.2/60m 

62m 

73.5m 

80m 

86m 

91m 

95m 

97mwindows傳送 

41m/40m 

50/43m 

70m/54m 

76m/62m 80m/71m 

86m/80m 

92m/87m 

96m/91m 97m/93m

傳送頻寬和接收頻寬不一致主要有幾個原因:頻寬統計工具不是十分精確;較小的包會填充到最小長度(46-8-20=18);還有就是區域網內也是會丟包的。下表列出了每秒傳送/接收的包的數目。不過我已經得到我想知道的東西了,所以只是隨便測試幾項哈哈:)

udp包長度(不含udp頭) 

10b  

40b  

160b  

640b  

linux傳送 

126657/125695 

114086/113607 

54128/53686 

17560/17437  

windows傳送 

114824/114636 

116841/116388 

55235/55191 

17542/17525  

收發包率的差別要比頻寬來得小。這也說明了我們使用的頻寬統計工具不是十分精確。(收發包的數目在程式中統計,是準確的)

3) 當目標主機是windows時,如果沒有程序接收udp資料,對資料傳送是有影響的。因為windows會對每個udp包響應乙個「埠不可達」的 icmp包。這個包在我機器上是90位元組(720bits)。比如udp size=320時,linux=>windows:如果windows有程序接收的話,windows入口頻寬大概是91m,出口為0;如果 windows沒有程序接收,入口頻寬則只有50多m,出口頻寬則有30多m。

***************====華麗的分割線********************=

結論:如果要充分利用頻寬資源,udp包的平均長度不能太小。在測試環境下,160b位元組的udp包大概可以利用86%的理論頻寬,640b則可以利用到93%+。當然,這只是在兩台主機上的測試結論。如果網絡卡或者機器更牛x,估計還是有上公升空間的。

***************====2010-12-27********************=

今天再次執行該程式,發現測試小包時的結果有誤:那個瓶頸是cpu造成的,而不是網絡卡io造成的。在多核機器上通過多開程序的方式可以提高小包時的可用頻寬。但如果單程序時cpu使用率本就不滿的時候,提高程序數是沒有用的。比如通過多開程序,linux傳送10b可以達到58mbps而不是上表中的51.2mbps,udp包長大於30時,多開程序不起效果。至於windows,由於現在硬體很強,單程序直接就可以到58mbps了,cpu未滿,提高程序數也不起效果。最新的測試結果(40b以上沒有變化,不列出來,windows和linux差別不大,故只列一行)

udp包長度(不含udp頭) 

5b  

10b  

20b52.8m 

58.42m  

68.1m

UDP包的大小與MTU

在進行udp程式設計的時候,我們最容易想到的問題就是,一次傳送多少bytes好?當然,這個沒有唯一答案,相對於不同的系統,不同的要求,其得到的答案是不一樣的,我這裡僅對 像icq一類的傳送聊天訊息的情況作分析,對於其他情況,你或許也能得到一點幫助 首先,我們知道,tcp ip通常被認為是乙個四層協議...

頻寬與碼元的關係 位元率與頻寬什麼關係

頻寬就是用位元率表示的。位元率 又叫傳信率,每秒傳輸的資訊量,單位是 位元 秒 它的大小不僅和每秒發的碼元個數有關,還和發的碼元本身的統計特性有關。位元率越高,傳送資料速度越快。聲音中的位元率是指將模擬聲音頻號轉換成數字聲音頻號後,單位時間內的二進位制資料量,是間接衡量音訊質量的乙個指標。關於頻寬,...

頻寬與碼元的關係 再遇到碼元 速率 頻寬 9

3.1 碼元 碼元 指用乙個固定時長的訊號波形 數字脈衝 代表不同離散數值的基本波形,是數字通訊中數碼訊號的計量單位,這個時長內的訊號稱為k進製碼元,而該時長稱為碼元寬度。當碼元的離散狀態有a個時 a大於2 此時碼元為a進製碼元。1碼元可以攜帶多個位元的資訊量。例如 在使用二進位制編碼時,只有2種不...