SSD의 수명 연장 기술, TRIM 커맨드

SSD의 수명 연장 기술, TRIM 커맨드

지난 기사에서 SSD의 데이터 쓰기와 읽기는 ‘페이지’라는 단위로 실행되지만, 데이터의 삭제는 여러 페이지가 모인 ‘블록’이라는 단위로 실행되어(즉, 쓰기와 삭제의 단위가 다르기에) 원래 장소에 새롭게 덧씌우는 게 원천적으로 불가능하다는 점, 그래서 좀 복잡한 방법으로 데이터를 삭제한다는 점을 설명했다.

이렇게 데이터 삭제가 복잡하게 진행되는 건 NAND 플래시 메모리는 데이터를 덧씌울 수 있는 회수가 정해져 있어서, 특정 셀에 덧씌우기가 집중되면 수명이 짧아질 수 있으므로 최대한 다른 셀에 분산되어 저장하는 과정, 즉 ‘웨어 레벨링’이 진행되기 때문이다. 웨어 레벨링은 SSD의 수명 연장에 큰 도움을 준다.

웨어 레벨링과 함께 SSD의 수명 연장, 최적화에 도움을 주는 주요 기능이 또 있다. 바로 TRIM Command(트림 커맨드, 이하 TRIM)다. 효율적인 웨어 레벨링과 가비지 컬렉션을 돕는 TRIM에 대해 알아보자.


네 줄 요약

  • Trim은 SSD의 내부 처리 효율을 높이기 위해 호스트 시스템이 삭제해도 좋은 데이터(무효화 데이터)의 정보를 SSD에 통지하는 명령이다.
  • SSD를 반복해서 사용하면, SSD에는 무효화된 데이터가 계속 늘어나는데, 이를 가비지 데이터라 하고, 가비지 데이터를 모아 삭제하는 작업이 가비지 컬렉션이다.
  • 가비지 컬렉션 과정에서 성능 저하를 최소로 줄이기 위해 오버프로비저닝이 진행된다.
  • SSD에는 사용자가 이용할 수 있는 공간 외에 여유 공간을 준비하는데, 이것이 기록 효율 향상을 위한 오버프로비저닝 공간이다.

TRIM은 무엇인가?

TRIM의 사전적 의미는 ATA(Advanced Technology Attachment)나 NVMe(Non-Volatile Memory Express)에서 정의된 Data Set Management 명령을 말한다. 보통 ‘TRIM’이라는 이름으로 알려져 있으며, 호스트 측 파일 시스템이 사용하지 않는(삭제해도 상관없는) 데이터의 정보를 SSD에 알리는 명령이라고 이해하면 된다.

SSD의 내부 처리 효율성을 높이기 위해 오버프로비저닝(Overprovisioning)을 사용하는 방법도 있는데, 사용자(OS 또는 소프트웨어)가 SSD에 TRIM을 명령하면 더욱 효율을 높일 수 있다. TRIM을 이해하기 위해 몇 가지 사전지식이 필요한데, 순서대로 설명하겠다.

파일 시스템에서 데이터 덧씌우기

우선 파일 시스템에서 데이터가 덧씌워지는 과정을 살펴보자.

호스트가 파일 시스템에서 파일을 삭제할 때, 우선 해당하는 데이터 부분을 파일 시스템의 인덱스에서 무효화하는 과정이 진행된다. 그리로 이렇게 무효화한 부분은 이후에 해당 위치에 데이터를 덧씌울 수 있는 것으로 인식된다. 그러나 이런 과정, 즉 무효화되어 데이터를 덧씌워도 된다는 정보가 SSD에 전달되지 않을 수도 있다.

덧씌워도 된다는 정보가 전해지지 않았으므로 SSD는 해당 데이터가 기록된 위치를 재사용(지우기 및 프로그래밍)하지 않는다. 이로 인해 SSD를 반복해서 사용(데이터 기록)하다 보면, SSD에는 호스트 측 파일 시스템에서 무효화한 데이터(가비지 데이터)가 계속 증가하게 된다.

파일 시스템은 해당 데이터를 무효화할 뿐이고, SSD는 여전히 파일 시스템이 관리하는 유효 데이터로 인식한다.

가비지 컬렉션

