Distributed Systems
주요 구현 내용
Ceph erasure-code 주요 구현 내용
1. 핵심 인터페이스 (ErasureCodeInterface)
- 목적: 모든 이레이저 코드 구현의 표준화된 API 제공
- 주요 메서드:
init(): 프로파일에 따라 코드 초기화encode(): 데이터를 청크로 인코딩decode(): 청크에서 원본 데이터 복구minimum_to_decode_with_cost(): 최소 비용으로 복구 가능한 청크 세트 결정
2. 기본 구현 (ErasureCode)
- 역할: 공통 기능을 구현하는 추상 클래스
- 기능:
- CRUSH 규칙 생성
- 청크 매핑 관리
- 디코딩을 위한 최소 청크 세트 계산
- 기본적인 인코딩/디코딩 워크플로우
3. 플러그인 시스템 (ErasureCodePlugin)
- 구조: 동적 로딩 가능한 라이브러리 구조
- 관리:
ErasureCodePluginRegistry가 플러그인 로딩, 초기화, 관리 - 확장성: 새로운 알고리즘 쉽게 추가 가능
4. 주요 알고리즘 구현
Jerasure
- 특징: 다양한 이레이저 코드 알고리즘 구현(Reed-Solomon, Cauchy 등)
- 최적화: SSE, NEON 등 하드웨어 가속 지원
- 하위 라이브러리:
jerasure: 코어 이레이저 코딩 기능gf-complete: 유한체(Galois Field) 연산 최적화
LRC (Local Reconstruction Codes)
- 목적: 지역적 복구를 통한 성능 향상
- 동작:
- 전역 패리티와 지역 패리티 모두 생성
- 단일 디스크 오류는 로컬 패리티만으로 빠르게 복구
- 심각한 오류는 전역 패리티로 복구
SHEC (Shingled Erasure Code)
- 특징: 복구 대역폭 최적화
- 구현: 중첩된(shingled) 패리티 구조로 더 효율적인 복구
ISA (Intel Storage Acceleration)
- 특징: 인텔 ISA-L 라이브러리 사용
- 최적화: AVX, AVX2 명령어 활용한 고성능 구현
- 조건부 컴파일: 하드웨어 지원 여부에 따라 컴파일 타임에 결정
CLAY (Coupled-Layer)
- 특징: 최소 네트워크 사용으로 최적 복구
- 구현: 계층적 인코딩 구조
5. 구현 세부사항
- 청크 정렬: SIMD 연산을 위한 메모리 정렬 (SIMD_ALIGN = 64바이트)
- 프로파일 관리: 키-값 형태로 코딩 파라미터 관리
- 시스템 통합: CRUSH 맵과 통합하여 데이터 배치 관리
- 성능 최적화:
- 하위 청크(sub-chunks) 지원으로 세밀한 데이터 배치
- 비용 기반 청크 선택 알고리즘
6. 빌드 시스템 (CMakeLists.txt)
- 플러그인 구성: 각 알고리즘은 별도 라이브러리로 빌드
- 조건부 컴파일: 하드웨어 기능(SIMD, AVX 등)에 따른 최적화 버전 선택
- 종속성 관리: 외부 라이브러리 통합