2012-04-13 87 views
3

我試圖優化基於UDP的大型系統中的通信。 通過優化,我的意思是儘量減少數據包的丟失。 (是的,我知道UDP固有的侷限性,不建議其他協議) 我們有幾個.exe文件都與幾個線程,並使用如何監視Windows XP中的UDP緩衝區

setsockopt with SO_SNDBUF & SO_RCVBUF to increase to bufers. 

我們有經驗豐富,設置非常大的緩衝區對於很多插座降低整體性能(更多的數據包丟失) 但是如何監視這些增加的緩衝區大小的影響? 。尤其是在接收端,我想查看是否有任何端口獲取消息由於缺少緩衝區而被丟棄。

請建議如何可以做到這一點, (WinDBG的用戶或內核模式,特別節目,知曉一些個體經營)

編輯: @EdChum: 我已經使用Wireshark的,並是其痛苦將線路上的數據包與應用程序接收的數據包相關聯。我曾多次看到數據包在線(由Wireshark捕獲),但未被應用程序接收。 那些丟失的數據包通常是一個到一個多播目的地的小數據包,這個數據包在一個大單播數據包之後以非常短的時間間隔發送。單播的接收者失去了多播,但其他人接收它。

我懷疑XP有時會在NDIS或IP層的某處遇到某種緩衝區匱乏,並因此靜默地丟棄數據包。如果有某個櫃檯,我可以證實這一點。

+0

也許來自Windows Performance Toolkit的xperf.exe可能會有所幫助。有一個名爲「NETWORKTRACE」的內核標誌可能很有用。另外,在我的Win7框中,「xperf -providers i」顯示了用於TCP/IP,Winsock和AFD的用戶模式ETW提供程序。 – 2012-04-16 15:12:37

回答

1

不知道如何做到這一點使用WinDbg的,但我會用任何NetMonWireShark監視數據包,看看有沒有被丟棄,這將取決於它是多麼容易繁殖是痛苦的,你需要學習如何過濾數據包,以便顯示器顯示您感興趣的內容,但這兩個應用程序的幫助非常有用。

您必須監聽物理套接字而不是迴環地址才能監控數據包。