即时通讯工作在两台客户机之间,一台用于发送,另一台用于接收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