我試圖優化基於UDP的大型系統中的通信。 通過優化,我的意思是儘量減少數據包的丟失。 (是的,我知道UDP固有的侷限性,不建議其他協議) 我們有幾個.exe文件都與幾個線程,並使用如何監視Windows XP中的UDP緩衝區
setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers.
我們有經驗豐富,設置非常大的緩衝區對於很多插座降低整體性能(更多的數據包丟失) 但是如何監視這些增加的緩衝區大小的影響? 。尤其是在接收端,我想查看是否有任何端口獲取消息由於缺少緩衝區而被丟棄。
請建議如何可以做到這一點, (WinDBG的用戶或內核模式,特別節目,知曉一些個體經營)
編輯: @EdChum: 我已經使用Wireshark的,並是其痛苦將線路上的數據包與應用程序接收的數據包相關聯。我曾多次看到數據包在線(由Wireshark捕獲),但未被應用程序接收。 那些丟失的數據包通常是一個到一個多播目的地的小數據包,這個數據包在一個大單播數據包之後以非常短的時間間隔發送。單播的接收者失去了多播,但其他人接收它。
我懷疑XP有時會在NDIS或IP層的某處遇到某種緩衝區匱乏,並因此靜默地丟棄數據包。如果有某個櫃檯,我可以證實這一點。
也許來自Windows Performance Toolkit的xperf.exe可能會有所幫助。有一個名爲「NETWORKTRACE」的內核標誌可能很有用。另外,在我的Win7框中,「xperf -providers i」顯示了用於TCP/IP,Winsock和AFD的用戶模式ETW提供程序。 – 2012-04-16 15:12:37