2010-07-22 46 views
0

即時通訊工作在兩臺客戶機之間,一臺用於發送,另一臺用於接收udp數據報,兩臺機器直接相互連接。每個數據報的大小爲1024byte,並使用winsock(阻塞)發送。它們都在非常快的機器上運行(單獨)。與16GB RAM和8個CPU,與RAID 0驅動器。
即時尋找提示,以最大限度地提高我的吞吐量,提示應該在winsock水平,但如果你有一些其他技巧,這將是偉大的。
目前即時獲得250-400mbit的傳輸速度。即時通訊尋找更多。
謝謝。在udp上最大化性能

+0

什麼是兩臺機器之間的鏈路的帶寬?你確定你沒有CPU瓶頸(即你沒有100%的CPU運行)? – adamk 2010-07-22 14:30:58

+0

帶寬爲1gbps。 沒有.. CPU是在30%〜 – EricBenDavid 2010-07-22 14:49:24

回答

4

因爲除了發送和接收應用程序之外,還不知道還有什麼可以限制它,所以這裏有幾件事要嘗試。我假設你使用的是IPv4,而我不是Windows程序員。

最大化使用可靠連接時發送的數據包大小。對於100 mbs以太網,最大數據包爲1518,以太網使用18個,IPv4使用20-64(通常爲20),UDP使用8個字節。這意味着通常您應該能夠發送每個數據包1472個字節的UDP有效負載。

如果您使用的千兆以太網設備支持它,您的數據包大小將增加到9000字節(巨型幀),因此發送更接近該大小的數據應該可以加快速度。

如果您將來自聽衆的任何確認發送給您的發件人,請嘗試確保它們很少發送,並且一次只能確認一個數據包。儘量讓聽衆不必說太多,並儘量避免發送者不得不等待聽衆繼續發送。

在發件人應用程序所在的計算機上,請考慮爲接收方所在的計算機設置靜態ARP條目。如果沒有這個每隔幾秒鐘,可能會有一個暫停,同時發出新的ARP請求以確保ARP緩存是最新的。一些ARP實現可能會在ARP條目到期之前完成此請求,這會減少影響,但有些則不會。

關閉儘可能多的網絡用戶。如果您使用的是以太網交換機,那麼您應該專注於將流入/流出運行您的應用程序的計算機/網絡設備駐留/使用(包括廣播消息,如許多ARP請求)的流量。如果它是一個集線器,那麼你可能想要安靜整個網絡。 Windows傾向於向網絡發送持續不斷的垃圾流,這在很多情況下並不有用。

可能會限制一個應用程序或用戶可以擁有多少網絡帶寬。或者,操作系統允許自己使用多少網絡帶寬可能會受到限制。如果它們存在,這些可能會在註冊表中更改。

網絡接口芯片實際上並不總是支持網絡的最大帶寬並不少見。有些芯片可能會遺漏數據包,因爲它們正在忙於處理先前的數據包,以及一些不能像以太網規格所允許的那樣靠近發送數據包的芯片。另外,系統的其他部分可能無法跟上,即使是這樣。

1

使用1Gbps的網絡和升級你的網絡硬件...

+3

他顯然不使用100Mbit網絡或他不會得到400Mbps ... – adamk 2010-07-22 14:34:49

+0

100MByte網絡!= 100MBit網絡:) – ariso 2010-07-29 14:37:00

0

對於TCP連接已經表明,使用多個並行連接將更好地利用數據連接。我不確定這是否適用於UDP,但它可能有助於解決某些數據包處理的延遲問題。

所以你可能想嘗試多個阻塞調用的線程。

+0

即時通訊限於一個特定的發送和接收端口。 據我所知,你不能在同一個端口打開2個插座。 – EricBenDavid 2010-07-22 14:51:03

2

有些東西看:

  • 連接的UDP套接字some info)快捷幾個操作在內核中,因此速度更快(見史蒂文斯UNP書詳細信息)。
  • 插座發送和接收緩衝區 - 與SO_SNDBUFSO_RCVBUF套接字選項起到抵消尖峯和丟包
  • 看看你能不能撞了鏈接MTU和使用jumbo frames
0

除了發送和recv緩衝區尼古拉的建議,如果可以的話,切換到重疊I/O,並有許多RECVS懸而未決,這也有助於減少由堆棧由於缺乏丟棄的數據報的數量緩衝區空間。

如果您正在尋找可靠的數據傳輸,請考慮UDT