Making Kernel Bypass Practical for the Cloud with Junction - NSDI'24
Latency나 Bandwidth나 커널에서 성능을 많이 잡아먹다 보니 userspace에 올려서 kernel bypass하는 시스템들이 잔뜩 나오고 있다. 그런데 userspace에 올리면 결국 kernel입장에서는 안 보이다 보니까 kernel은 최선의 선택을 할 수 없을 것이다.
그래서 이걸 좀 Practical하게 만드려는 것이 이 논문의 목표이다.
이 논문에서 제시한 userspace abstraction의 문제점은:
- 리소스를 커널로부터 미리 선점하기 때문에 쓰지도 않을 거 선점해놓고 다른 프로세스가 그 리소스를 못 쓰게 한다.
- 라이브러리 싹 다 새로 include하면서 포팅해야 한다.

그리고 이 논문은 이렇게 이 두가지 이슈를 해결했다고 한다.


이 그림에서 나오듯 per core queue를 하나의 큐로 통일시켰고, 하나의 버퍼에 여러 개의 패킷을 넣었다. 최신 NIC의 하드웨어 서포트로 가능해진 것이라 한다.
그리고 저 per core reference counter로 synchronization overhead를 줄였다고 하는데 난 여기는 잘 이해가 안 됐다. (ctrl + F 로 counter 찾아봐도 몇개 안 나옴..)
또한 Scalable한 Queue polling을 위해 최신 NIC의 기능을 활용했다.

여러 개의 인스턴스를 모두 polling하는 것이 아니라, 하나의 notification queue만을 polling한다.