System Programming - Garbage Collection

나라마야·2023년 9월 22일
0

System Programming

목록 보기
4/4

Garbage Collection 개요

SSD 핵심 기능 중 하나다. 데이터는 깨끗한 page에 써야 한다. 그러다 보면 나중에 clean page가 사라진다. 그걸 계속 확보해 주는 것이 garbage collection이다. 즉, 쓰레기를 처리해서 clean page를 유지하게 해주는 것이다.

Out-of-Place Update의 결과

그림과 같은 Flash의 한 상황이 있다고 보자


기존의 block에서 a와 b를 새로운 값으로 변경을 하면서 Blcok #0에 더 이상 valid page가 없다. 새로운 데이터가 오면 계속 새로운 free page를 사용한다.

Invalid Page 지우기

out-of-place update로 free page는 계속 사용되면 나중에는 더 이상 free page는 남지 않을 것이다. free page를 확보하기 위해 우리는 invalid를 지워야 한다.

근데 여기서 문제가 있다. SSD는 구조상 block 단위로만 지울 수 있다.

지울 Block에 Valid Page가 있는 경우

상황은 두가지로 나뉠 수 있다. 지울 block의 page가 모두 invalid page이거나 사용중인 valid page가 남아 있는 경우다.

  1. 지울 block이 모두 invalid라면 그냥 그 block모두 지우면 된다.

  2. 지울 block에 valid가 있다면 Flash에서 비상용으로 남긴 clean page로 옮긴다. 그럼 순간 같은 값이 중복된다. 그리고 지울 block에 남은 기존 page를 invalid로 바꾼다.
    당연히 block을 지울때 valid가 적어야 옮기는 page의 수가 적으니 지울 block을 valid가 적은 block으로 해준다.

Valid Page 옮기기

데이터가 새로운 장소에 쓰이면 Mapping Table 수정도 필요하다.
Mapping Table에서 각 LPN이 가리키던 PPN은 새로운 page의 주소에 따라 PPN을 변경해야 한다.

Garbage Collection Process

  • 작동방식: SSD는 Block 단위로 보아 정해진 임계값보다 Clean Blcok의 개수가 떨어지면 FTL이 Garbage Collection을 한다.
    Garbage Collection이 일어나면 어떤 block을 지울지 선택을 하며 선택 방법은 기업마다 천차만별이다.

  • Garbage Collection은 IO성능을 매우 떨어뜨린다. 시간은 read < write < erase 순으로 걸리며 erase 때문에 순간 컴퓨터가 랙이 걸릴 수 있다.
    현재 여러 기업에서는 유저 입장에서 garbage collection에 의한 렉을 경험하지 않도록 가리는 방법을 찾고 있다고.

profile
언제나 나 자신에게 되물어 보기. So What?

1개의 댓글

comment-user-thumbnail
2023년 9월 22일

우와

답글 달기