Distributed Systems

주요 구현 내용

2025-12-272 min read

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 등)에 따른 최적화 버전 선택
  • 종속성 관리: 외부 라이브러리 통합
Share

Related Articles

Comments

이 블로그는 제가 알고 있는 것들을 잊지 않기 위해 기록하는 공간입니다.
직접 작성한 글도 있고, AI의 도움을 받아 정리한 글도 있습니다.
정확하지 않은 내용이 있을 수 있으니 참고용으로 봐주세요.

© 2026 Seogyu Kim