[TCP/IP ] data copy에 관한 질문
글쓴이: icystar / 작성시간: 화, 2004/10/19 - 5:01오후
확인부탁드립니다.
리눅스에서 통신할때
데이터 카피가 언제, 몇번 일어나는지 알아보기 위해서
TCP/IP 커널 소스를 따라 가보았습니다.
제 분석의 결과는 다음과 같습니다.
send 할때는 BSD 계층에서 INET 까지는 사용자 버퍼 포인터를 가지고 있다가
tcp_sendmsg()에서 사용자 버퍼에서 소켓버퍼(커널)로 한번 복사가 일어나고
그 다음 부터는 계속 포인터로 디바이스 드라이버까지 내려가서
최종적으로 패킷을 보내게 되고
receive 할때는 (DMA를 통해 패킷을 받을때...)
DMA로 커널로 복사가 한번 일어나고
그 담에 skb로 또한번 복사가 일어나고
죽~ 올라가다가 skb 데이터 포인터를 참조하여에서 사용자 영역으로 카피가 한번더 일어나고...
제 분석이 맞나요?
사실 receive 쪽이 상당히 의심스러운데....
고수님들의
검수 부탁합니다!!!
^-^*
Forums:
송 수신 모두 2회입니다
송신시
app->커널 소켓계층을 거쳐
msghdr 구조체 타입으로 전송계층(tcp/udp)까지 내려가서
전송계층에서 sk_buff로 변환되면서 app->커널로 1회복사.
ip거쳐서
디바이스드라이버에서 NIC의 버퍼로 복사.
총 2회복사
수신시
NIC 버퍼에서 커널 skbuff로 1회복사 (디바이스드라이버 rx인터럽트 핸들러에서 수행)
프로토콜 스택을 쭉 내려오다가
사용자공간으로 넘어올떄 1회복사
총 2회복사
모든 디지털의 목표는 아날로그.
댓글 달기