CPU speed has stalled while network speed has been growing exponentially. This imbalance of speed improvements makes the host CPU the bottleneck. To alleviate it, many studies in the network field have been conducted to reduce the CPU burden. We cluster the previous works into the following three main categories based on the approaches: (1) to reduce CPU usage by implementing a networking stack on NIC, (2) to eliminate payload copy, and (3) to optimize the networking stack. Each method, however, has its own drawbacks. (1) The hardware-implemented networking stacks leave little room for modification. (2) Many zero-copy methods require application modification. Further, the application must ensure that the application buffer is not modified for a long time. (3) Copy operation still remains regardless of networking stack optimizations.
In this work, we redesign the networking stack to keep the socket buffer in the NIC memory while keeping the socket APIs intact to overcome the mentioned limitations. (1) This work performs the network protocol processing based on the CPU to maintain development flexibility. (2) The application quickly reuses its own buffer, since the socket buffer exists in the NIC memory, unlike the existing zero-copy methods. Further, our work does not require application modification since we keep the socket APIs intact. (3) The NIC DMA module transfers the application buffer to NIC memory without using the host CPU, eliminating CPU-based copy.
Our I/O method reduces CPU usage by up to 70.2% compared to the CPU-based memory copy I/O scheme. The TCP stack implemented on top of our work reduces the application buffer holding time by 1.7x $\sim$ 4.9x depending on the buffer size compared to the user buffer direct I/O scheme.
CPU의 성능은 제자리에 머물러 있지만 네트워크의 성능은 꾸준히 지수적으로 증가하고 있다. 이는 개선되지 않는 CPU 성능으로 앞으로의 고성능 네트워크를 감당해야 함을 의미한다. 네트워크 분야에서는 이를 완화하기 위해 CPU의 부담을 줄이는 연구가 많이 이루어지고 있다. 그 연구를 다음과 같이 크게 세 가지로 분류할 수 있다: (1) 네트워킹 스택을 NIC에 구현하여 CPU 사용량을 줄이는 방법, (2) 사용자 데이터를 별도의 버퍼 공간에 복사하는 과정을 필요없도록 하여 복사에 사용되는 CPU 사용량을 줄이는 방법, (3) 네트워킹 스택을 최적화 하는 방법. 하지만 각 방법은 단점이 존재한다. (1) 하드웨어에 구현된 네트워킹 스택은 개발의 유연성이 감소하는 단점, (2) 복사 제거 기법을 활용하기 위해 응용프로그램을 수정하거나 긴 시간동안 응용 계층의 버퍼를 재사용 할 수 없다는 단점, (3) 네트워킹 스택 최적화 연구라도 많은 경우는 버퍼 복사를 여전히 수행하고 있다는 단점이 있다.
본 연구는 소켓 API를 유지함과 동시에 NIC의 메모리를 소켓 버퍼로서 활용하도록 네트워킹 스택을 재구성 함으로써 앞서 언급한 단점들을 극복하고자 한다. (1) 본 연구는 각종 네트워크 프로토콜 처리를 CPU 기반으로 수행하여 개발의 유연성을 유지하였다. (2) NIC 메모리에 소켓 버퍼가 존재하므로 기존의 무복사 기법과는 다르게 응용프로그램은 자신의 버퍼를 빠르게 재사용 할 수 있다. 또한, 소켓 API를 그대로 유지하기 때문에 응용프로그램 코드의 수정을 필요로 하지 않는다. (3) CPU를 사용하는 것이 아니라 NIC의 DMA 모듈을 사용하여 응용 프로그램의 데이터를 NIC 메모리에 옮김으로써 CPU 기반의 복사를 제거하였다.
본 연구에서 제안하는 I/O 기법은 CPU 기반의 복사 I/O 기법에 비해 CPU 사용량을 최대 70.2% 절감하였다. 본 연구의 I/O 기법 위에서 구현된 TCP 스택은 사용자 공간을 직접 I/O 하는 기법에 비해 응용 버퍼 재사용 대기 시간을 버퍼 사이즈에 따라 1.7배에서 최대 4.9배까지 감소시켰다.