File I/O and Capabilities

골덕·2024년 11월 26일
  • process가 파일을 open하면, client가 MDS cluster에 request를 전송. mds는 file name을

  • 프로세스가 파일을 열 때, 클라이언트는 MDS(Metadata Server) 클러스터에 요청을 보냄.

  • MDS는 파일 시스템 계층 구조를 탐색해 파일 이름을 파일 inode로 변환.

    • 이 inode에는 고유한 inode 번호, 파일 소유자, 모드, 크기 및 기타 파일별 메타데이터가 포함.
    • 파일이 존재하고 접근 권한이 부여되면, MDS는 inode 번호, 파일 크기, 파일 데이터를 오브젝트로 매핑하는 스트라이핑(striping) 전략 정보를 반환. 또한, 클라이언트가 이미 가지고 있지 않다면, 수행 가능한 작업을 명시하는 capability를 발급.
  • 현재 capability는 클라이언트가 읽기, 읽기 캐시, 쓰기, 쓰기 버퍼를 사용할 수 있는지 제어하는 네 가지 비트를 포함하며, 향후 클라이언트가 데이터를 읽거나 쓸 권한이 있음을 OSD에 증명할 수 있는 보안 키도 포함될 예정입니다(현재 프로토타입에서는 모든 클라이언트를 신뢰).

  • 파일 열기 이후, MDS는 파일 일관성을 유지하고 파일 시스템의 동작 규칙을 보장하기 위해 파일 입출력 작업에 직접적으로 관여하지 않고, 클라이언트의 권한(capabilities)만 관리.

  • Ceph는 다양한 스트라이핑(striping) 전략을 일반화하여 파일 데이터를 일련의 오브젝트로 매핑. - 파일 할당 메타데이터(file allocation metadata)가 필요 없도록, 오브젝트 이름은 파일의 inode 번호와 스트라이프 번호를 단순히 조합하여 생성

  • 생성된 오브젝트의 복제본은 CRUSH(글로벌 매핑 함수, 5.1절 참고)를 사용해 OSD에 할당됩니다.

  • 예를 들어, 하나 이상의 클라이언트가 파일을 읽기 목적으로 열 경우, MDS는 파일 내용을 읽고 캐싱할 수 있는 capability를 부여.

  • 클라이언트는 inode 번호, 레이아웃(layout), 파일 크기를 활용하여 파일 데이터를 포함하는 모든 오브젝트의 이름을 생성하고, OSD 클러스터에서 데이터를 직접 읽어옴.

    • 존재하지 않는 오브젝트나 바이트 범위는 파일의 "hole"(비어 있는 영역)로 간주되며, 이는 모두 0으로 정의됩니다.
  • 클라이언트가 파일을 쓰기 목적으로 열면, MDS는 데이터를 버퍼링하며 쓸 수 있는 capability를 부여합니다. 클라이언트는 파일 내 임의의 오프셋에서 생성한 데이터를 적절한 OSD의 적절한 오브젝트에 바로 기록합니다. 파일을 닫을 때, 클라이언트는 capability를 반납하고, MDS에 새 파일 크기(가장 큰 오프셋)를 전달합니다. 이를 통해 MDS는 데이터가 포함될 수 있는 오브젝트의 범위를 다시 정의.

profile
다시 시작하는 개발자

0개의 댓글