DAOS 문서집

Created By

송

송수영

Stakeholders

송

송수영

Status

Empty

Created

February 14, 2022 1:07 PM

Last Edited Time

February 14, 2022 3:19 PM

Last Edited By

송

송수영

목표

소개

배경

DAOS

File System

Open Source Software

Extreme Scale Storage를 위한 아키텍처

Figure

용어 정리

목표

DAOS가 무엇이고,구성 요소, 작동방식 및 코드를 살펴본다.

소개

분산형 비동기식 오브젝트 스토리지(DAOS)란 인텔에서 개발한 대규모로 분산된 비 휘발성 메모리(NVM)을 위해 처음부터 철저하게 고안된 오픈소스 소프트웨어로 정의된 오브젝트 저장소이다.

DAOS는 key-value 스토리지 인터페이스와 Transactional non-blocking I/O를 제공한다. 또한, 자가 복구 기능을 갖춘 고급 데이터 보호, E2E 무결성 비용을 최소화하기 위한 elastic storage와 세분화된 데이터 제어같은 기능을 제공하는 SCM(Storage Class Memory),NVMe(NVM express)와 같은 차세대 기술을 사용한다

배경

첫번째는 비즈니스,정부,학계에서 데이터 중심 어플리케이션의 등장함에 따라 기존의 I/O모델이 한계를 넘어섰다. 최근 I/O 작업량은 정렬 안 되있고, 분열되어있는 데이터로 구성된 메타데이터의 비율이 증가하고 있다. 전통적인 저장공간 스택들은 많은 지연시간과 Alignment 제약으로 이러한 작업량에 대해 낮은 성능을 전달한다.

하지만, DAOS는 전세계에서 접근 가능한 오브젝트 어드레스 스페이스로 페브릭을 걸쳐 분산된 SCM과 NVMe 스토리지를 종합하여 성능 저하 없이 일관성, 가용성 및 복원력을 제공하는 완벽한 I/O 아키텍처이다.

두번째는 기하급수적인 데이터의 증가로, 분산 스토리지 시스템은 데이터센터의 중심이 되면서 병목현상도 초래했다. 긴 데이터 접근 시간, 낮은 확장성, 대규모 데이터셋 관리 어려움 및 쿼리 능력 결여는 단순히 일반적인 장애의 몇가지 예였다. 전통적인 스토리지 시스템은 Rotating media와 POSIZ을 위해 고안되었다. 이러한 스토리지 시스템은 주요 성능 병목현상을 보여진다. 그리고 이 시스템은 데이터모델과 차세대의 작업흐름을 지원하기 위한 발전이 어렵다.

DAOS

File System

컨테이너는 여러 컴퓨팅 노드에 POSIX 네임스페이스에서 공유된 대로 탑재될 수 있다. 이 기능은 native libdaos 라이브러리를 통해 파일과 디렉토리 추상화를 구현할 수 있는 libdfs 라이브러리에 의해 제공되고 있다. POSIX 에뮬레이션(emulation)은 직접 애플리케이션과 I/O 프레임워크에 직접 노출될 수 있다. (예를 들어, Spark와 텐서플로우와 같은 프레임워크, 또는 다른 저장공간 백엔드 플러긴을 지원하는 IOR와 mdtest와 같이).

또한, POSIX read/write operation을 위해 완전한 OS 우회를 전달함으로써, 몇몇 FUSE 성능 병목현상의 일부를 다루기 위한 interception 라이브러리와 선택적으로 합쳐진, FUSE 데몬을 통해 투명하게 노출될 수 있다.

성능은 DFS API를 직접 사용할 때 일반적으로 최고이다. IO interception 라이브러리는 최소한의 오버헤드를 가진 DFS API처럼 IO 명령어에 대해 같은 성능을 만들 수 있다.
fuse/kernel 레이어를 우회하는 interception이 아니기 때문에 dfuse를 통한 메타데이터 명령어의 성능은(파일생성,삭제,이름변경 등) DFS API보다 훨씬 느릴 것이다.

libdfs란?
DAOS File System(DFS)는 libdfs 라이브러리에서 구현된다, 그리고 DAOS 컨테이너를 계층적 네임스페이스로써 접근할 수 있도록 허락한다.
libdfs는 files,directories 그리고 symbolic links를 지원하지만 hard links은 지원하지않는다. 접근 허가는 부모 pool로부터 상속된다. 그리고 a per-file or per-directory 기반으로 구현될 수 없다.

