iT邦幫忙

0

1G網卡實際上可以收到的頻寬上限為何? 如何測得其Bottleneck?

大家好:
想請問現行1G網卡實際上可以收到的頻寬上限為多少?
我知道會有關於該網卡所接上的Network Devices, 如果這些設備也都支援到1G的port做傳輸, 那麼該張網卡所可以承受之頻寬上限,其理論與實際值大概會是多少呢?
目前在某台機器開了多個Sockets做打封包的動作,而Server大概每秒只能收到1MB的資料,不知是否到了頻頸!!?

netenken1 iT邦新手 4 級 ‧ 2013-03-01 14:44:38 檢舉
netperf 我不知道跟 iperf 是否親戚關係, 記得嘗試看看開多緒去測試, 效能很好的設備 一個執行緒就可以到頂, 效能普通的話執行緒會需要多一點點, 我無法解釋原因, 大量測試下來結果就是這樣, 當是當然同時也會變得比較吃系統資源是一定的

程式的問題我自己也開發過, 並且我還特別針對市面上一些速度特別快的軟體例如 fastcopy 研究過他的動作原理, 有下面幾個結論

你目前的寫法是否 先把檔案的第一個區塊讀入 記憶體, 在一併回寫, 讀第二個區塊 then 回寫如此重複不斷?? 這是最常見的做法但是這個做法效能非常有限 , 若你要用少量執行緒達到最高效能, 以 fastcopy 的作法(有去研究過他的原始碼)其實是用兩個執行緒在作業, 一個負責讀 一個負責寫, 另外注意 buffer 記憶體要畫分成兩塊, 你可以想想看, 一個人從A點搬東西到B點要怎麼搬最快, 若變成你有兩個人力同樣由A搬到B怎麼搬最快

如果上面做法覺得麻煩 那你就最多執行緒吧, 若小資料傳輸機會大 多執行緒作法還是非常有必要, 的, 並且依照你實際狀況寫這程式的使用環境, 在上面說的做法跟多執行緒作法間還有很多要思考的點
16
netenken1
iT邦新手 4 級 ‧ 2013-02-16 16:05:26
最佳解答

小弟的工作較為特殊, 實際上經常需要做測試區網網路頻寬上限的工作, 很多人對此問題的認知實際上都有錯, 底下是小弟從2008年開始的測試經驗, 簡單來說

  1. 當時第一組測試的是 nVidia 內建的 1G 網卡, 使用ipdef 六個執行續就已經可達95% 網路利用率
  2. 目前隨便一張PCI-E網卡都可達95%以上利用率, 甚至接近100%
  3. 其實真的不需要跑光纖甚至也不需要用到cat6(用一般的cat5e就可以到達此等輸出,但用cat6可以在更長距離得到同等效能是真的), 一般區網佈線距離,100M以內都可以輕易到95%以上
  4. 最近才剛測試 intel 520 10G 網卡 + DELL 5548 Switch , 找5台1G PC 同時連接一台E3-1220 Server (接10G網卡), 輸出就已經可到達驚人的 5.5G/sec 等於5台client輸出將將近100%(沒繼續測試下去是因為懶得弄更多電腦來測試了)
  5. 這方面若有疑問小弟有信心可幫得上忙, 網路上非常多以訛傳訛的文章, 大家都是聽說跟好像, 小弟是實際測試非常大量所得的實戰結果, 在此可提供給大家做參考

抱歉忘了講一個重點 你剛有提到打封包 不知道你的意思是否自己寫程式? 我要提的重點是在於, 大部分人所以為的1G網路效能沒法到1G, 其實最大的原因是,軟體寫得不夠好, 效能太差,並不是卡在網路交換器效能或者網路卡或者電腦 最主要是軟體..
連每天大家所使用到的區網軟體, 就講是 區網之間的檔案拷貝好了, 其實效能也不容易到達100%, 若拷貝雙方的硬體效能都夠快, 要能夠接近100%輸出, 要使用 Windows 7 以上作業系統最容易到達 (包含Windows 2008/2012 , Windows 8), XP,Vista,Windows 2003 個人認為是由於 Samba 只有到 1.x 規範所以實測速度遠遠落後以上OS
這邊不管怎說很多人大概都不相信, 我剛簡單做個測試, 並且已經抓圖下來, 速度就已經有 970MBPS

測試環境簡單描述如下

  1. 由 A 電腦 (i3-3220+8G RAM+SSD+Windows 8)
    拷貝
  2. B 電腦上頭的 (i3-3220+16G RAM+Windows 2008)
    3.3GB 的單一檔案

備註:其中共經過 Cat6 120M 公尺長 DELL 2848 Switch 再Trunk到一台 24 Port TPLINK 全 1G Switch (市價只需要五六千) 線材是 cat5e 約50M, 以上總共經過兩個節點

前輩您好:

謝謝您們的回答,
我的環境是Linux Ubuntu系統,
剛剛我用netperf測試過頻寬大約為601M左右,
所以問題應該是出在我本來自己寫的的測試程式上,此程式簡單來說是用Python寫的DUP Socket每次讀一1.8M大小的log file並每次傳送一行的log data,傳輸完成後,再透過迴圈持續傳送此1.8M的log file,並同時開5個這樣的socket程式做傳輸,請問我要如何改進此測試端程式的作法,以讓它可以在短時間內大量佔據頻寬呢?(希望可以在一支Socket程式就可大量佔據頻寬)還是說一定要模擬多Thread的case才可以做到模擬大量流量的情境?

14
ganymede
iT邦好手 1 級 ‧ 2013-02-15 20:20:10

實際上能使用85%左右就已經是很好的了, 因為除了網路卡自己本身的品質, 還有線材, 網路設備等因素, 線材就有分 cat 5, cat 5e, cat 6 等, 線材長度也是一項因素.

若想測速, 可利用 iperf 來測試您的頻寬.
可以參考 http://www.ithome.com.tw/itadm/article.php?c=54983

8
cmwang
iT邦高手 1 級 ‧ 2013-02-15 23:51:54

wayne21205提到:
目前在某台機器開了多個Sockets做打封包的動作,而Server大概每秒只能收到1MB的資料,不知是否到了頻頸!!?

1MBps的bottleneck對1Gbps而言也太誇張了點,不過如果是linux跑UDP的話為了預防DDoS,預設是會限制UDP的throughput的,會不會是這個原因啊....

我要發表回答

立即登入回答