• 카테고리

    질문 & 답변
  • 세부 분야

    기타 (개발 · 프로그래밍)

  • 해결 여부

    해결됨

DMA와 고성능 소켓관련 질문입니다.

24.03.11 04:09 작성 조회수 107

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

안녕하세요 강의를 보다 IOCP를 사용할 경우 사용자의 메모리에 바로 copy되는 부분을 보고 몇가지 글을 읽은뒤
궁금한점이 생겨 질문드리게 되었습니다.

 

먼저 IOCP를 사용할 때
SO_RCVBUF의 사이즈를 0으로 한 후에
WSARecv()함수를 사용하여 사용자 메모리를 재공했을 떄
혼잡제어가 어떻게 동작하는 지 궁금합니다.
혼잡제어가 사용자가 제공한 메모리 크기기 준으로 동작허게 되나요?



답변 3

·

답변을 작성해보세요.

0

그런 문제를 해결하기 위해 질문이 필요한 것이지요. 열공모드 응원합니다. 😄

0

혼잡제어는 TCP 수준에서 논하는 것들입니다. 소켓 수준에서는 그런 혼잡 상황이 해결되어 데이터 송/수신이 완료된 후에 대해 논합니다. 그리고 IOCP에서 성능을 보다 극대화 할 목적으로 수신 버퍼가 64KB가 있다해도 메모리 길이를 0으로 잡아주는 이유는 IOCP가 내부적으로 수신버퍼 전체에 대해 Lock걸도록 하기 때문입니다. 사실 동적 할당 메모리의 주소가 겹칠 일은 없기 때문에 굳이 그럴 필요가 없습니다. 그래서 많은 개발자들이 수신버퍼 전체에 대해 Lock 걸리는 비효율을 막고자 편법을 사용합니다. 더불어 함께 알아두시면 좋겠습니다. 😄

이승언님의 프로필

이승언

질문자

2024.03.12

아... 제가 잘못 이해했던것 같습니다.
SO_RCVBUF를 0으로 하였을 떄
수신 버퍼가 0으로 변경되고
WSARecv()함수를 통해 사용자가 제공한 메모리를 바탕으로 혼잡제어가 동작하는 것으로 생각했습니다..

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.11

안녕하세요, 인프런 AI 인턴입니다.

이승언 님의 질문은 IOCP(Socket I/O Completion Ports)와 관련하여 SO_RCVBUF의 사이즈를 0으로 설정했을 경우 혼잡제어(congestion control)가 어떻게 동작하는지에 대한 것입니다.

기존에 비슷한 주제로 [Socket I/O 질문이 있습니다.](https://www.inflearn.com/questions/997934) 해당 URL에서 IOCP에 대한 설명을 다룬 강의의 내용에 관해 질문하신 사례가 있으나, 특정 SO_RCVBUF 설정에 대한 혼잡제어의 동작을 설명하는 내용은 포함되지 않습니다.

혼잡제어는 네트워크의 현재 상태에 따라 데이터의 전송 속도를 조절하는 알고리즘이며, SO_RCVBUF는 소켓 수신 버퍼 크기를 설정하는 소켓 옵션입니다. IOCP와 관련하여 소켓 옵션을 0으로 설정했을 때의 혼잡 제어 메커니즘에 대한 구체적인 내용은 API 문서나 네트워크 프로그래밍에 관한 자세한 전문 문헌을 참조하는 것이 좋습니다.

이에 따른 구체적인 답변이나 문서를 제공하지는 않으므로, 해당 주제에 대해 더 자세한 정보가 필요하시다면 네트워크 프로토콜이나 Window Sockets API에 대한 공식 문서를 참조하시거나, 해당 강좌의 해당 부분에 대한 더 상세한 질문을 남기시는 것을 추천드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.