지원되는 명령어
Mount: create/open superblock and root object
Un-mount: release open handles
Lookup: traverse a path and return an open file/dir handle
IO: read & write with an iovec
Stat: retrieve attributes of an entry
Mkdir: create a dir
Readdir: enumerate all entries under a directory
Open: create/Open a file/dir
Remove: unlink a file/dir
Move: rename
Release: close an open handle of a file/dir
Extended Attributes: set, get, list, remove

DFuse (DAOS FUSE)
DFuse는 표준 libc/kernel/VFS POSIX 인프라스트럭처(infrastructure)을 통해 DAOS FIle System접근을 제공한다. 기존 애플리케이션은 수정없이 DAOS를 사용하는 걸 허락했다. 그리고 native DAOS 지원으로 애플리케이션을 업그레이드할 방법을 제공했다. 게다가 DFuse는 interception 라이브러리(liboil)를 제공한다. 애플리케이션의 재컴파일 또는 수정없이 I/O위한 OS우회를 제공하면서 POSIX 클라이언트에게 직접 DAOS 서버에게 전달하도록 허락한다.

DFuse Daemon
dfuse 데몬은 DAOS에서 사용자 POSIX 접근을 제공하기 위해 노드당 싱글 인스턴스로 운영된다. 사용자 인증을 사용하여 실행해야하며 일반적으로 자원 매니저와 스케쥴러의 프롤로그 및 에필로그 스크립트의 일부로써 각 계산 노드로 실행되고 멈출 것이다.

제약사항
DFuse는 단일 유저로 제한된다. 루트를 포함해서 다른 유저들로부터 파일 시스템 엑세스가 허용되지않는다. 그 결과로, chown과 chgrp 호출은 지원하지않는다. 심볼릭 링크를 제외한, 하드 링크와 special device files은 지원되지 않으며 ACLs 또한 지원되지않는다.
터미널 창을 열어두거나 DFuse는 foreground에서 작동될 수 있다. 또는 시스템 데몬처럼 실행되도록 데몬화 할 수 있다. 하지만 이것을 하기 위해 그리고 여전히 DAOS를 접근하기 위해 daos_init()호출 전에 데몬화할 필요가 있다. 결국에 이것은 stdout/stderr 또는 리턴코드를 통해서 특정 종류의 시작오류를 보고할수 없음을 의한다. 초기에 DFuse가 시작할 때 failure을 더 잘 관찰하기위해서 foreground mode( --foreground)로 실행하길 추천된다.
Inode는 DFuse에의해 로컬노드로 관리된다. 그래서 inode 번호는 세션동안에 노드에서 유지하지만, 그 번호가 접근 노드 간 또는 Dfuse의 재시작 간에 일관성을 보장하지 않는다.

DFuse를 통해 pool/container 리스트는 볼수 없다. readdir,ls 또는 다른 것을 사용한다면 DFuse는 ENOTSUP을 돌려준다.

Open Source Software

DAOS는 Apache License Version2.0 하에 허가된 오픈소스화된 소프트웨어이다. Daos의 소스코드는 깃허브에서 공개적으로 이용가능하다.

daos.git

daos-stack

Extreme Scale Storage를 위한 아키텍처

새로운 트렌드

증가된 계산력

-시뮬레이션 데이터 양과 메타데이터 복잡성의 큰 증가

-관리하고 분석하기 복잡함

병렬을 통해 성취하다.

-1000만 코어와 100,000개의 노드

-매우 자주 하드웨어와 소프트웨어 실패

계층화된 스토리지 구조

-클러스터에 높은 성능 패브릭 & 솔리드 스테이트 스토리지 (비휘발성 컴퓨터 스토리지 타입)

-저성능, 고용량 디스크 기반의 스토리지 오브 클러스터

주목할만한 변화

NVRAM + 통합 패브릭

전통적인 스토리지 소프트웨어

I/O stack 요구사항

최소 소프트웨어 오버헤드

OS 우회

장애복구력

영구메모리 스토리지

파일시스템 & 애플리케이션 메타데이터 / hot data

d. 블록 스토리지

SSD - warm / Disk- lukewarm data

스토리지 아키텍처

Compute Node NVRAM

Hot data

Full 패브릭 대역폭

NVRAM 지연시간과 매우 낮은 패브릭

I/O Node NVRAM/SSD

