即時通訊工作在兩臺客戶機之間,一臺用於發送,另一臺用於接收udp數據報,兩臺機器直接相互連接。每個數據報的大小爲1024byte,並使用winsock(阻塞)發送。它們都在非常快的機器上運行(單獨)。與16GB RAM和8個CPU,與RAID 0驅動器。
即時尋找提示,以最大限度地提高我的吞吐量,提示應該在winsock水平,但如果你有一些其他技巧,這將是偉大的。
目前即時獲得250-400mbit的傳輸速度。即時通訊尋找更多。
謝謝。在udp上最大化性能
回答
因爲除了發送和接收應用程序之外,還不知道還有什麼可以限制它,所以這裏有幾件事要嘗試。我假設你使用的是IPv4,而我不是Windows程序員。
最大化使用可靠連接時發送的數據包大小。對於100 mbs以太網,最大數據包爲1518,以太網使用18個,IPv4使用20-64(通常爲20),UDP使用8個字節。這意味着通常您應該能夠發送每個數據包1472個字節的UDP有效負載。
如果您使用的千兆以太網設備支持它,您的數據包大小將增加到9000字節(巨型幀),因此發送更接近該大小的數據應該可以加快速度。
如果您將來自聽衆的任何確認發送給您的發件人,請嘗試確保它們很少發送,並且一次只能確認一個數據包。儘量讓聽衆不必說太多,並儘量避免發送者不得不等待聽衆繼續發送。
在發件人應用程序所在的計算機上,請考慮爲接收方所在的計算機設置靜態ARP條目。如果沒有這個每隔幾秒鐘,可能會有一個暫停,同時發出新的ARP請求以確保ARP緩存是最新的。一些ARP實現可能會在ARP條目到期之前完成此請求,這會減少影響,但有些則不會。
關閉儘可能多的網絡用戶。如果您使用的是以太網交換機,那麼您應該專注於將流入/流出運行您的應用程序的計算機/網絡設備駐留/使用(包括廣播消息,如許多ARP請求)的流量。如果它是一個集線器,那麼你可能想要安靜整個網絡。 Windows傾向於向網絡發送持續不斷的垃圾流,這在很多情況下並不有用。
可能會限制一個應用程序或用戶可以擁有多少網絡帶寬。或者,操作系統允許自己使用多少網絡帶寬可能會受到限制。如果它們存在,這些可能會在註冊表中更改。
網絡接口芯片實際上並不總是支持網絡的最大帶寬並不少見。有些芯片可能會遺漏數據包,因爲它們正在忙於處理先前的數據包,以及一些不能像以太網規格所允許的那樣靠近發送數據包的芯片。另外,系統的其他部分可能無法跟上,即使是這樣。
對於TCP連接已經表明,使用多個並行連接將更好地利用數據連接。我不確定這是否適用於UDP,但它可能有助於解決某些數據包處理的延遲問題。
所以你可能想嘗試多個阻塞調用的線程。
即時通訊限於一個特定的發送和接收端口。 據我所知,你不能在同一個端口打開2個插座。 – EricBenDavid 2010-07-22 14:51:03
有些東西看:
- 連接的UDP套接字(some info)快捷幾個操作在內核中,因此速度更快(見史蒂文斯UNP書詳細信息)。
- 插座發送和接收緩衝區 - 與
SO_SNDBUF
和SO_RCVBUF
套接字選項起到抵消尖峯和丟包 - 看看你能不能撞了鏈接MTU和使用jumbo frames。
除了發送和recv緩衝區尼古拉的建議,如果可以的話,切換到重疊I/O,並有許多RECVS懸而未決,這也有助於減少由堆棧由於缺乏丟棄的數據報的數量緩衝區空間。
如果您正在尋找可靠的數據傳輸,請考慮UDT。
測試硬件與一個已經證明的代碼,如iperf的包的限制條件:
http://www.noc.ucf.edu/Tools/Iperf/
我連接一個Windows構建,它可能是開機,關機Linux的一個好主意LiveCD並嘗試一個Linux版本來比較IP堆棧。
更有可能的是你的網卡效果不好,試試英特爾千兆服務器適配器:
http://www.intel.com/network/connectivity/products/server_adapters.htm
- 1. Scala:corePoolSize以最大化Actor性能
- 2. 讓例程的性能最大化
- 3. 優化性能上最近的大型表的行
- 4. TCP和UDP性能
- 5. UDP傳輸性能
- 6. 優化性能,以最大像素值調整大小
- 7. 如何簡化常規WPF呈現以最大化性能?
- 8. Android最大UDP數據包大小
- 9. 在Java中最大化功能
- 10. Selenium:Chrome在IIS下不能最大化
- 11. 在雙擊功能區時禁用最小化或最大化
- 12. Haskell的性能時最小/最大/總和在大列表
- 13. 高性能UDP服務.NET
- 14. Java vs C JNI - UDP性能
- 15. 本地UDP廣播性能
- 16. 在Java中,如何處理大於最大UDP數據負載的UDP消息?
- 17. 在WinForm上禁用最小化和最大化?
- 18. 在.NET Compact Framework上最大化事件
- 19. Onclick在其他divs上最大化div
- 20. Mathematica - 在區間上最大化函數
- 21. 在彈性搜索中最小化json文檔大小增加性能?
- 22. 最大寬度的CSS屬性不能在DIV上工作
- 23. 在android中最大化和最小化
- 24. 窗口最大化最大化
- 25. 最小化/最大化div
- 26. 將對象註冊爲通知偵聽器? - 最大化性能!
- 27. 哪種選擇會導致性能最大化?
- 28. 如何使用JDBC來最大化Netty的性能?
- 29. 如何使用Django/Apache/mod_wsgi/MySQL最大化EC2的性能?
- 30. 最大/ MSP通過UDP報文格式
什麼是兩臺機器之間的鏈路的帶寬?你確定你沒有CPU瓶頸(即你沒有100%的CPU運行)? – adamk 2010-07-22 14:30:58
帶寬爲1gbps。 沒有.. CPU是在30%〜 – EricBenDavid 2010-07-22 14:49:24