ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SPDK] What is SPDK? - SPDK 란 무엇인가?
    논문 정리/Vertical optimization 2019. 9. 19. 22:44

    Storage Performance Development Kit (SPDK)는 고성능, 고확장성의 유저 스페이스 애플리케이션을 구현하기 위한 다양한 툴과 라이브러리들을 제공한다. 이러한 기능은 아래와 같은 몇 가지 주요한 기술들을 사용하여 구현되었다.

    • 모든 드라이버를 유저 스페이스 영역에 구현하고 syscall을 회피하여 zero-copy 드라이버를 구현하였다.
    • 이벤트 컴플리션에 대해 인터럽트 방식을 사용하지 않고 polling 방식을 사용하여 전체 latency와 latency 변동성을 낮추었다.
    • 모든 IO path에서 lock을 제거하고 메시지 패싱을 사용하였다.

    따라서 SPDK의 기반은 유저 스페이스 드라이버, polling, 비동기, lockless NVMe driver 라고 할 수 있다. 이를 통해 유저 스페이스 애플리케이션이 data zero-copy, high parallel access, direct access to SSD 기능을 사용할 수 있도록 한다. 드라이버는 C 라이브러리 형태로 제공되며 하나의 header 파일을 통해 사용할 수 있다. SPDK의 NVMe 드라이버 문서를 통해 자세한 내용을 확인할 수 있다.

    또한, OS가 제공하는 블록 스택과 동일한 환경을 제공하는 full block stack을 유저 스페이스 라이브러리로 구현하여 제공한다. 이를 통해 특성이 다른 이기종 저장 장치들을 하나의 동일한 인터페이스로 사용할 수 있게 하였으며, OOM (out of memory)와 IO hang 등의 예외 상황을 쉽게 처리하고 디바이스의 volume 관리를 할 수 있게 하였다. 자세한 내용은 SPDK Block Device user Guide 를 통해 확인할 수 있다.

    NVMe-OF, iSCSI 를 위한 드라이버와 vhost 서버도 제공한다. 리눅스 커널의 NVMe-Of, iSCSI 창시자와 같이 협업하며 vhost를 제공하는 QEMU도 개발한다. 여기서 제공되는 서버나 드라이버는 기존의 구현들보다 훨씬 CPU 효율적으로 동작하도록 구현되었으며, 이 예제들의 코드 분석을 통해서 새로운 SPDK 애플리케이션을 쉽게 구현할 수 있고, SPDK 자체를 이용한 시스템도 쉽게 만들 수 있도록 하였다.

Designed by Tistory.