로그 구조 파일 시스템(BSD)

Log-structured File System (BSD)

Log-Structured File System(LFS)은 BSD용으로 개발된 로그 구조화 파일 시스템(John Ousterhout이 원래 제안 및 구현한 개념)의 구현입니다.FreeBSDOpenB에서 삭제되었습니다.SD: NetBSD 의 실장은, 4.0 릴리스까지의 작업이 실가동 파일 [1]시스템으로서 재실행할 때까지 기능하지 않았습니다.

설계.

LFS의 온디스크 포맷의 대부분은 UFS에서 차용됩니다.간접 블록, inode 및 디렉토리 형식은 거의 동일합니다.이를 통해 충분히 테스트된 UFS 파일 시스템 코드를 재사용할 수 있습니다. LFS의 현재 구현에서는 상위 레벨의 UFS 코드를 하위 레벨의 FFS용 코드와 공유합니다.이 두 파일 시스템은 UFS와 많은 공통점을 가지고 있기 때문입니다.

LFS는 디스크를 세그먼트(segment)로 나눕니다.이 세그먼트(segment)는 한 번에 1개만 활성화됩니다.각 세그먼트에는 요약 블록이라고 불리는 헤더가 있습니다.각 요약 블록에는 다음 요약 블록에 대한 포인터가 포함되어 LFS가 선형 로그로 취급하는 하나의 긴 체인으로 세그먼트를 링크합니다.세그먼트가 디스크상에서 서로 인접해 있을 필요는 없습니다.따라서 세그먼트 [2]사이즈는 세그먼트간에 취득하는 비용을 상각하기 때문에, 보다 큰 세그먼트 사이즈(384KB~1MB)를 추천합니다.

파일 또는 디렉토리가 변경될 때마다 LFS는 다음 로그의 선두에 씁니다.

  1. 변경되거나 새로운 데이터 블록.
  2. 간접 블록이 (1)을 가리키도록 업데이트되었습니다.
  3. Inodes가 (2)를 가리키도록 업데이트되었습니다.
  4. Inode 맵 블록이 (3)[3]을 가리키도록 업데이트되었습니다.

UFS와 달리 LFS의 inode에는 고정 위치가 없습니다.inode 맵(inode block location의 플랫리스트)은, 그것들을 추적하기 위해서 사용됩니다.다른 모든 것과 마찬가지로 inode 맵블록도 변경 시 로그에 기록됩니다.

세그먼트가 채워지면 LFS는 다음 빈 세그먼트 또는 깨끗한 세그먼트를 채웁니다.세그먼트에 라이브 블록이 포함되어 있는 경우 또는 로그 앞에 새로운 복사본이 존재하지 않는 블록이 포함되어 있는 경우 세그먼트는 더티하다고 합니다.LFS 가비지 컬렉터는 더티 세그먼트에서 현재 세그먼트로 라이브블록을 복사하고 나머지는 건너뛰어 더티 세그먼트를 깨끗한 세그먼트로 바꿉니다.각 세그먼트의 요약 블록에는 라이브 블록을 추적하기 위한 지도가 포함되어 있습니다.

일반적으로 가비지 수집은 클린 세그먼트가 남아 있지 않을 때까지 지연됩니다.시스템이 아이돌 상태일 때에도 지연될 수 있습니다.그럼에도 불구하고, 가장 덜 더러운 부분만 수집 대상으로 선정됩니다.이는 I/O 대역폭이 가장 [2]필요할 때 전체 세그먼트를 청소하는 불이익을 피하기 위한 것입니다.

체크 포인트(통상은 30초마다 1회 정도 스케줄 되어 있습니다)에서 LFS는 inode 맵의 마지막 기존 블록 위치와 현재 세그먼트의 수를 디스크 상의 고정 위치에 있는 체크 포인트 영역에 씁니다.이러한 영역은 2개 있습니다.LFS는 각 체크포인트를 번갈아 사용합니다.일단 작성되면 체크포인트는 파일 시스템의 마지막 일관된 스냅샷을 나타냅니다.크래시 후 복구와 일반 마운트도 동일한 방식으로 작동합니다. 파일 시스템은 마지막 체크포인트에서 상태를 재구성하고 거기에서 로깅을 재개합니다.

단점들

  • LFS에서는 특히 파일 증가 속도가 느리거나 여러 개의 대용량 쓰기가 동시에 발생할 경우 심각한 파일 시스템 조각화가 발생할 수 있습니다.로그 구조화 파일 시스템의 설계 근거에서는 디스크 읽기가 대부분 캐시되어 있다고 가정하지만, 이로 인해 심각한 성능 저하가 발생합니다.
  • 깨끗한 세그먼트를 사용하기 위해 가비지 컬렉터를 거의 끊임없이 실행해야 하는 경우 LFS는 최대 용량에 가까워질수록 효율성이 점차 저하됩니다.
  • LFS는 스냅샷이나 버전 관리를 지원하지 않습니다.다만, 일반적으로 로그 구조 파일 시스템에 실장하는 것은 간단한 기능입니다.

메모들

  • Seltzer, Margo; Bostic, Keith; McKusick, Marshall Kirk; Staelin, Carl (January 1993), "An Implementation of a Log-Structured File System for UNIX" (PDF), Proceedings of the 1993 Winter Usenix
  • Matthews, Jeanna Neefe; Roselli, Drew; Costello, Adam M.; Wang, Randolph Y.; Anderson, Thomas E. (October 1997), "Improving the performance of log-structured file systems with adaptive methods", SOSP '97 Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles: 238–251, doi:10.1145/268998.266700, ISBN 978-0897919166, S2CID 11858758

레퍼런스

  1. ^ 를 클릭합니다Bouyer, Manuel (2007-12-15). "NetBSD 4.0 Release CHANGELOG". Retrieved 2019-02-04..
  2. ^ a b 를 클릭합니다Rosenblum, Mendel; Ousterhout, John K (February 1992), "The Design and Implementation of a Log-Structured Filesystem" (PDF), ACM Transactions on Computer Systems, 10 (1): 26–52, doi:10.1145/146941.146943, S2CID 28452863.
  3. ^ 를 클릭합니다Rosenblum, Mendel; Ousterhout, John K (June 1990), "The LFS Storage Manager" (PDF), Proceedings of the 1990 Summer Usenix: 315–324.