2012-04-13 2 views
3

UDP를 기반으로하는 대형 시스템에서 통신을 최적화하려고합니다. 최적화하면 패킷 손실을 최소화 할 수 있습니다. 우리는 각 .EXE 여러 여러 스레드가 (그래, 난 다른 프로토콜을 제안하지 않는, UDP의 본질적인 한계를 알고있다), 그리고 우리는 많은 소켓 매우 큰 버퍼 설정이 저하 될 것을 경험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에 대한 Usermode ETW 공급자를 보여줍니다. –

답변

1

확실하지 않음이 사용 WinDbg를 할 수 있습니다하지만 폐기되고있는, 그것을 재현하는 것이 얼마나 쉬운에 따라 고통스러운 될 경우 패킷을 감시하고보고 NetMon 또는 WireShark 중 하나를 사용하는 것이 당신이 배울 필요가 어떻게 디스플레이에 관심있는 내용이 표시되도록 패킷을 필터링하는 방법은 있지만 두 앱에 대한 도움은 매우 유용합니다.

패킷을 모니터링하려면 루프백 주소가 아닌 실제 소켓을 청취해야합니다.

관련 문제