SSD 디스크는 사용된 공간의 비율, 총 쓰기량(TBW), 트림(Trim) 처리 상태, SSD 종류(NAND 타입)에 따라 성능 저하 양상이 달라집니다.
디스크 공간이 70~90% 이상 사용
- 70% 이상 : 성능저하 시작(모델에 따라 다름)
- 90% 이상 : 쓰기속도 급격히 저하
- 여유 블록 부족으로 내부 GC(Garbage Collection)와 병목발생
- SSD는 일부 여유 공간이 있을 때 최고의 성능 발휘
SSD 구조
├── 여러 개의 블록(Block)
│ ├── 페이지(Page) 1
│ ├── 페이지(Page) 2
│ ├── ...
│ └── 페이지(Page) N
Page(페이지)
- 가장 작은 쓰기 단위
- 일반적으로 4KB 또는 8KB 크기
- 데이터를 쓸 때는 반드시 빈 페이지에만 쓸 수 있음
- 삭제는 개별 페이지 단위로 불가능
Block(블록)
- 페이지 여러개가 모인 단위
- 보통 하나의 블록은 128~256페이지로 구성 / 예: 256페이지 * 4KB = 1MB 블록
- 삭제는 블록 단위로만 가능
- 블록을 지우려면 그 안의 모든 페이지를 먼저 비워야 합니다.
쓰기와 삭제 과정
쓰기(Write)
- SSD는 항상 빈 페이지에만 데이터를 씀
- 기존에 있던 데이터를 덮어쓸 수 없음
예) 수정된 파일은 새 페이지에 기록되며 이전 데이터는 삭제 표시만 됨
- 만약 같은 파일을 다시 쓰게 된다면 새 페이지에 쓰며 기존 페이지는 무효(Invalid)로 표시
삭제 (Block Erase)
- SSD는 페이지를 직접 지우지 못하고, 블록 전체를 지워야 함
- 삭제된 파일이 실제로 디스크에서 사라지지 않는 이유도 이 구조 때문
무효(Invalild)
- 이전에 쓰여 있던 페이지는 삭제가 아닌 무효 처리만 됨
- SSD는 무효화된 공간을 즉시 재사용하지 못하며 삭제되거나 혹은 GC 되기까지 유지
읽기 (Read)
- SSD는 페이지 단위로 빠르게 데이터를 읽을 수 있음
- 읽기는 다른 작업에 거의 영향을 주지 않지만 쓰기와 GC 중에는 속도 저하 가능
TRIM (OS -> SSD)
- OS가 SSD에 "이 파일은 삭제되었으니 정리해" 라고 알림
- SSD는 무효페이지를 추적하고 GC 타이밍을 판단
Garbage Collection
- 무효(Invalid) 페이지가 많은 블록을 골라서 유효 데이터만 새 블록에 복사하며 원래 블록은 지움
- 성능에 큰 영향을 주며 과도하면 병목 발생
[Block A] Page 1: 유효 데이터 Page 2: 삭제됨 Page 3: 삭제됨 Page 4: 유효 데이터
→ 새 데이터 쓰려면 이 블록을 "정리"해야 함
1. Page 1, 4 → 다른 블록으로 복사 2. Block A 전체 삭제 3. Block A는 다시 빈 블록으로 재사용 |
※ Wear Leveling
- 플래시 메모리는 지우기 횟수에 제한이 있음
- SSD 컨트롤러는 플래시 손상을 줄이기 위해 모든 블럭이 균등하게 사용되도록 데이터를 분산
※ 위과정을 SSD 컨트롤러가 자동으로 수행하며 사용자는 거의 느끼지 못하지만 내부적으로는 지속적으로 최적화가 진행됩니다.
쓰기 누적량이 많아짐(TBW 소모)
- 읽기/쓰기 모두 점진적 저하
- 셀마모로 인해 에러율 상승, ECC 보정 증가
TRIM 명령 미사용
- TRIM이 없으면 SSD는 어떤 페이지가 삭제된 건지 몰라 GC가 더 비효율적
- 쓰기 성능저하
- 삭제된 파일도 여전히 사용 중인 블록으로 인식
- 트림 활성화 체크 # fstrim -v /
Over-provisioning 부족
- 수명 및 성능 저하
- 컨트롤러가 재배치 및 최적화를 잘 수행하지 못함
- 일부 공간을 사용자가 할당하지 않고 남겨두면 수명과 성능에 좋음
DRAM-less SSD 사용
- 캐시 부족으로 성능 불안정
- 연속 쓰기 성능이 낮고 변동이 큼
- DRAM-less SSD는 비용이 저렴하지만 쓰기 성능과 안정성에서 불리