문제

페이로드가 1470 미만인 UDP 패킷의 경우 1Gbit 처리량을 달성할 수 있습니까?작은 패킷 크기로 인해 이러한 처리량(I/O, OS, 네트워크 등)을 달성하는 데 약간의 병목 현상이 발생합니다.드라이버와 하드웨어를 작은 패킷/높은 처리량에 맞게 조정해야 할 수도 있다고 생각합니다.작은 UDP 패킷으로 1Gbit 처리량을 성공적으로 달성하려고 시도한 사람이 있습니까?

도움이 되었습니까?

해결책

나는 이전에 상대적으로 표준적인 PC 하드웨어에서 기가비트 링크의 처리량에 대해 몇 가지 실험을 해본 적이 있습니다. tcppreplay), udp가 아닌.

내가 발견한 가장 큰 병목 현상은 NIC 자체로 패킷을 가져오는 것이었습니다.이는 고속 버스를 사용하여 NIC에 인터페이스하면 크게 향상될 수 있습니다(예:4x pci-express NIC).그러나 이것에도 불구하고 매우 명확한 패킷/초 제한이 있었습니다.분명히 패킷 크기를 늘리면 프로세서 부하를 줄이면서 더 많은 대역폭을 활용할 수 있습니다.

님의 댓글과 같은 맥락으로 스티브 모이어, 모든 네트워크 활용에는 이론적 한계가 있습니다.내 실험(완전히 조용한 네트워크에서 수행됨)에서 최대 약 900Mb/s를 확인했습니다.CPU 부하가 30~40%인 경우였습니다.

시스템 하드웨어(예:PC) 네트워크 인프라보다 더 나은 가치를 지닌 모든 네트워크 스위치는 작은 패킷으로 최고 속도의 네트워크 액세스를 유지할 수 있어야 합니다. 확실히 대부분의 PC가 처리할 수 있는 것보다 훨씬 빠른 속도입니다.

다른 팁

어떤 유형의 네트워크 연결을 사용하고 있나요?1000BaseTx/Fx 링크를 사용하는 경우 최대 크기의 패킷으로 처리량의 80% 이상을 기대하지 마십시오.패킷 크기가 줄어들면 간격, 동기화, 이더넷 헤더, IP 헤더 및 UDP 헤더에 대한 오버헤드가 페이로드와 관련하여 증가하므로 최대 처리량이 더욱 저하됩니다.

사용 중인 스위치에 대한 설명서를 확인하세요.스위치는 전달할 수 있는 초당 패킷 수(pps)가 제한되어 있으며 최대 페이로드 크기보다 훨씬 작은 패킷을 보내는 경우 1GBps를 유지하지 못하는 경우가 많습니다.

확인해야 할 또 다른 사항은 네트워크 카드가 인터럽트 병합을 수행하고 있는지 여부와 지원할 수 있는 최대 보내기/받기 설명자 수입니다.해당 수준의 처리량에서는 인터럽트 서비스 시간과 컨텍스트 전환 시간이 최신 CPU 및 메모리 시스템을 사용하더라도 호스트 시스템에 큰 오버헤드가 될 수 있습니다.

또한 구리를 통해 기가비트를 사용하는 경우 카드가 방출하는 가장 작은 이더넷 프레임은 512바이트이므로 더 작은 메시지가 해당 크기로 채워집니다.이는 캐리어 감지/충돌 감지에 대한 요구 사항 때문입니다.

하드웨어의 초당 패킷 제한이 네트워크의 이론적 용량보다 훨씬 낮다는 것을 발견했습니다.Broadcomm BCM5704S의 경우 기가비트의 1,488,100pps에 비해 69,000pps를 기록했습니다.

여기에 보고한 몇 가지 숫자가 더 있습니다. http://code.google.com/p/openpgm/

여기에 진정한 기가비트 속도를 달성하기 위해 네트워크 설정(Linux에서)을 조정하는 방법에 대한 좋은 튜토리얼이 있습니다. http://datatag.web.cern.ch/datatag/howto/tcp.html

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top