11.3.2. 루프백 인터페이스에 대한 성능 영향
소켓 옵션을 활성화하려면 gcc tcp_nodelay_client.c -o tcp_nodelay_client -lrt 를 사용하여 빌드한 다음 적절한 옵션을 설정합니다.
다음 예제에서는 루프백 인터페이스를 사용하여 다음 세 가지 변형을 보여줍니다.
버퍼 쓰기를 즉시 보내려면
TCP_NODELAY로 구성된 소켓에서no_delay옵션을 설정합니다.$ ./tcp_nodelay_client localhost --port=5001 --nr_logical_packets=10000 --no_delay --verbose 10000 packets (100 buffers) sent in 4079.655518 ms: 490.237457 bytes/ms using TCP_NODELAYTCP는 버퍼를 즉시 전송하여 작은 패킷을 결합하는 알고리즘을 비활성화합니다. 이렇게 하면 성능이 향상되지만 각 논리 패킷에 대해 작은 패킷의 변동이 발생할 수 있습니다.
여러 데이터 패킷을 수집하여 하나의 시스템 호출로 보내려면
TCP_CORK소켓 옵션을 구성합니다.$ /tcp_nodelay_client localhost --port=5001 --nr_logical_packets=10000 --cork --verbose 10000 packets (100 buffers) sent in 669.514221 ms: 2987.240479 bytes/ms using TCP_CORK코크 기술을 사용하면 버퍼에서 전체 논리 패킷을 결합하고 전체 네트워크 패킷을 덜 보낼 때 데이터 패킷을 보내는 데 필요한 시간이 크게 줄어듭니다. 적절한 시간에
코르크를 제거해야 합니다.프로그램을 개발할 때 파일에서 대량 데이터를 보내야하는 경우
sendfile()옵션과 함께TCP_CORK를 사용하는 것이 좋습니다.소켓 옵션을 사용하지 않고 성능을 측정하려면 다음을 수행합니다.
$ ./tcp_nodelay_client localhost --port=5001 --nr_logical_packets=10000 --verbose 10000 packets (100 buffers) sent in 410403.718750 ms: 4.873250 bytes/ms이는 TCP가 버퍼 쓰기를 결합하고 네트워크 패킷에 최적으로 들어갈 수 있는 것보다 더 많은 데이터를 확인하기 위해 대기할 때의 기준 척도입니다.
자세한 내용은 시스템의 sendfile(2) 매뉴얼 페이지를 참조하십시오.