UDP로 전송할 경우 NIC 의 bandwidth 보다 높은 전송률이 나올수
글쓴이: ejilim / 작성시간: 월, 2003/09/08 - 3:03오전
multithread 를 이용하여 memory 상에 올려진 data 를 계속해서 UDP 로 전송하면서 시스템의 성능을 측정하는 실험을 하고 있습니다.
스케쥴링이 제대로 되는지, 전송률이 얼마나 나오는지 등을 테스트 하는데요..
thread 를 200~400 개 정도씩 생성하여 최대 전송을 하면 초당 모든 thread 가 전송하는 data 양이 NIC 의 bandwidth 를 초과하는 결과가 나타납니다.
이런것이 가능한가요?
Gigabit NIC 을 사용하고, 패킷을 받는 쪽에 client 는 없고, 단지 같은 서브넷으로 연결된 특정 머쉰으로 UDP 패킷을 보내면서, 보내는 data 양만을 측정합니다.
Gigabit NIC 이니까 최대 성능이 1Gbps 일거라고 생각되는데, 측정결과 전송되는 성능이 1.1~1.2Gbps 정도씩 나올때가 있습니다.
실제로 이런것이 가능한겁니까?
아니면, 제가 프로그램을 잘못한 것인지.... --;;
CPU 의 성능이 아주 좋고, 스케쥴링도 매우 효율적으로 된다고 가정했을때, UDP로 보낸다면 NIC bandwidth 보다 많이 보내질수 있는겁니까?
단, UDP 이기 때문에 data 들이 실제로 전송되는 것인지, 손실되는 것인지는 관여하지 않고 단지 sendto 의 결과값으로 리턴되는 값을 합해서 측정을 했습니다.
고수님들의 많은 조언을 부탁드립니다....
Forums:
G를 1024^3으로 계산했는지 1000^3으로 계산했는지 한번 보시고요
G를 1024^3으로 계산했는지 1000^3으로 계산했는지 한번 보시고요,
UDP라면 loss가 있으니 얼마나 loss가 있는지 감안하셔야 합니다. 물리적
한계를 넘을 수는 없겠지요.
그리고 아무리 해도 아예 기가비트 카드의 최대 전송량(1G)를 못내는
하드웨어도 많습니다. 꽤나 좋은 머신이 되어야만 1G 전송이 가능하니
그 점도 꼭 생각해 보세요.
--
익스펙토 페트로눔
[quote]Gigabit NIC 이니까 최대 성능이 1Gbps 일거라고
불가능하다고 봅니다. 아무리 시스템의 성능이 좋아도, IP header,
ethernet header, CSMA/CD 방식 자체의 overhead 등으로 인해 1Gbps를 낼 수 없다고
봅니다만...
UDP를 썼다고 하시면, 1.1~1.2Gbps의 데이터 중 일부가 실제로는 어느 계층에서인가
drop 되었다고 보시는 게 맞을 거 같습니다.
확인해 보시려면 수신 단에서 잡아 올린 데이터의 양을 카운트 해보세요..
아마 보냈다고 생각하신 양보다 더 적을 것으로 생각됩니다.
[quote="shkwon81"][quote]Gigabit NIC 이니까
* 참고로, UDP레이어의 데이터 손실은 운영체제 수준에서도 발생가능합니다.
(TCP/IP Protocol Stack은 운영체제 내부에 존재함)
소위 NIC로 내려가기 전에 이미 패킷 손실이 발생가능하다는 얘기입니다.
이는 운영체제의 오류가 아니라, UDP스펙 때문에 그러합니다. 지극히 정상이라는
얘기지요.
* 같은 물리 네트워크 세그먼트내에 라우터의 트래픽 분석이나, 스니핑도구로
패킷을 감지해보면 보다 명확해지리라 봅니다.
* 이 문제의 경우, 수신단에서 감지하는 것은 타당하지 않습니다. 수신단
운영체제에서도 더 손실이 발생할 것이기 때문입니다. 비슷한 사양 또는
더 좋은 사양의 수신단이 필요합니다.
* 라우터나 스니핑도구가 탑재된 시스템의 사양은 아주 우수해야합니다.
* 이글의 전제는 소위 송신단 전송 응용프로그램에서 원격지 전송을 위해
동일 컴퓨터의 NIC로 내려보내기 전에도 전에 손실가능하다라는 것을
염두에 둔 작성입니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
NIC의 bandwidth 보다는 CPU와 NIC의 HW Interrup
NIC의 bandwidth 보다는 CPU와 NIC의 HW Interrupt 처리 능력에 영향을 가장 많이 받는것 같습니다.
Kernel Module로 전송 실험을 했을 경우 packet size를 줄이니 전송 bps가 많이 떨어지더군요.
Fast Ethernet에서 kernel module로 전송했을 경우에는 100Mbps를 넘기기 쉬웠는데요.(packet size를 크게하면 되니까... )
Gigabit Ethernet에서는 1Gbps를 못넘네요.
(kernel module에서 loop 돌면서 전송해두요.)
multi-thread로 처리하셨다고 했지만 1Gbps를 넘는것은 좀 이상합니다.
mach 님은 수신단에서 더 많은 부하가 발생할것이라고 했지만
제 생각은 다릅니다. 아마 수신단이 부하가 더 적을것 같습니다.
직접 커널 모듈을 작성하시거나 Packet Filter를 사용하셔서
kernel layer에서 측정하신다면
Giga NIC 하나정도는 충분하다고 생각이 드네요.
저의 환경)
IBM x330(1.4G PIII)
kernel version 2.4.18-14
Intel Gigabit Ethernet NIC
UDP 패킷을 만들어서 전송한 결과 전송결과가 850Mbps 정도 나오네요.
(수신쪽은 측정 안했구요... 중간에 스위치도 거쳐가고 하니 아마 850Mbps는 안나오겠죠)
물론 이것은 전송실패 한것은 제외한 결과입니다.
^^*
[quote="shkwon81"]불가능하다고 봅니다. 아무리 시스템의
CSMA/CD는 full duplex mode에서는 불필요한 것 같네요.
댓글 달기