26장. TCP_NODELAY를 사용하여 네트워크 대기 시간 개선
기본적으로 TCP 는 Nagle의 알고리즘을 사용하여 작은 발신 패킷을 수집하여 모두 한 번에 보냅니다. 이로 인해 대기 시간이 증가할 수 있습니다.
사전 요구 사항
- 관리자 권한이 있어야 합니다.
26.1. TCP_NODELAY 사용의 영향 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
전송되는 모든 패킷에 대해 대기 시간이 짧은 애플리케이션은 TCP_NODELAY 옵션이 활성화된 소켓에서 실행되어야 합니다. 이렇게 하면 이벤트가 발생하는 즉시 커널에 버퍼 쓰기를 보냅니다.
- 참고
-
TCP_NODELAY가 효과적이려면 애플리케이션은 작고 논리적으로 관련된 버퍼 쓰기를 피해야 합니다. 그렇지 않으면 이러한 작은 쓰기로 인해TCP가 이러한 여러 버퍼를 개별 패킷으로 보내 전체 성능이 저하됩니다.
애플리케이션에 논리적으로 관련된 여러 버퍼가 있고 하나의 패킷으로 전송되어야 하는 경우 다음 해결 방법 중 하나를 적용하여 성능이 저하되지 않도록 합니다.
-
메모리에 연속된 패킷을 빌드한 다음
로 구성된 소켓의 논리 패킷을 TCP로 전송합니다.TCP_NODELAY -
I/O 벡터를 만들고
TCP_NODELAY로 구성된 소켓에서writev명령을 사용하여 커널에 전달합니다. -
TCP_CORK옵션을 사용합니다.TCP_CORK는TCP가 패킷을 전송하기 전에 애플리케이션이 코스크를 제거할 때까지 대기하도록 지시합니다. 이 명령을 실행하면 수신하는 버퍼가 기존 버퍼에 추가됩니다. 이렇게 하면 애플리케이션이 커널 공간에 패킷을 빌드할 수 있으므로 계층에 추상화를 제공하는 다른 라이브러리를 사용할 때 필요할 수 있습니다.
애플리케이션의 다양한 구성 요소에 의해 논리 패킷이 커널에 빌드된 경우 소켓을 분리하여 TCP 가 즉시 누적된 논리 패킷을 보낼 수 있어야 합니다.