다른 명령
137번째 줄: | 137번째 줄: | ||
=== File System Aware Garbage Collection === | === File System Aware Garbage Collection === | ||
SSD 컨트롤러가 파일 시스템을 분석하여 삭제된 파일과 미할당된 공간을 감지하는 기능이다. 이 기능을 사용하면 운영 체제나 하드웨어가 TRIM을 지원하지 않더라도 유사한 성능을 유지할 수 있다. 특정 파일 시스템을 기반으로 동작하는 경우가 있으며, 파일 시스템에 따라 성능이나 안정성이 영향을 받을 수 있다. 일부 SSD에서는 특정 파일 시스템과 파티션 방식이 올바르게 설정되지 않으면 데이터 손상 문제가 발생할 수 있다. | |||
== TRIM == | == TRIM == |
2025년 3월 24일 (월) 06:21 기준 최신판
개요
Write Amplification(쓰기 증폭)은 저장 장치에서 실제 쓰기 작업이 논리적 쓰기보다 더 많이 발생하는 현상을 의미한다. 이는 플래시 메모리 기반 SSD(Solid State Drive)에서 특히 중요한 개념으로, 성능 저하 및 수명 단축의 원인이 될 수 있다.
플래시 메모리는 다시 작성되기 전에 삭제되어야 하기 때문에 실제 작성하고자하는 Logical write operation의 크기보다 더 많은 양을 플래시 메모리에서 읽어서 저장한다음, 다시 작성해야 한다. 이러한 과정에서 플래시 메모리는 불필요한 Write이 발생하게 되고, 이 불필요한 Write에 의한 효과를 Write amplification이라 부른다. 이러한 Copy-on-write에 의한 Write amplification이외에도, Garbage Collection, Wear Leveling과 같은 다양한 SSD의 operation에 의한 Write amplification이 존재한다.
보통 Write amplification이 발생하는 주요 원인은 다음과 같다.
- Garbage Collection (GC, 가비지 컬렉션): SSD는 기존 데이터를 직접 덮어쓸 수 없으며, 새로운 데이터를 기록하기 전에 유효하지 않은 데이터를 정리해야 한다. 이 과정에서 추가적인 쓰기가 발생한다.
- Wear Leveling (웨어 레벨링): 특정 블록이 집중적으로 사용되는 것을 방지하기 위해 데이터를 다른 블록으로 재배치하면서 추가적인 쓰기가 이루어진다.
- Copy-on-Write (COW, 쓰기 시 복사): 일부 파일 시스템 및 데이터베이스에서 기존 데이터를 변경할 때, 새로운 블록에 데이터를 쓰고 원본을 유지하는 방식으로 인해 더 많은 쓰기가 발생한다.
Write amplification 값 계산
SSD의 쓰기 증폭 값을 계산하는 간단한 공식은 다음과 같다.
[math]\displaystyle{ \text{Write Amplification} = \frac{\text{Data Written to the Flash Memory}}{\text{Data Written by the Host}} }[/math]
Write amplification에 영향을 미치는 변수들
쓰기 증폭에 영향을 미치는 요인
여러 가지 요인이 SSD의 쓰기 증폭 값에 영향을 미친다. 아래 표는 주요 요인과 각 요인이 쓰기 증폭에 미치는 영향을 나타낸다. 변수형 요인은 직접(direct) 또는 역(inverse) 관계를 가지며, 예를 들어 오버 프로비저닝 비율이 증가할수록 쓰기 증폭은 감소한다(역 관계). 토글형 요인은 활성화(enabled) 또는 비활성화(disabled) 상태에 따라 긍정적(positive) 또는 부정적(negative) 영향을 미친다.
요인 | 설명 | 유형 | 관계* |
---|---|---|---|
가비지 컬렉션 | 삭제 및 재기록할 블록을 선택하는 알고리즘의 효율성 | 변수 | 역 관계 (좋음) |
오버 프로비저닝 | SSD 컨트롤러에 할당된 오버 프로비저닝 용량 비율 | 변수 | 역 관계 (좋음) |
디바이스 내장 DRAM 버퍼 | SSD의 내장 DRAM 버퍼는 쓰기 증폭을 줄이는 데 사용될 수 있음 | 변수 | 역 관계 (좋음) |
TRIM 명령어 (SATA) 또는 UNMAP 명령어 (SCSI) | 운영체제가 SSD에 유효하지 않은 데이터 페이지를 알려주어, SSD가 해당 블록을 지울 때 불필요한 데이터 복사를 방지함 | 토글 | 긍정적 (좋음) |
Zoned Storage | 스토리지 장치를 여러 개의 존(보통 플래시 메모리 블록)으로 나누고, 운영체제가 연속적으로 데이터를 기록하도록 지원하여 쓰기 증폭을 줄임 | 토글 | 긍정적 (좋음) |
사용자 가용 공간 | 사용자 데이터가 저장되지 않은 가용 공간 비율 (TRIM을 지원해야 효과가 있음) | 변수 | 역 관계 (좋음) |
보안 삭제 | 모든 사용자 데이터 및 메타데이터를 삭제하여 SSD를 초기 상태로 되돌림 | 토글 | 긍정적 (좋음) |
웨어 레벨링 | 모든 블록이 균등하게 사용되도록 하는 알고리즘의 효율성 | 변수 | 관계에 따라 다름 |
정적 데이터와 동적 데이터 분리 | 데이터 변경 빈도에 따라 그룹화 | 토글 | 긍정적 (좋음) |
순차적 쓰기 | 일반적으로 순차적 쓰기가 쓰기 증폭을 줄이는 경향이 있음 | 토글 | 긍정적 (좋음) |
랜덤 쓰기 | 비연속적인 데이터 기록 및 작은 크기의 데이터 쓰기는 쓰기 증폭을 증가시킴 | 토글 | 부정적 (나쁨) |
데이터 압축 및 데이터 중복 제거 | 불필요한 데이터를 줄여 쓰기 증폭을 낮추고 SSD 속도를 높임 | 변수 | 역 관계 (좋음) |
MLC NAND를 SLC 모드로 사용 | SLC 모드는 1비트씩 저장하여 속도를 높이고 마모를 줄일 수 있으나, 전체 용량이 줄어들며 특정 조건에서 쓰기 증폭이 증가할 수 있음 | 토글 | 관계에 따라 다름 |
유형 | 관계 변화 | 설명 |
---|---|---|
변수 | 직접 | 요인이 증가하면 쓰기 증폭이 증가 |
역 관계 | 요인이 증가하면 쓰기 증폭이 감소 | |
관계에 따라 다름 | 제조업체 및 모델에 따라 다름 | |
토글 | 긍정적 | 요인이 활성화되면 쓰기 증폭이 감소 |
부정적 | 요인이 활성화되면 쓰기 증폭이 증가 | |
관계에 따라 다름 | 제조업체 및 모델에 따라 다름 |
Garbage collection
SSD컨트롤러가 하나의 블럭을 삭제하면 우선 Stale상태로 마팅되고, 나중에 Free된다. SSD컨트롤러의 Garbage collection은 Stale상태에 있는 블럭들을 Free상태로 만드는 과정이다. SSD의 Garbage collector는 stale한 페이지가 있는 여려개의 블럭을 하나의 블럭으로 모아서, 추가적으로 사용할 수 있는 공간을 마련한다. 이때, Write에 비해서 하나의 블럭을 Erase하여 Free상태로 만드는 과정은 대략 3배에서 10배까지 걸리는 많은 시간이 소요되는 과정이다. 또한 Garbage collection은 필연적으로 Write amplification, 즉 Garbage collection에 소요되는 Write이 필요하다. SSD에서의 GC는 Write amplification의 매우 큰 부분을 차지하는 것으로 알려져 있다.