Semi-hot data / 스테이징 버퍼(vertex 배열 데이터를 메모리로 업로드할 수 있는 CPU 접근 가능 메모리

Fractional 패브릭 대역폭 O(10TB/s)→O(100TB/s)

병행 파일시스템 NVRAM/RAM/SSD/Disk

Site-wide 공유하는 warm storage (읽기만 가능하고 수정이 불가능)

인덱스화된 데이터

클러스터에 (hot) 스토리지 요구사항 (바로 접근할 필요가 있는 데이터)

Scalable capcity

O(10x) system DRAM

Scalable throughput (처라율): 통신에서 네트워크 상의 어떤 노드나 터미널로부터 또 다른 터미널로 전달되는 단위 시간당 디지털 데이터 전송으로 처리하는 양

데이터 일관성 과 무결성

Tunable resilience/availability

No silent failures

안전한 덮어쓰기

최소 사용 제약

Global namespaces (전역 네임스페이스)

작업간에 공유되는 시스템 네임스페이스

연결된 작업흐름

프로세스간에 공유되는 Object 네임스페이스

전체 시뮬레이션 데이터셋을 캡슐화

Fine grained, random, massive

최소 인터페이스

관련없는 작업흐름에의한 데이터 이동

보안

인증된/승인된 접근

Grobal Namespaces (전역 네임스페이스)

Containers

공유되는 시스템 네임스페이스

Private 네임스페이스

전체 시뮬레이션 데이터셋

Multiple Schemas

POSIX

Shared & Private

애플리케이션 개발자를 위해 중단이 없다.

Scientific

Big Data

Distributed Application Object Storage (DAOS)

Exascale I/O stack

Multiple Top Level APIs : 다중 최상위 APIs

Domain-specific APIs : 도메인 특정 APIs

High-level data models : 고급 데이터 모델

DAOS-CT

Data migration over storage tiers : 스토리지 계층을 통한 데이터 이동

Guided by usage metadata : 이용 메타데이터에 의해 안내된다.

Driven by system resource manager : 시스템 리소스 매니저에 의해 유도된다.

DAOS-SR: Sharding and Resilience (Sharding이란 네트워크 시스템을 여러개의 작은 조각으로 나누어 분산 저장하여 관리하는 것)

스토리지 노드를 통한 처리 확대

DAOS-M: 영구메모리 오브젝트 스토리지

Ultra-low latency / fine grain I/O (매우 낮은 지연시간 / 미세한 I/O)

Fine-grain versioning & global consistency (미세한 버전관리 & 전역 일관성)

Location (latency & fault domain) aware (지연 위치와 장애지 인식)

Transactions 트랜젝션

Why?

애플리케이션 개발을 단순화하다

제자리에서 안전한 업데이트

보장된 데이터 모델 일관성

producer/consumer 작업흐름 동시성

회복 스키마를 지원한다.

중복 분산 데이터에 대한 일관성 보장

계층형 스토리지를 제공한다

데이터 이동 시 무결성 유지

How?

여러 버전의 동시성 제어

읽기에 대한 스냅샷 일관성

동시성/비동기성 최대화

프로세스 그룹

협업 프로세스의 임의의 수

스토리지 타겟의 임의의 수

Leader commit/snap/migrate

DAOS-M Object Storage - 영구 메모리 공간

다중 독립형 Object Address Spaces

최대 동시성

분산된 트랜젝션

낮은 지연시간

E2E OS 우회

비휘발성 메모리 서버

사용자 공간 패브릭 드라이버

DAOS Performance (ISC’19)

HW 성능 드라이버

SSD 대역폭 포화

메타데이터 & 작은 I/O 를 위한 비 휘발성 메모리의 IOPS/지연시간

IOPS란? HDD,SSD,SAN 같은 컴퓨터 저장 장치를 벤치마크하는데 사용되는 성능 측정 단위

최대 BW에 도달하기 위해 클라이언트가 필요하다.

Figure

Figure 1. DAOS 아키텍처 vs 전통적인 스토리지 시스템
주로 rotating media를 위해 고안된 전통적인 스토리지 스택과 달리, DAOS는 새로운 NVM(비휘발성 메모리) 기술의 사용을 만들기위해 차근차근 고안되어졌다. 그리고 DAOS는 매우 가렵다. 왜냐하면 이것은 OS 우회(Operating system bypass)로 사용자 공간에서 end-to-end로 운영되기 때문이다. DAOS는 대기시간이 긴 블록기반의 스토리지를 위해 고안된 I/O모델에서 근본적으로 fine-grained된 데이터 액세스를 지원하고 차세대 스토리지 기술의 성능을 향상시키는 모델로 전환할 수 있다.

Figure 1은 기존의 스토리지 시스템과 비교해서 DAOS 설계의 개요를 보여준다. 기존의 분산형 스토리지 시스템은 높은 대기율의 p2p 통신을 사용하는 반면에 DAOS는 OS를 우회하는 낮은 대기율,high-message-rate user-space 통신을 사용하기 위해 고안되었다.

오늘날에 대다수의 스토리지 시스템은 block I/O로 고안되었다, 그리고 그 모든 I/O 연산은 block 인터페이스를 가진 리눅스 커널을 통과한다. 블록장치에 접근하기 위한 최적화하기 위해 많은 작업을 한다.(ex: Coalescing, buffering, and aggregation)

하지만 이 모든 최적화는 인텔이 목표로 하는 차세대 스토리지 기기와 관련이 없다. 그리고 그것들을 사용한다면 불필요한 오버헤드를 일으킬 것이다. 달리 말하자면, DAOS는 Intel Optane DC persistent memory와 NVMe SSDs에 접근을 최적화하기 위해 만들어졌다. 그리고 이것은 불필요한 오버헤드를 피할 수 있다.==> 즉 최적화문제는 건드리지 않고, 하드웨어의 성능을 높여서 속도를 높인다는 이야기인듯

DAOS 서버는 대용량의 데이터인 메타 데이터는 NVMe SSDs에서 바로 영구메모리로 유지한다. DAOS는 영구메모리에 트랜젝션 접근을 제공하기 위해 PMDK와 NVMe 기기에서 user-space I/O를 위해 SPDK를 사용한다.

Figure 2. DAOS software stack

용어 정리

Object Storage?
계층이 없는 데이터 저장 방법으로, 디렉토리 트리를 사용하지 않아 개별 데이터 단위(Object)가 스토리지 풀의 동일한 레벨에 있다. 각 Object에는 애플리케이션에서 검색하는데 사용되는 고유 식별자가 있다.

Non Volatile Memory?
전원이 공급되지 않아도 저장된 정보를 계속 유지하는 컴퓨터 메모리

Storage Class Memory? DDR과 SDRAM보다 상당히 낮은 가격으로 높은 스피드를 얻는 메모리를 SCM(Storage Class Memory)라고 한다.

NVM express?
인터페이스로 연결된 비휘발성 저장장치들을 위한 새로운 통신 프로토콜

Out of band?(OOB) TCP에서는 긴급한 데이터의 통신을 위해 사용
TCP에서는 URG(urgent:긴급한)필드를 1로 설정, OOB데이터임을 표시.다른 패킷에 우선해서 도착하거나 높은 우선순위로 재조정된다거나 하지않는다. 왜냐면 별도의 패킷으로 전달되지 않고, 일반 데이터에 포함되어서 전달되기 때문이다.

POSIX?(Portable Operating System Interface+X)
IEEE가 제정한 유닉스의 애플리케이션 프로그래밍 인터페이스 규격
: 서로다른 Unix 운영체제 간에 이식성을 쉽게 하려고, IEEE에서 UNIX를 기반으로 개발한 API 등과 관련된 규격

end-to-end

컴퓨터 네트워킹의 설계 프레임 워크이다. 이 원칙에 따라 설계된 네트워크에서 안정성 및 보안과 같은 특정 응용 프로그램 별 기능을 보장하려면 해당 기능이 네트워크의 통신 end 노드에 있어야한다. 네트워크를 설정하기 위해 존재하는 게이트웨이 및 라우터와 같은 중간 노드는 효율성을 개선하기 위해 이를 구성할 수 있지만 end to end를 보장할 수 없다.

fine-grained
하나의 작업을 작은 단우의 프로세스로 나눈뒤 다수의 호출을 통해 작업결과를 생성해내는 방식

Coalescing
메모리의 두 인접한 free block을 합치는 행위이다. 애플리케이션이 메모리가 해지될 때, 애플리케이션이 사용하는 메모리 세그먼트에 공백이 발생할수 있다. Coalescing은 외부 단편화를 줄이기 위해 사용될수 있지만, 완전히 효과적이지는 않다.

zero-copy cpu가 한 메모리 영역에서 다른 메모리 영역으로 데이터를 복사하는 작업을 수행하지 않거나 불필요한 데이터 복사를 피하는 컴퓨터작업을 설명합니다.