HP-UX 11i v3의 ndd 설정에 다음과 같은 내용이 있다.
socket_enable_ca:
When set to 1, enables the socket copy avoidance optimization for
send system calls. When set to 0, copy avoidance is disabled.
This feature can improve the performance of applications that send
large data buffers over a socket. Copy avoidance is supported only
on Integrity systems. The value returned for this tunable will
indicate whether copy avoidance is supported and in use.
[0-1] Default: 0
이 값을 1 로 설정하면 send(2) system call 에 대한 copy avoidance 최적화를 통해 성능향상이 가능하다는 설명이다.
여기서 copy avoidance 가 무엇을 이야기 하는지 개념적으로 살펴 보자.
위 그림은 서버에서 동작 중인 네트워크 애플리케이션이 disk 에서 데이터를 읽어 네트워크 카드를 통해 송신하는 과정 중 데이터 흐름을 간단히 표시한 것이다.
file cache, 애플리케이션 버퍼(위 그림에서 Server buffer), 소켓 버퍼(Socket buffer)를 통해 NIC 로 전달되는 여러 번의 copy 는 메모리 및 I/O bandwidth를 사용함은 물론, copy 시의 checksum 비교 등 시스템 자원을 사용하게 된다. 두 말할 필요도 없이 copy 횟수가 줄어든다면 (copy avoidance 최적화를 통해) 성능향상이 가능할 것이다.
socke_enable_ca 를 1로 설정하는 경우 애플리케이션의 변경 없이 VM(Virtual Memory) subsystem 의 도움으로 User space 에서 Kernel space 로의 copy (위 그림에서 copy #3) 를 피할 수 있게 된다. send(2) 시스템 콜 호출 시에 이런 동작이 일어나게되므로 outbound 데이터가 소켓(socket) 을 통해 나갈 때 성능 향상이 있을 것이다.
아~
돌깨지는 소리. ^^
^_^ 불편을 드려 죄송합니다.
다른 유닉스나 리눅스는 이 내용도 참고가 될 듯하네요.
http://www.ibm.com/developerworks/library/j-zerocopy/
내용 중에 traditional approach 와 zero copy 간의 성능 분석한 표가 눈에 들어옵니다. 참고로 해서 업데이트 해보겠습니다. 주옥같은 정보 감사합니다. ^^