플래시 메모리를 위한 파일 시스템

EEEFFEE·2023년 12월 22일

raspberrypi4-kernel

목록 보기
11/12

23.12.21 최초 작성

1. 플래시 메모리의 특성

1.1 SSD

  • NAND 플래시 메모리 기반 저장장치

  • 내부에 cpu, DRAM과 같은 하드웨어 존재

    • 플래시 메모리를 관리하기 위함 (FTL (Flash Translation Layer))

FTL

  • 플래시 메모리를 디스크와 같이 다룰 수 있도록 해주는 추상화 계층

1.2 플래시 메모리

  • 비휘발성의 저장장치이며 디스크보다 빠르게 동작 (기계적인 부분 없음)

  • 덮어 쓸 때 먼저 해당 내용을 지워줘야 함

  • 덮어 쓰는데 제한이 있음(Overwrite Limitation)

  • 읽기/쓰기 단위는 4KB, 삭제는 2MB 단위로 이루어짐

    • 갱신 처리 방법

      • 내용 갱신 시 기존 데이터를 DRAM에 복사하고 지운 다음 다시 플래시 메모리로 복사
        (처리 속도가 느리고 덮어 쓰기 횟수 소모)

      • FTL 활용

        • 매핑 테이블을 활용해 기존 위치와 이후 변경된 위치를 기록 함
        • Out of place update : 다른 위치에 기존 데이터를 기록 및 매핑 변경하고 기존 위치를 무효화 함
          (기존 위치에 데이터 남아있음)
        • Garbage collection : 위의 과정을 반복하며 남은 용량이 부족해 졌을 때 유효한 데이터를 복사한 다음 블록 초기화
          (Greedy, Age기반 블록 선정)
        • Wear-levelingBad block Handling : 각 블록이 Overwrite Limitation에 도달하지 않도록 조절

2. LFS

  • 로그 구조 : 모든 write 동작을 첨부만 가능한 로그 구조로 관리

2.1 LFS 구조 (segment)

  • superblock이 파일 시스템을 나타내며 checkpoint regioninode map, segment usage, segment summary의 위치를 가짐

  • inode mapdirectory inodefile inode를 가짐

    • directory inode는 디렉토리의 데이터를 가리킴
    • file inodedirect pointer block, indirect pointer block을 통해 파일 데이터를 가르킴
  • 디스크 블록 대신 세그먼트 단위로 superblock을 제외한 디스크 공간을 관리

  • write 요청 시 로그를 세그먼트에 순차적으로 씀, 다 사용할 경우 다음 세그먼트에 이어 씀

  • segment cleaning

    • 데이터가 세그먼트에 흩어져 있을 경우 유효한 데이터를 모아 유휴 공간을 확보
    • 유효한 데이터를 한 세그먼트에 순차적으로 복사 한 다음 다른 세그먼트를 valid한 상태로 설정

2.2 LFS에서 write cost

write cost = total    bytes    read/writenew    data    written\frac{total\;\; bytes\;\; read/write}{new\;\; data\;\; written} = read    write    live    +    write    newnew    data    written\frac{read\;\; write\;\;live\;\; + \;\;write\;\;new}{new\;\; data\;\; written}
= N    +    Nu    +    N(1u)N(1u)          (u:utilization)\frac{N\;\;+\;\;N*u\;\;+\;\;N*(1-u)}{N*(1-u)}\;\;\;\;\;(u : utilization)

  • utilization에 성능 영향을 받음

2.3 segment selection policy

  • Greedy : 이용률이 적은 세그먼트 선택
  • Cost-benefit : 세그먼트에 기록된 내용의 나이를 고려
    benefitcost=free    space    generated        age    of    datacost    =(1u)age1+u\frac{benefit}{cost} = \frac{free\;\;space\;\;generated\;\;*\;\;age\;\;of\;\;data}{cost}\;\;=\frac{(1-u)*age}{1+u}

2.4 문제

  • write cliff : 활용률이 증가함에 따라 garbage collection에 의한 성능 하락

  • wandering tree problem : 파일 데이터 수정 시 상위 자료구조를 모조리 수정해야 하는 문제

3. F2FS

  • 플래시 메모리에 최적화 된 파일 시스템 (LFS 기반)

  • Multi-head logging : 다중 로깅을 통해 병렬로 I/O 처리

  • hot/cold-aware을 통해 자주 사용되는 세그먼트를 cleaning하지 않도록 함

3.1 F2FS 구조

  • superblock : 파일 시스템 정보
  • checkpoint : consistency 나타냄
  • segment info table : 유효 블록의 정보
  • NAT : 노드 블록의 위치
  • segment summary area : 블록의 정보
  • Main area : 노드와 데이터
  • 주소 변환을 하는 NAT (Node Address Translation)도입 해 checkpoint와 함께 하위 자료구조를 가르킴
  • 수정 시 갱신 과정 축소
    • 데이터 수정 → 노드 수정 → NAT 주소 변환 → checkpoint 수정

0개의 댓글