SPDK 소개
참고: https://www.intel.com/
기본적으로 참고 사이트 원문을 번역하였으나, 이해도를 높이기 위해 이미지는 일부 적합한 것으로 교체 하였습니다.
SPDK 소개
솔리드 스테이트 스토리지 미디어가 데이터 센터를 장악하는 과정에 있습니다. 현재 세대 플래시 스토리지는 회전식 미디어에 비해 성능, 전력 소비 및 랙 밀도 면에서 상당한 이점을 누리고 있습니다. 이러한 이점은 차세대 미디어가 시장에 진입함에 따라 계속해서 증가할 것입니다.
인텔® SSD DC P3700 시리즈 NVMe(Non-Volatile Memory Express) 드라이버와 같은 현재 솔리드 스테이트 장치를 사용하는 사용자는 다음과 같은 주요 문제에 직면해 있습니다. 처리량 및 대기 시간 성능이 회전 디스크보다 훨씬 우수하기 때문에 스토리지 소프트웨어가 전체 처리 시간의 많은 부분을 차지합니다. 즉, 스토리지 소프트웨어 스택의 성능과 효율성은 전체 스토리지 시스템에서 점점 더 중요해지고 있습니다. 저장 장치가 계속 진화함에 따라 사용 중인 소프트웨어 아키텍처를 훨씬 초과할 위험에 직면하게 됩니다(즉, 관련 소프트웨어의 부족으로 인해 저장 장치가 제대로 성능을 낼 수 없게 됨). 앞으로 몇 년 동안 저장 장치는 계속해서 놀라운 수준으로 발전할 것입니다.
스토리지 OEM 및 ISV가 이 하드웨어를 통합할 수 있도록 인텔은 SPDK(Storage Performance Development Kit)라고 하는 일련의 드라이버와 완전한 종단간 참조 스토리지 아키텍처를 만들었습니다. SPDK의 목표는 인텔의 네트워킹, 프로세싱 및 스토리지 기술을 동시에 활용해 효율성과 성능을 획기적으로 향상시키는 것이다. SPDK는 하드웨어에 맞춤화된 소프트웨어를 실행하고 다중 코어와 여러 NVMe 스토리지(추가 오프로드 하드웨어 없이)를 사용하여 초당 수백만 개의 I/O 읽기를 쉽게 달성하는 것으로 입증되었습니다. Intel은 BSD 라이선스를 사용하여 Linux 아키텍처 기반의 모든 소스 코드를 Github를 통해 제공합니다. 블로그, 메일링 리스트 및 기타 문서는 spdk.io에서 찾을 수 있습니다.
Software Architectural Overview
SPDK는 어떻게 동작할까? 극한의 성능을 달성하기 위해 사용자 모드 실행과 폴링 모드의 두 가지 핵심 기술이 사용됩니다 . 이 두가지 소프트웨어 엔지니어링 용어를 자세히 살펴보겠습니다.
첫째, 장치 드라이버 코드는 유저 영역에서 실행됩니다 . 즉, (정의상) 드라이버 코드는 커널 영역에서 실행되지 않습니다. 커널 컨텍스트 전환 및 인터럽트를 피하면 많은 처리 오버헤드가 절약되어 실제 데이터 저장에 더 많은 클록 주기를 사용할 수 있습니다. 스토리지 알고리즘(중복 제거, 암호화, 압축, 일반 블록 스토리지)복잡성에 관계없이 낭비되는 클록 주기가 적다는 것은 항상 성능과 대기 시간이 향상됨을 의미합니다. 이것은 커널이 불필요한 오버헤드를 추가한다는 것이 아니라 커널이 기존의 전용 스토리지 스택에는 적용할 수 없는 새로운 범용 컴퓨팅 사용 사례를 위해 관련된 오버헤드를 추가한다는 의미입니다. SPDK의 지침 원칙은 모든 추가 소프트웨어 오버헤드를 제거하여 최소 대기 시간과 최고의 효율성을 제공하는 것입니다 .
둘째, 폴링 모드 드라이버(Polled Mode Drivers, PMDs)는 I/O의 기본 모델을 변경합니다 . 전통적인 I/O 모델에서 애플리케이션은 읽기 또는 쓰기 요청을 제출한 후 Sleep 모드로 전환되고 I/O가 완료되면 인터럽트가 애플리케이션을 깨웁니다. PMD의 작동 방식은 애플리케이션이 읽기 및 쓰기 요청을 제출한 후 계속해서 다른 작업을 수행하고 I/O가 완료되었는지 여부를 일정 간격으로 다시 확인합니다. 이 접근 방식은 인터럽트로 인한 지연 및 오버헤드를 방지하고 애플리케이션이 I/O 효율성을 개선할 수 있도록 합니다. 회전 장치(테이프 및 기계식 하드 디스크) 시대에 인터럽트 오버헤드는 전체 I/O 시간의 작은 비율에 불과했습니다. 그러나 솔리드 스테이트 장치 시대에는 대기 시간이 더 짧은 영구 장치가 계속 도입됨에 따라 인터럽트 오버헤드는 전체 I/O 시간에서 무시할 수 없는 부분이 되었습니다. 이 문제는 대기 시간이 짧은 미디어에서만 더욱 두드러집니다. 시스템은 이미 초당 수백만 개의 I/O를 처리할 수 있습니다. 따라서 수백만 개의 트랜잭션 오버헤드를 제거하여 여러 코어가 절약되는 결과가 빠르게 나타납니다. 패킷과 블록이 즉시 발송되고 대기 시간이 최소화되어 지연 시간이 단축되고 일관된 지연 수준을 보이며 (지터 감소) 처리량이 향상됩니다.
SPDK는 사용자 수준 및 폴 모드 작업의 공통 요소를 서로 연결하고 공유하는 수많은 하위 구성 요소로 구성됩니다. 이러한 각 구성 요소는 종단간 SPDK 아키텍처를 만드는 동안 발생하는 특정 성능 병목 현상을 극복하기 위해 만들어졌습니다. 이러한 구성 요소 중 일부는 비 SPDK 아키텍처에도 통합될 수 있으므로 사용자는 SPDK에서 사용되는 경험과 기술을 활용하여 자신의 소프트웨어를 가속화할 수 있습니다.
1. 아래에서 시작하여 위로 쌓기
Hardware Drivers
-
NVMe 드라이버: SPDK의 기본 구성 요소인 이 고도로 최적화된 잠금 없는 드라이버는 비교할 수 없는 확장성, 효율성 및 성능을 제공합니다 .
-
인텔® QuickData 기술: 인텔® I/O 가속 기술(인텔® I/OAT)이라고도 하는 인텔® 제온® 프로세서 기반 플랫폼에 내장된 오프로드 복사 엔진입니다. 사용자 공간 액세스를 제공함으로써 DMA 데이터 이동에 대한 임계값이 줄어들어 작은 크기의 I/O 또는 NTB(Non-Transparent Bridge)에 대한 활용도가 높아집니다.
Back-End Block Devices
-
NVMe over Fabrics(NVMe-oF) initiator : 프로그래머의 관점에서 로컬 SPDK NVMe 드라이버와 NVMe-oF 이니시에이터는 공통 API 명령 세트를 공유합니다. 이는 로컬/원격 복제를 구현하기가 매우 쉽다는 것을 의미합니다.
-
Ceph* RBD(RBD) : Ceph를 SPDK의 백엔드 장치로 활성화합니다. 예를 들어 Ceph를 다른 스토리지 계층으로 사용할 수 있습니다.
-
Blobstore 블록 장치 : SPDK Blobstore에 의해 할당된 블록 장치로 VM 또는 데이터베이스가 상호 작용할 수 있는 가상 장치입니다. 이러한 장치는 SPDK 인프라의 이점을 누리며 잠금이 없고 놀랍도록 확장 가능한 성능을 의미합니다.
-
Linux* AIO(비동기 I/O) : SPDK가 HDD와 같은 커널 장치와 상호 작용할 수 있도록 합니다.
Storage Services
-
블록 장치 추상화 계층(bdev) : 이 일반적인 블록 장치 추상화는 다양한 장치 드라이버 및 블록 장치용 스토리지 프로토콜에 연결하는 접착제 역할을 합니다. 추가 사용자 기능(RAID, 압축, 중복 제거 등)을 위해 블록 계층에 유연한 API도 제공됩니다.
-
Blobstore : Blobstore: SPDK용으로 고도로 간소화된 클래스 파일 시맨틱(비 POSIX)을 구현합니다. 이는 대부분의 POSIX 파일 시스템 기능 세트(예: 사용자 액세스 제어)에 의존하지 않는 데이터베이스, 컨테이너, 가상 머신 또는 기타 워크로드에 대해 고성능 기반을 제공합니다.
Storage Protocols
-
iSCSI target : 이더넷을 통한 블록 트래픽에 대해 확립된 사양 구현, 커널 LIO보다 약 2배 효율적입니다. 현재 버전은 기본적으로 커널 TCP/IP 스택 사용합니다.
-
NVMe-oF target: 새로운 NVMe-oF 사양 구현, RDMA 하드웨어에 의존하지만 NVMe-oF target은 CPU 코어당 최대 40Gbps의 트래픽을 처리할 수 있습니다.
-
vhost-scsi target : SPDK NVMe 드라이버를 활용하는 KVM/QEMU용 기능으로, 게스트 VM이 스토리지 미디어에 대한 액세스 대기 시간을 단축하고 I/O 집중 워크로드의 전체 CPU 부하를 줄입니다.
2. SPDK가 아키텍처에 적합한지 여부를 결정하는 데 도움이 될 수 있는 몇 가지 질문
SPDK는 모든 스토리지 아키텍처에 적합하지 않습니다.다음은 SPDK 구성 요소가 아키텍처에 적합한지 여부를 결정하는 데 도움이 될 수 있는 몇 가지 질문입니다.
》 스토리지 시스템이 Linux 또는 FreeBSD* 기반입니까?
SPDK는 주로 Linux에서 테스트 및 지원됩니다. 하드웨어 드라이버는 FreeBSD 및 Linux에서 모두 지원됩니다.
》 스토리지 시스템의 하드웨어 플랫폼이 인텔® 아키텍처입니까?
SPDK는 인텔® 플랫폼 특성을 최대한 활용하도록 설계되었으며 인텔® 칩 및 시스템에 맞게 테스트 및 조정되었습니다
》 현재 스토리지 시스템의 성능 경로가 사용자 모드로 실행되고 있습니까?
사용자 모드에서 네트워크 카드에서 디스크로의 고성능 경로를 더 많이 실행하여 성능과 효율성을 향상 시킵니다. 애플리케이션을 SPDK 기능(예: NVMe-oF 대상, NVMe-oFinitator, Blobstore)과 결합하여 전체 데이터 경로를 사용자 모드에서 실행할 수 있으므로 높은 효율성을 제공합니다.
》 시스템 아키텍처가 잠금 없는 PMD를 스레딩 모델에 통합할 수 있습니까?
PMD는 계속해서 스레드에서 실행되기 때문에(사용하지 않을 때 프로세서를 중단하거나 양도하는 대신) 특정 스레드 모델 요구 사항이 있습니다
》 현재 시스템에서 네트워크 패킷 워크로드를 처리하기 위해 DPDK(Data Plane Development Kit)를 사용합니까?
SPDK와 DPDK는 초기 프로그래밍 모델을 공유하므로 현재 DPDK를 사용하는 사용자는 SPDK와 긴밀하게 통합하는 것이 유용할 수 있습니다. 마찬가지로 네트워크 처리를 위해 DPDK 기능을 추가하는 것은 SPDK를 사용하는 사용자에게 중요한 기회가 될 수 있습니다.
》 개발팀이 스스로 문제를 이해하고 해결할 수 있는 전문성을 가지고 있는가
인텔은 관련 소프트웨어에 대한 지원을 제공할 의무가 없습니다. 인텔과 SPDK를 둘러싼 오픈 소스 커뮤니티는 소프트웨어의 수정되지 않은 릴리스 버전에서 발생할 수 있는 잠재적 오류를 조사하기 위해 합당한 상업적 노력을 기울일 것입니다. 그 외의 경우 인텔은 소프트웨어에 대한 유지 관리 및 지원을 사용자에게 제공할 의무가 없습니다.
3. Performance testing
성능 테스트에 사용된 소프트웨어 및 워크로드는 인텔 마이크로프로세서의 성능에만 최적화되었을 수 있습니다. SYSmark* 및 MobileMark와 같은 성능 테스트는 특정 컴퓨터 시스템, 구성 요소, 소프트웨어, 작업 및 기능을 사용하여 측정됩니다. 이러한 요소를 수정하면 결과가 달라질 수 있습니다. 구매 결정을 충분히 평가할 수 있도록 다른 제품과 함께 사용할 때 이 제품의 성능을 포함하여 다른 정보를 참조하고 다른 성능 테스트를 수행하십시오.
Performance testing configuration:
- 2S Intel® Xeon® processor E5-2699 v3: 18 C, 2.3 GHz (hyper-threading off)
- Note: Single socket was used while performance testing
- 32 GB DDR4 2133 MT/s
- 4 Memory Channel per CPU
- 1x 4GB 2R DIMM per channel
- 4 Memory Channel per CPU
- Ubuntu* (Linux) Server 14.10
- 3.16.0-30-generic kernel
- Intel® Ethernet Controller XL710 for 40GbE
-
8x P3700 NVMe drive for storage
- NVMe configuration
- Total 8 PCIe* Gen 3 x 4 NVMes
- 4 NVMes coming from first x16 slot (bifurcated to 4 x4s in the BIOS)
- Another 4 NVMes coming from second x16 slot (bifurcated to 4 x4s in the BIOS)
- Intel® SSD DC P3700 Series 800 GB
- Firmware: 8DV10102
- Total 8 PCIe* Gen 3 x 4 NVMes
- FIO BenchMark Configuration
- Direct: Yes
- Queue depth
- 4KB Random I/O: 32 outstanding I/O
- 64KB Seq. I/O: 8 outstanding I/O
- Ramp Time: 30 seconds
- Run Time:180 seconds
- Norandommap: 1
- I/O Engine: Libaio
- Numjobs: 1
- BIOS Configuration
- Speed Step: Disabled
- Turbo Boost: Disabled
- CPU Power and Performance Policy: Performance
For more information go to Intel Product Performance.