Namespace Operations

골덕·2024년 11월 26일
  • 모든 메타 작업은 MDS가 동기적으로 처리

    • 직렬화 처리
  • 메타데이터 업데이트에 있어서는 클라이언트에게 락이나 리스 같은 동기화 메커니즘을 제공하지 않음

    • MDS가 모든 메타데이터 작업을 직접 처리
    • 이 방식은 MDS가 항상 메타데이터 작업의 중재자가 되도록 하여, 데이터 일관성과 안전성을 보장합니다
  • 대신 ceph는 common metadata access를 최적화

    • readdir - caching inodes
      • 대규모 디렉터리에서 readdir(디렉터리 내용 조회)와 stat(각 파일의 상세 정보 조회)을 연속적으로 실행하는 패턴은 매우 흔하며 성능 저하를 초래.
      • readdir 요청 한 번으로 디렉터리의 모든 항목과 각 파일의 inode 정보를 한꺼번에 가져옴.
      • stat 작업이 즉시 이어질 경우, inode 정보는 캐시에 저장되어 빠르게 반환(이후 stat 작업이 없으면 캐시는 폐기).
      • 이 과정에서 디렉터리 항목이나 inode가 수정되었더라도 캐시를 기반으로 반환될 수 있음(약간의 일관성 완화). 그러나 이는 성능 향상을 위해 의도적으로 감수하는 트레이드오프.
      • Ceph의 이 최적화 동작은 *readdirplus라는 표준 확장으로 정의됨.
      • readdirplus는 디렉터리 항목과 함께 lstat 결과(inode 정보)를 반환하여 추가 요청 없이 메타데이터 조회 성능을 크게 개선.
    • 캐싱 일관성 완화와 문제점:
      • Ceph는 메타데이터를 더 오래 캐싱하여 성능을 향상시킬 수 있지만(NFS처럼 30초 동안 캐싱), 이는 파일 상태(stat) 정보의 일관성(coherency) 손실을 초래.
        • 예: 파일 크기나 수정 시간(mtime)이 오래된 캐시값으로 반환되어 애플리케이션 동작이 잘못되거나, 캐시 만료를 기다리느라 지연 발생.
      • Ceph는 일관성을 유지하면서 성능을 개선하기 위해 인터페이스를 확장하는 방식을 선택.
        • 예: 파일이 여러 클라이언트에 의해 동시에 쓰이고 있는 상황에 stat 요청이 있는 경우:
          1. MDS가 모든 쓰기 권한(write capabilities)을 잠시 회수(revoke)하여 업데이트를 중지.
          2. 모든 클라이언트에서 최신 파일 크기와 수정 시간을 수집.
          3. 가장 큰 값(최신 상태)을 반환.
          4. 이후 쓰기 권한을 재발행하여 작업 재개.
        • 단일 클라이언트가 파일을 쓰는 경우에는 클라이언트로부터 정보를 바로 받아 중단 없이 처리.
profile
다시 시작하는 개발자

0개의 댓글