Dune: Safe User-level Access to Privileged CPU Features


Proceedings of the 10th USENIX Symposium on Operating Systems Design and Implementation, OSDI 2012
Adam Belay, Christos Kozyrakis

개요

Dune은 Hardware-based virtualization을 이용하여서 Machine abstraction이 아니라 Process abstraction을 제공, 프로세스들이 Page table과 같은 Hardware features에 직접 접근할 수 있도록 하여서, Unikernel과 비슷한 일을 기존의 Process와 공존하면서 할 수 있도록 하였다.

Motivation

Application들이 하드웨어 기능들에 직접 접근이 가능하면 성능을 포함한 다양한 이점을 얻을 수 있다.

Importance

커널을 바꾸는 것은 모든 시스템에 영향을 미치며, 굉장히 cost가 많이 드는 일이기 때문에 위의 목적으로는 거의 불가능하다. 유니 커널또한 커널 수정처럼 cost가 많이 들며, process의 최적화를 위해서 unikernel에 의존하는 것은 가성비가 떨어지는 일이다.

Main idea

Process가 VT-d와 같은 하드웨어 기반 가상화 기술을 이용하여서, Machine abstraction에 직접 접근할 수 있도록 하고, 이를 통해서 Process가 hardware features에 직접 접근하도록 하였다. 이는 LKM으로 구현되었으며, 프로세스는 vmcall을 통해서 system call을 날리고 libdune을 통해서 안전하게 hardware features들에 접근할 수 있도록 하였다. 이를 통해서 Application programming패러다임을 그대로 가져와 쉽고 빠른 개발환경을 제공하지만, Machine abstraction에 직접 접근할 수 있도록 하여서, Specialization이 가능하도록 하였다.

Design

Dune- Safe User-level Access to Privileged CPU Features - Figure 1.png

제공하는 Hardware features

Dune은 Exceptions, virtual memory, privilege modes들에 접근할 수 있다.

  • Exceptions: Dune은 하드웨어 기술을 사용함으로서, 시그널방식의 리눅스 커널보다 최대 4배 빠르게 Exception들을 전달 할 수 있다.
  • Virtual memory: EPT를 사용하여서 안전하게 Page table그리고 entry들에 접근 할 수 있도록 하여서, User가 Checkpointing, garbage collection, data-compression paging, distributed shared memory와 같은 곳에 이러한 정보를 사용할 수 있도록 하였다.
  • TLB invalidation: 유저가 원하는 시간에 Batching으로 TLB flush를 할 수 있도록 하였다.
  • Dune은 Ring에 Process가 접근할 수 있도록 하여서, 효과적인 Application-level Sandboxing을 가능하게 하였다.

VM과의 차이점

Dune은 VM과는 다르게 하드웨어에 직접 접근할 수 없는 것을 제외하고는 가상화를 시키지 않는다. System call layer을 그대로 Vmcall을 이용해서 제공하며, 디바이스 드라이버와 같은 것들도 직접 공유한다. VM과는 다르게 Dune은 프로세스 레벨에서 자주 사용되지 않는 레지스터와 같은 경우에는 성능을 위해서 Host를 따라가도록 하였다. 이러한 예시의 일종으로 Model specific register가 있다. 또한 타임 스탬프와 같은 경우에도 Emulate하는 것이 아니라 Host의 것을 그대로 전달하였다.

Libdune

libDune이라는 라이브러리를 통해서 하드웨어 Features들에 쉽게 접근 가능하도록 하였다. libDune은 Dune process management에 필요한 여러 Utility들이랑 hardware features에 접근 가능한 함수들을 포함하고 있다. 또한 Libc를 해킹해서 Libc가 syscall이 아니라 vmcall을 시스템 콜 상황에서 호출하도록 Modification하였다.

Result

Sandboxing

Dune을 사용하면 하드웨어 기법으로 User-defined protection domain을 만들 수 있기 때문에, 효과적인 Sandboxing이 가능하다. 리눅스와 비교하였을 경우 테스트 종류에 따라 거의 차이가 없거나 대략 20%정도의 차이가 났다. 이는 Memory managment가 EPT를 사용하기 때문에 느려지는 것이라 볼 수 있다. 그러나 VM처럼 완전한 VM과 비교하면 최대 4배 정도 빠른 성능을 보였다.

Garbage collection

Garbage collection이 Page table entries들을 직접 참고 할 수 있도록 하여서, dirty bits, fault handling, virtual memory management, TLB control같은 곳에 User의 semantic정보를 활용함으로서 Optimization이 되도록 하였다. 마이크로 벤치마크에서 최대 40% 매크로 벤치마크에서 최대 12.8%의 성능 향상을 보였다.

Contribution

  • 가상화 기술을 사용하여서, 쉽고 빠르고 안전하게 hardware features에 대한 접근이 가능하게 함.
  • 하드웨어 기능들에 직접 접근할 경우의 이득에 대해서 다양한 케이스 스터디와 예시를 통해서 분석함.