논문 정리
-
[SPDK] An Overview of SPDK Applications논문 정리/Vertical optimization 2019. 10. 3. 03:58
SPDK는 기본적으로 다른 애플리케이션에서 편하게 사용할 수 있도록 라이브러리와 헤더파일들을 제공하는 개발 키트의 역할을 한다. 라이브러리 외에도 기본적으로 SPDK가 제공하는 애플리케이션이 있는데 일부는 라이브러리를 테스트하기 위해서 사용되며, 많은 경우에는 완전히 제기능을 수행하는 고품질의 애플리케이션이 포함되어 있다. SPDK가 제공하는 애플리케이션들 중 주요 애플리케이션은 다음과 같다. iSCSI Target NVMe over Fabrics Target vhost Target SPDK Target (위의 3가지를 모두 제공하는 앱) 이외에도 여러가지 툴들과 함께 examples 디렉토리에 있는 여러가지 예제도 함께 제공한다. 위의 모든 SPDK target 들은 공통적인 프레임워크를 기반으로 구현..
-
[SPDK] SPDK Structural Overview논문 정리/Vertical optimization 2019. 10. 3. 02:11
Overview SPDK의 코드는 lib 폴더의 C 코드들과 include/spdk 폴더의 공용 인터페이스 헤더파일, 그리고 이를 사용하는 몇 가지의 애플리케이션 집합들로 구성되어 있다. 사용자들은 SPDK의 C 라이브러리만 가져다가 원하는 소프트웨어를 만들 수도 있고, 이미 만들어진 SPDK 애플리케이션들을 사용할 수도 있다. 앞서 설명했듯이 SPDK는 lock을 회피하고 message passing 기법을 이용하는 방식으로 설계되었으며, 이로인해 대부분의 SPDK 라이브러리들은 이를 사용하는 애플리케이션의 기본 스레드 모델에 대해 몇 가지 가정을 한다. 그러나 최대한 특정한 message passing, event, co-routine, light-weight threading framework에 얽..
-
[SPDK] Virtualized I/O with Vhost-user논문 정리/Vertical optimization 2019. 10. 2. 02:10
Introduction 이 챕터는 vhost가 실제로 어떤 작업을 하는지에 대해 설명한다. 여기서 사용된 코드는 설명을 위해 간략화 되어있으며 API나 구현 참고자료로 사용해서는 안된다. virtio 스펙을 보면 다음과 같은 문구가 잇다. virtio와 virtio 스펙은 가상화 환경에서 guest 가 가상 장치에 대해 직관적, 효율적, 표준적이고 확장 가능한 기능을 갖게 함을 목적으로 한다. Virtio 장치는 virtqueue를 사용하여 데이터를 효율적으로 전송한다. virtqueue는 single-producer, single-consumer, ring strucuture의 3가지 요소로 구성되어 있으며 일반적인 scatter-gather I/O를 처리한다. QEMU 가상화 환경에서 일반적으로 사용..
-
[SPDK] SPDK 포팅 가이드논문 정리/Vertical optimization 2019. 10. 1. 05:15
SPDK의 env 라이브러리를 구현하는 것을 통해서 쉽게 다른곳으로 포팅할 수 있다. env 인터페이스는 드라이버가 아래와 같은 작업을 수행할 수 있도록 API를 제공한다. 물리적으로 연속적이면서 pinned 메모리를 할당 Cycle을 설정하거나 BAR를 mapping 하는 등의 PCI 작업을 수행 메모리 풀을 관리하고 virtual to physical address 변환을 수행 env가 제공하는 API들은 include/spdk/env.h 에 정의되어 있다. SPDK는 기본적으로 DPDK를 기반으로 한 env를 제공한다. 해당 구현은 lib/env_dpdk에서 확인할 수 있다. DPDK는 현재 Linux와 FreeBSD만을 지원하고 있으므로, 다른 운영체제에서 사용하고 싶거나 DPDK외의 다른 유저스..
-
[SPDK] Submitting I/O to an NVMe Device논문 정리/Vertical optimization 2019. 10. 1. 02:00
The NVMe Specification NVMe 스펙은 실제 저장장치와 연결하고 통신하기 위한 하드웨어 인터페이스를 정의한다. 스펙에서는 PCIe를 통해 연결하는 장치를 위한 레지스터 정의 뿐만 아니라 네트워크를 통해 연결되는 원격 장치에 데이터 전송을 위한 스펙 또한 정의하고 있다. 이번 챕터에서는 SPDK를 통해 PCIe 장치로 IO를 전달하는 방법을 알아본다. NVMe submission queue & completion queue NVMe 장치느 SPDK NVMe driver 등과 같은 다양한 호스트 소프트웨어에서 호스트 메모리에 여러개의 큐를 할당하는 것을 허용하고 있다. 여기서 말하는 호스트란 NVMe 장치가 연결되어 있는 시스템을 의미한다. 각각의 큐는 두개의 큐로 구성되어 있다. 하나는 ..
-
[SPDK] Nand Flash SSD Internals논문 정리/Vertical optimization 2019. 9. 30. 12:13
Solid State Devices (SSD) SSD는 복잡한 알고리즘에 의해 관리되는 저장장치로 사용 방식에 따라 성능이 천차만별이다. 본 글에서 다루는 내용은 소프트웨어 개발자들이 SSD 내부 동작을 쉽게 이해하고 더 나은 소프트웨어 설계를 할 수 있도록 돕기 위해 작성되었다. 내용들은 간소화 된 것으로 실제 SSD 하드웨어 내부에서 일어나는 일과 동일하다고 가정해서는 절대 안된다. 이 글이 작성되는 시점을 기준으로 SSD 는 보통 NAND Flash 메모리로 구성된다. Nand 메모리는 아래와 같은 몇가지 중요한 특징이 있다. Nand 메모리는 그룹화 되어 NAND die라고 불리는 칩을 구성하며, 각 칩들은 병렬적으로 동작할 수 있다. Nand 메모리에 저장되는 bit를 flip 하는 작업은 비대..
-
[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 라고 할 수 있다. 이를 ..
-
[SPDK] Message Passing and Concurrency Theory논문 정리/Vertical optimization 2019. 9. 18. 03:24
SPDK의 주요 목적중 하나는 하드웨어가 추가됨에 따른 linear scalability를 보장하는 것이다. 예를 들어 사용하는 SSD의 갯수가 1개에서 2개로 변할 경우 IOPS가 2배로 증가하고, CPU 코어의 갯수가 2배가 될 경우 연산 능력도 2배가 되고, NIC가 2배가 될 경우 네트워크 대역폭이 2배가 되는 등을 의미한다. 이러한 기능을 제공하기 위해서는 소프트웨어 내의 쓰레드(혹은 프로세스)가 최대한 서로 영향을 주지 않도록 설계되어야 한다. 일반적으로 소프트웨어 lock이나 atomic instruction까지 없는 경우를 말한다. lock 접근제어 전통적으로 쓰레드간의 데이터 공유가 필요할 때에는 공유할 데이터를 힙에 저장하고 lock을 이용해서 접근 제어를 수행하도록 구현한다. 이러한 ..