Background Garbage Collection
가비지 컬렉션은 플래시 메모리에 저장된 데이터를 읽고 다시 쓰는 과정이 포함된다. 즉, 호스트가 새로운 데이터를 기록하기 전에 기존 블록을 먼저 읽고, 여전히 유효한 데이터를 다시 쓴 후, 새로운 데이터를 기록하는 절차를 거친다. 이 과정은 SSD 성능을 저하시킬 수 있다. 이를 해결하기 위해 많은 SSD 컨트롤러는 배경 가비지 컬렉션(BGC) 또는 유휴 가비지 컬렉션(Idle Garbage Collection, ITGC)을 사용한다. 이 기술은 SSD가 유휴 상태일 때 플래시 메모리 블록을 미리 정리하여, 호스트가 데이터를 기록할 때 성능을 유지하도록 한다.
컨트롤러가 가비지 컬렉션을 미리 수행하면, 호스트가 새로운 데이터를 기록할 때 기존 데이터를 이동시키는 과정 없이 최대 속도로 동작할 수 있다. 그러나 운영 체제가 SSD 컨트롤러에 삭제된 데이터를 알리지 않으면 불필요한 데이터까지 다시 쓰게 되어 쓰기 증폭(Write Amplification)이 증가하게 된다. 이를 해결하기 위해 TRIM 명령이 도입되었다. 일부 SSD는 Background Garbage Collection을 제한적으로 수행하여 불필요한 쓰기를 최소화한다. 또 다른 방식으로는 호스트의 쓰기 작업과 병렬로 가비지 컬렉션을 수행하는 것이다. 이 방식은 SSD가 지속적으로 쓰기 작업을 수행하는 환경에서 더 효과적이다.
File System Aware Garbage Collection
SSD 컨트롤러가 파일 시스템을 분석하여 삭제된 파일과 미할당된 공간을 감지하는 기능이다. 이 기능을 사용하면 운영 체제나 하드웨어가 TRIM을 지원하지 않더라도 유사한 성능을 유지할 수 있다. 특정 파일 시스템을 기반으로 동작하는 경우가 있으며, 파일 시스템에 따라 성능이나 안정성이 영향을 받을 수 있다. 일부 SSD에서는 특정 파일 시스템과 파티션 방식이 올바르게 설정되지 않으면 데이터 손상 문제가 발생할 수 있다.
TRIM
운영 체제 또는 사용자가 파일을 삭제하더라도, 실제 데이터는 즉시 지워지지 않고 단순히 삭제 표시만 된다. 이 때문에 SSD는 해당 LBA가 더 이상 필요 없다는 사실을 인식하지 못하고, 가비지 컬렉션 시 불필요한 데이터를 계속 포함하게 된다. 이를 해결하기 위해서, TRIM은 운영 체제가 SSD에 삭제된 파일이나 포맷된 볼륨의 블록이 더 이상 필요하지 않음을 알릴 수 있도록 한다. 운영 체제가 특정 LBA를 덮어쓰면 SSD는 해당 LBA를 무효화하고, 가비지 컬렉션 시 고려하지 않는다. 이를 통해 SSD는 해당 블록을 즉시 삭제하고 재사용할 수 있으며, 가비지 컬렉션 시 이동해야 할 데이터가 줄어들어 쓰기 증폭이 감소하고 성능이 향상된다.
Overprovisioning
Over-provisioning은 SSD에서 논리적인 블록의 크기보다 물리적인 블록의 크기가 더 크도록 하는 것이다. 보통 SSD는 7~30%정도의 SSD용량을 Overprovisioning에 할당하고 있다. Over-provisioning된 영역은 만약 SSD의 논리 블럭의 수명이 다할 경우, 대체할 수 있는 영역으로 사용된다. 또한 Garbage collector가 충분한 양의 Free페이지를 만들어 내기도 전에, Write요청이 들어와, GC속도가 Write요청을 따라가지 못하는 경우에도 캐시로 사용되어서 최대한 SSD가 빠른 속도로 Write요청들을 처리하도록 캐시공간으로 사용되기도 한다.