이제 SSD에서 데이터 덧씌우기를 비교해보자. SSD에 채용된 NAND 플래시 메모리는 다음과 같은 특징이 있다.

  • 이미 기록된 데이터는 덧씌우기가 불가능하다.
  • 데이터를 삭제할 때는 페이지(Page)가 아닌 블록(Block) 단위로만 삭제할 수 있다.

이런 특징으로 인해 데이터를 덧씌우려면 먼저 데이터를 지워서 자리를 비운 후 기록해야 한다. 그러나 데이터 삭제는 블록 단위로만 가능하므로 무효 데이터를 모아서 지우는 작업이 수행되는데, 이 작업을 가비지 컬렉션이라고 한다.

NAND 플래시 메모리는 데이터 읽기/쓰기와 삭제의 단위가 다르다.

페이지 단위로 기록이 가능한 SSD에서 데이터를 기록할 때는 언제가 됐건 가비지 컬렉션이 반드시 발생한다. 그러나 데이터를 삭제한 후 기록을 진행하면 효율이 저하되고 성능이 떨어지게 된다. 따라서 이미 지워져 비어있는 공간(Page)에 데이터를 기록하고, 오래된 데이터는 무효 데이터로 처리하여 성능 저하를 최소한으로 줄이는데, 이것을 오버프로비저닝이라고 한다.

오버프로비저닝 영역

앞서 설명했듯이 SSD에 데이터를 기록할 때는 이미 지워져 비어있는 공간이 필요하다. 이를 위해 SSD의 데이터 저장 영역에는 사용자가 이용할 수 있는 영역과 별도로 일반적으로 몇 퍼센트의 여분 영역(Overprovisioning, OP 영역)을 준비하는데, 이를 통해 SSD의 기록 효율 향상을 꾀하는 것이다.

실제로 SSD에 기록된 유효 데이터가 적을수록 사용자 데이터 영역과 OP 영역을 합쳐 기록용 여유 공간으로 사용할 수 있다. 여유 공간이 클수록 데이터의 덧씌우기 및 웨어 레벨링 등 SSD 내부에서의 데이터 처리가 효율적으로 실행된다.

즉, 이 말은 SSD에 파일 기록(또는 덧씌우기)을 반복하면 SSD에서 내부 처리를 위한 빈 영역이 줄어들기 때문에 효율이 저하된다는 뜻이기도 하다.

데이터 처리를 효율적으로 진행하기 위해 SSD에는 OP 공간이 설정된다.
다양한 용량으로 출시된 Kingston enterprise의 SSD 제품인 「DC500R」의 OP 공간을 조정했을 때 성능을 비교한 표. OP 공간을 32%로 잡았을 때가 7%로 잡았을 때보다 초당 랜덤 쓰기(IOPS)와 수명을 나타내는 TBW(Total Bytes Written)에서 우수한 성능을 나타낸다.

TRIM의 작동 원리

TRIM 명령을 구체적으로 살펴보면, 호스트에서 SSD에 파일 시스템상 무효 데이터를 알리는 방식으로 동작한다. 이를 통해 파일 시스템상 가비지 데이터를 SSD 내부에서 가비지 컬렉션의 대상으로 처리할 수 있게 된다.
TRIM 명령으로 SSD의 내부 정보를 업데이트하면 SSD는 다음 가비지 컬렉션 타이밍에 해당하는 불필요 부분을 OP 영역으로 사용할 수 있다. 이를 통해 기록 효율은 향상된다.

트림의 효과.
트림 커맨드를 이용했을 때 데이터 덧씌우기의 진행 과정.

TRIM에 대한 오해

TRIM을 실행하면 SSD 내부에서 데이터 삭제 과정이 진행되므로 과도한 사용은 바람직하지 않다고 생각하는 사람도 많다. 그러나 TRIM은 실제로 삭제 작업을 수행하는 것이 아니라 무효 데이터만 알리는 과정이다. 지우기 작업은 어디까지나 SSD에서 처리된다.

오히려 적절한 주기로 무효 데이터를 알리는 편이 SSD 쪽에서 가비지 컬렉션 및 웨어 레벨링과 같은 내부 처리를 효율적으로 수행하는 데 도움을 주기 때문에 기록 효율(WAF : Write Amplification Factor) 향상과 제품 수명 연장에 도움이 된다.