2016-12-10 1 views
0

UDP 데이터 패킷을 1 ... N 개의 주소 (종종 멀티 캐스트)로 보내는 기존 응용 프로그램에서 인프라의 일부를 재 작업합니다. 현재 T 송신기 개체가 있다고 가정하고, 어떤 경우에는 모든 송신기가 동일한 주소로 전송하고 있습니다.동일한 주소로 UDP 패킷을 전송할 때의 효율성

예제를 간단하게 제공하고 예를 들어 3 개의 송신기 개체가 있고 하나의 특정 주소로 보낼 필요가 있다고 가정 해 보겠습니다. 내 질문은 ... 어느 쪽이 더 효율적입니까? :

옵션 1) 단일 소켓 주위에 뮤텍스를 넣고 모든 송신기 (T)가 동일한 소켓을 공유하도록하십시오.

T----\ 
T----->Socket 
T----/ 

옵션 2) 3 개의 별도 소켓을 사용하십시오. 모두 동일한 위치로 전송하십시오.

T----->Socket 1 
T----->Socket 2 
T----->Socket 3 

나는, 옵션 2는 아마 옵션 1과는 다른 훨씬 아닌 큰 그림에, 그래서 두 번째 옵션으로, 후드, OS 나 NIC가 최종 전송 주위에 뮤텍스를두고 있다고 생각한다.

내 개발 PC에서 다음 주에 실험을 설정 하겠지만 사용자가 설치할 수있는 모든 잠재적 인 컴퓨터 구성을 테스트 할 수있는 방법은 없습니다. 또한 다른 구현 - Windows vs Linux, 다른 NIC 칩셋 제조업체 등이 있음을 알고 있습니다.하지만 누군가가 과거의 경험이나 아키텍처 지식을 가지고있어 다른 옵션보다 한 가지 옵션을 활용할 수 있는지 궁금합니다.

감사합니다.

+1

UDP는 연결이없고 UDP 데이터 그램은 자체 포함 네트워크 패킷입니다. 단일 소켓에 대한 액세스를 수동으로 직렬화해도 아무런 이점이 없습니다. 네트워킹 스택은 실제로 전송 중에 직렬화를 처리합니다. 나는 각 송신기가 자체 소켓을 사용하도록하고 그들로 하여금 폭발 시키도록 할 것이다. –

답변

0

Windows 10 컴퓨터에서 일부 벤치 마크를 실행 한 후 적어도 예상되는 대략적인 아이디어를 제공하는 "대답"이 있습니다. 나는 모든 시스템이 똑같은 방식으로 작동 할 것이라고 100 % 확신 할 수는 없지만, 실행하는 서버의 대부분은 Intel NIC와 Windows 10을 사용하며, 일반적인 패킷 크기는 약 1200 바이트입니다. 따라서 대답은 적어도 저를 편안하게 만듭니다. 그것은 내 특정 시나리오에 맞습니다. 다른 사람들이 실험을 사용할 수 있도록 도움을 줄 수 있도록 여기에 결과를 게시하기로 결정했습니다.

전적으로 뮤텍스가있는 단일 소켓을 사용하여 T 송신기 스레드를 생성하는 간단한 명령 줄 앱을 작성합니다. 그 직후에는 동일한 수의 송신기로 다른 테스트를 실행하지만 이번에는 각 송신기에 자체 소켓이 있으므로 어떤 뮤텍스도 필요하지 않았습니다. (일부 낮은 레벨에서는 잠금 메커니즘이 있음에도 불구하고). 각 송신기는 가능한 한 빨리 패킷을 송출합니다. 1,200 바이트 각각에서

  • 2,700,000 패킷 :

    이것은 I가 사용되는 테스트 셋업이다.

  • 릴리스 모드, 64 비트.
  • i7-3930K CPU, Intel 기가비트 CT PCIE 어댑터. SharedSocket = 28.2650 초 : 1 소켓 = 28.2073 초

그리고 여기 결과

  • 1 송신기입니다.
  • 3 송신기 : SharedSocket = 28.4485 초 : MultipleSockets = 27.5190 초.
  • 6 송신기 : SharedSocket = 28.7414 초 : MultipleSockets = 27.3485 초.
  • 12 송신기 : SharedSocket = 27.9463 초 : 다중 소켓 = 27.3479 초.

예상 한대로 하나의 스레드 만 사용한 테스트는 거의 동일한 시간을 가졌습니다. 그러나 3, 6 및 12 트랜스미터가있는 경우 소켓을 공유하는 대신 스레드 당 하나의 소켓을 사용하면 성능이 약 3 % 향상됩니다. 엄청난 차이는 아니지만, 시스템에서 모든 지난 온스를 짜내는 것이 유용한 통계 일 수 있습니다. 내 특정 응용 프로그램은 엄청난 양의 비디오를 전송하는 것입니다.

서버 상태의 TaskManager의 네트워크 페이지 스크린 샷은 다음과 같습니다. 두 번째 다중 소켓 테스트로의 전환과 동시에 테스트의 절반 정도의 처리량 증가를 볼 수 있습니다. 클라이언트 컴퓨터의 screencap도 포함 시켰습니다 (Windows 7 상자였습니다).

Screenshot

관련 문제