我试图在基于UDP的大型系统中优化通信。 通过优化,我的意思是尽量减less数据包的丢失。 (是的,我知道UDP的固有限制,不build议另一种协议)我们有几个.exe每个有几个线程,并使用
setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers.
我们已经体验到,为许多套接字设置非常大的缓冲区会降低总体性能(更多的数据包丢失),但是如何监视这些增加的缓冲区大小的影响? 。 特别是在接收端,我想看看是否有任何端口获取消息由于缺乏缓冲区而被丢弃。
请build议如何做到这一点(Windbg在用户或内核模式,特殊的程序,自我思考)
编辑:@EdChum:我已经使用WireShark,并且它是痛苦的关联线上的数据包与应用程序接收的数据包。 我曾多次看到数据包在线(由Wireshark捕获),但未被应用程序接收。 那些丢失的数据包通常是一个到一个多播目的地的小数据包,这个数据包在一个大的单播数据包之后以很小的时间间隔发送。 单播的接收者失去了多播,但是其他的接收它。
我的怀疑是,XP有时候会在NDIS或IP层的某个地方遭受某种缓冲区饥饿,并因此悄然丢弃数据包。 如果有一个柜台,我可以得到这个证实。
不知道如何使用WinDbg做到这一点,但我会使用NetMon或WireShark来监视数据包,看看是否有被丢弃,这将是痛苦的取决于它是多么容易重现,你将需要学习如何过滤数据包,以便显示器显示您感兴趣的内容,但这两个应用程序的帮助是非常有用的。
您必须监听物理套接字,而不是回送地址才能监视数据包。