USENIX ATC 2019 Mohammad Hedayati, Spyridoula Gravani, Ethan Johnson, John Criswell, and Michael L. Scott, University of Rochester; Kai Shen and Mike Marty, Google
개요
Hodor는 Library가 사용하는 Address space를 Intel MPK로 분리하여 Shared resource에 빠르면서도 안전하게 접근할 수 있는 Protection domain을 Data-plane을 담당하는 User-level의 library로 구현하였다. 즉, 기존 커널이 보장하던 Protection을 User space library로 옮겼다.
Motivation
고성능 데이터 플레인(data plane) 라이브러리들은 애플리케이션 내부에서 직접 패킷 처리나 I/O 연산 등을 수행함으로써, 커널을 우회(bypass)하여 높은 처리량(Throughput)과 낮은 지연(Latency)을 달성하려고 하지만, 동시에 라이브러리를 공유함으로써, 라이브러리 버그나 악의적 코드가 전체 프로세스 메모리를 훼손할 위험이 있고, 어플리케이션 역시 라이브러리에 침범할 수 있는 보안 문제가 생긴다.
Design
- Threat Model
- Untrusted application은 protected library를 통해서 protected resource에 접근한다. Library에서 Application은 접근할 수 있지만, Application에서 Library는 Trampoline코드만 가능하다.
Hodor는 이를 가능하게 하기 위해서 Intel PKS를 통해서 Application과 Library가 사용하는 Memory를 분리하였다. 이를 통해서 명시적인 경계에서 라이브러리 함수가 사용하는 영역과 User-level application이 사용하는 영역을 분리하여 안전한 접근이 가능하도록 하였다.
Conclusion
라이브러리를 통한 안전한 접근은 흥미로우나, 특정 하드웨어에 의존한다는 문제가 있으며, 콜백 함수 혹은 비동기 함수가 자주 사용될 경우 경계를 확실히 나누기 힘들다는 문제가 발생하며, 서로 다른 여러 데이터 플레인 라이브러리(예: DPDK + SPDK + GPU) 각각을 별도 도메인으로 구분하려면, 구현 난이도가 높아지고 MPK 키 부족이 생길 수 있다. 또한 Library의 버그를 막지는 못한다는 점에서 검증된 커널 코드를 User-level의 임의의 Library를 신뢰해야만 하는 Trusted model로 만드는 점이 한계로 지적될 수 있다.