'''트림 명령'''( ATA 커맨드 에서는 '''TRIM''', SCSI 커맨드 에서는 '''UNMAP'''이라고 )을 사용하면 운영 체제에서 데이터 블록을 더이상 사용하지 않는다는 것을 솔리드 스테이트 드라이브 (SSD)에 알릴 있으므로 내부적으로 데이터를 지우는 것이 가능하다. TRIM은 SSD가 처음으로 고안된 직후에 도입되었다. SSD가 수행하는 낮은 수준의 작업은 하드 드라이브와 크게 다르기 때문에 운영 체제가 삭제 포맷과 같은 작업을 수행하는 일반적인 방식은 예상과는 달리 SSD의 기록 성능이 점진적으로 저하되었다. TRIM을 수행하면 SSD는 가비지 컬렉션을 보다 효율적으로 처리할 있다. 그렇지 않다면 향후 관련 블록에 대한 기록 동작이 느려질 있다. TRIM이 도입되기 전에도 이미 일부 드라이브를 초기 상태로 "재설정"하는 도구를 사용할 있었지만, 드라이브의 모든 데이터를 삭제하기 때문에 최적화 상태를 지속하기에는 실용적이지 않았다. 2014년까지 많은 SSD는 TRIM과 독립적으로 작동하는 내부적인 가비지 컬렉션 메커니즘을 가지고 있었다. 매커니즘은 트림을 지원하지 않은 운영 체제에서 성공적으로 성능을 유지했지만, 쓰기 증폭(WAF)의 증가와 플래시 셀의 마모와 연관된 단점이 있었다. TRIM은 SMR(Shingled Magnetic Recording 하드 드라이브에도 널리 사용된다. == 배경 == 많은 파일 시스템이 데이터 블록을 "사용하지 않음"으로 표시해 두는 방식으로 삭제 작업을 처리하기 때문에 저장 미디어(SSD와 기존 하드 드라이브)는 일반적으로 어떤 섹터/페이지가 실제로 사용되고 비어있는지 알지 못한다. 예를 들어 덮어쓰기 작업과 달리 삭제 작업을 때는 데이터를 포함하고 있는 섹터를 물리적으로 쓰는 과정이 수반되지 않는다. 일반 SSD는 사용되지않은 블록/섹터 목록을 포함하여 파일 시스템 구조에 대한 정보가 없기 때문에 저장 매체는 블록을 사용할 있게 되었다는 사실을 알지 못한다. 이것은 운영 체제에서 파일이 "삭제됨"으로 보고 되었음에도 불구하고 종종 삭제 취소 도구를 사용하여 전자 기계식 하드 디스크에서 파일을 복구할 있도록 한다. 이는 또한 운영 체제가 나중에 여유 공간으로 간주되는 섹터중 하나에 기록 작업을 수행할 저장 매체의 관점에서 효과적인 덮어 쓰기 작업이 된다는 것을 의미한다. 자기 디스크의 경우 기존 데이터 덮어쓰기는 섹터에 쓰는 것과 같지만, 일부 SSD가 가장 낮은 수준에서 작동하기 때문에 덮어쓰기는 데이터를 페이지에 쓰는 것과 비교하여 상당한 오버헤드가 발생하여 잠재적으로 쓰기 성능을 저하시킨다. SSD는 일반적으로 4~16kiB의 페이지로 그룹화되고 128~512페이지의 블록으로 그룹화되는 플래시 메모리 셀에 데이터를 저장합니다. 예: 512 kiB 블록은 각각 kiB의 128 페이지를 그룹화한다. NAND 플래시 메모리 셀은 비어 있는 경우에만 직접 있다. 데이터가 포함된 경우 기록 작업 전에 내용을 지워야 한다. SSD 쓰기 작업은 단일 페이지에 수행할 있지만 하드웨어 제약으로 인해 지우기 명령은 항상 전체 블록에 영향을 준다. 결과적으로 SSD의 페이지에 데이터를 쓰는 것은 매우 빠르지만 이전에 페이지를 덮어써야 한다면 속도가 상당히 느려진다. 다시 쓰기 전에 페이지의 셀을 지워야 하지만 전체 블록만 지울 있으므로 덮어쓰기는 읽기-지우기-수정-쓰기 주기로 동작합니다. 내용 전체 블록이 캐시에 저장된 다음 전체 블록이 SSD에서 지워지고 덮어쓴 페이지가 캐시된 블록에 기록되고 그런 다음에만 전체 업데이트된 블록이 플래시 매체에 기록될 있습니다. 현상을 쓰기 증폭이라고 합니다. == 작업 == TRIM 명령을 사용하면 운영 체제는 이상 유효한 데이터를 포함하지 않는 페이지를 SSD에 알릴 있다. 파일 삭제 작업의 경우 운영 체제는 파일의 섹터를 데이터를 위한 여유 공간이라 표기한 다음 TRIM 명령을 SSD로 보낸다. TRIM이후 SSD는 플래시 메모리 페이지에 데이터를 블록의 내용을 보존하지 않으므로 쓰기 증폭이 줄어들고(쓰기 횟수 감소) 쓰기 처리량이 높아진다(읽기-지우기-수정 시퀀스가 필요 없음). 따라서 드라이브 수명이 증가한다. SSD마다 명령을 약간 다르게 실행하기 때문에 성능은 다를 있다. TRIM은 SSD에 LBA 영역을 유효하지 않은 것으로 표시하도록 지시하고 해당 영역에 대한 후속 읽기는 의미 있는 데이터를 반환하지 않는다. 아주 짧은 시간 동안 데이터는 여전히 내부적으로 플래시에 머무를 있다. 그러나 TRIM 명령이 실행되고 가비지 수집이 수행된 후에는 데이터를 복구할 있을 가능성은 거의 없다. == 실행 == === 운영 체제 지원 === TRIM 명령은 드라이브에서 수행하고 운영 체제에서 요청하는 경우에만 유용하다. 아래 표는 주목할만한 운영 체제와 명령을 지원하는 번째 버전을 나타낸다. 또한 ATA 표준에 TRIM 명령을 추가하기 전에 설계된 이전 솔리드 스테이트 드라이브에는 펌웨어 업데이트가 필요하다. 그렇지 않으면 새로 내리는 명령이 무시된다. 하지만 TRIM을 지원하도록 모든 드라이브를 업그레이드할 있는 것은 아니다. TRIM 기능의 지원은 운영 체제의 특정 파일 시스템 드라이버가 수행할 있는 기능에 따라 달라진다. 디스크의 어느 부분이 여유 공간인지 알고 있는 프로그램만이 안전하게 명령을 실행할 있고 시스템 수준에서는 파일 시스템 드라이버 자체에서 오작동 하는 경향이 있다. 운영 체제 지원시작일 설명 드래곤플라이 BSD 2011-05 2011년 5월 프리BSD 2010-07 8.1 2010년 7월 8.1에서 블록 장치 계층에 지원이 추가되었다. 파일 시스템 지원은 UFS로 시작하여 FreeBSD 8.3 FreeBSD 9에 추가되었다. ZFS 트리밍 지원이 FreeBSD 9.2에 추가되었다. FreeBSD 10은 소프트웨어 RAID 구성에서 트리밍을 지원한다. NetBSD 2012-10 2012년 10월 리눅스 2008-12-25 2.6.28–25 2008년 12월 2.6.28에서 FTL NAND 플래시 장치에 대한 폐기 작업에 대한 초기 지원이 추가되었다. ATA TRIM 명령에 대한 지원이 2.6.33에 추가되었다. 모든 파일 시스템이 트림을 사용하는 것은 아니다. 트림 요청을 자동으로 발행할 있는 파일 시스템 중에는 ext4, Btrfs, FAT, GFS2, JFS, XFS, NTFS-3G 있다. 그러나 일부 배포판에서는 지원되는 SSD에서 예약된 트리밍을 위해 성능 문제로 인해 기본적으로 비활성화되어 있다. Ext3, NILFS2 OCFS2는 오프라인 트리밍을 수행하기 위한 ioctl을 제공한다. TRIM 사양은 트림 범위 목록을 지원해야 하지만 커널 3.0에서 트림은 느린 단일 범위에서만 호출된다. 많은 최신 Linux 배포판에서 systemd는 fstrim.timer 단위를 제공하므로 fstrim.timer를 fstrim.service가 매주 실행된다. OS 2011-06-23 10.6.8–23 2011년 6월 AHCI 블록 장치 드라이버가 장치가 TRIM 작업을 지원하는지 여부를 표시하는 기능을 얻었지만 TRIM 작업이 IOStorageFamily 파일 시스템을 통해 노출된 10.6.8까지 기능 자체에 액세스할 없었다. (HFS+) 지원이 추가되었다. 10.10.4까지 Mac OS X은 기본적으로 Apple 브랜드 SSD에 대해서만 TRIM을 활성화했다. 타사 유틸리티를 사용하여 다른 브랜드에서 사용할 있다. 이전 타사 TRIM 드라이버는 Yosemite 업데이트로 작동을 멈췄다. 이제 OS Yosemite에서 작동하는 업데이트된 드라이버가 있다. Mac OS 업데이트 10.10.4에서 Apple은 타사 SSD에서 TRIM을 활성화하는 사용할 있는 명령줄 유틸리티인 trimforce를 추가했다. 마이크로소프트 윈도우 2009–10 Windows Windows Server 2008 R2 2009년 10월 Windows 7은 처음에 Parallel ATA Serial ATA를 포함한 AT Attachment 제품군의 드라이브에 대해서만 TRIM을 지원했으며 장치 자체에서 명령을 수락하더라도 Storport PCI-Express SSD를 포함한 다른 장치에 대해서는 명령을 지원하지 않았다. 기본 Microsoft 드라이버를 사용하면 TRIM 명령이 AHCI 레거시 IDE/ATA 모드의 Windows 7에서 작동하는 것으로 확인되었다. Windows 이상 Windows 운영 체제는 NVMe 기반 PCI Express SSD의 트림을 지원하며, UASP(USB Attached SCSI Protocol)를 포함하여 SCSI 드라이버 스택을 사용하는 장치에 대해 직렬 ATA의 TRIM 명령과 완전히 유사한 unmap 명령을 지원한다. Microsoft는 PCIe SSD용 TRIM을 포함하여 NVM Express 지원을 추가하는 Windows 7용 업데이트를 출시했다. TRIM은 비활성화를 위해 스위치를 구현하는 ReFS NTFS에 대해 지원되는 것으로 알려져 있다. 출처는 다른 파일 시스템에 대한 TRIM 지원이 존재하는지 여부에 동의하지 않는다. 오픈솔라리스 2010-07 2010년 7월 기계적 인조 인간 2013-7 4.3 2013년 7월 24일 장치가 최소 1시간 동안 유휴 상태이고 80% 이상 충전된 경우(충전기에 연결된 경우 30%) 최대 24시간마다 fstrim 자동으로 실행한다. === RAID 문제 === 2017년 1월자로 대부분의 하드웨어 기반의 RAID 기술에서는 트림 TRIM 지원이 되지 않는다. 하지만, RAID 실행 소프트웨어에서 TRIM을 지원한다. ==== Windows ==== Windows 10은 RAID 볼륨을 구성할 "드라이브 최적화" 옵션을 사용하여 SSD RAID 볼륨에서 TRIM을 지원한다. ==== OS 운영체제 ==== macOS RAID 드라이버는 TRIM을 지원하지 않는다. 이것은 10.7부터 macOS 10.12.x까지의 모든 Mac OS 버전에 해당된다. 타사 SoftRAID® 애플리케이션을 사용할 타사 SSD 장치에 대한 TRIM 지원을 포함하여 RAID(0,1,4,5 10) 볼륨에 대해 TRIM이 지원된다. (참고: Apple SSD 장치용 TRIM은 터미널 명령 "sudo trimforce enable"을 사용하여 구체적으로 활성화해야 함) ==== 리눅스 ==== TRIM은 BIOS 지원 "가짜 하드웨어 RAID" 지원을 구현하고 이제 RAID 어레이에 있는 파일 시스템의 모든 TRIM 요청을 통과 하는 Linux 커널 dmraid의 2011년 1월 이후 릴리스에서 RAID 볼륨과 함께 사용할 있다. dmraid와 혼동될 있지만 둘은 엄연히 다른 것이다. Linux의 범용 소프트웨어 RAID 시스템인 mdraid는 시스템이 파일 시스템에서 mdtrim 유틸리티를 주기적으로 실행하도록 구성된 경우 RAID 어레이에서 배치 기반(라이브가 아닌 파일 삭제 시) TRIM을 실험적으로 지원한다. (네이티브 TRIM 지원이 없는 ext3과 같은 것들도). Red Hat Enterprise Linux 6.5 이상에서 mdraid와 같은 후기 버전의 Linux에서는 단순한 일괄 작업이 아닌 실시간 TRIM 명령을 통해 전달하는 것을 지원한다. 그러나 Red Hat은 대부분의 RAID 사용 SSD에서 RAID 레벨 1,4,5 그리고 6를 채택한 소프트웨어를 사용하지 않는 것을 권장한다. 왜냐하면 초기화 중에 대부분의 RAID 관리 유틸리티(예: Linux의 mdadm 체크섬(또는 RAID 10의 경우 드라이브 드라이브 확인)이 제대로 작동하는지 확인하기 위해 장치의 모든 블록에 기록하여 SSD가 예비 영역 이외의 모든 블록이 사용 성능이 크게 저하된다. 반면에 Red Hat은 SSD의 LVM RAID에 대해 RAID 또는 RAID 10의 사용을 권장한다. 이러한 레벨은 TRIM(Linux 용어로 "폐기")을 지원하고 LVM 유틸리티는 RAID 또는 RAID 10 볼륨을 생성할 모든 블록에 쓰지 않기 때문이다. 2010년 3월의 짧은 기간 동안 사용자들은 Intel Rapid Storage Technology(RST) 9.6 드라이버가 RAID 볼륨에서 TRIM을 지원한다고 믿었지만 인텔은 나중에 AHCI 모드 RAID 모드의 BIOS 설정에 대해 TRIM이 지원된다고 밝혔다. 하지만 드라이브가 RAID 볼륨의 일부인 경우에는 그렇지 않다. 2012년 8월 현재 Intel은 RST(Rapid Storage Technology) 11.2 드라이버가 포함된 시리즈 칩셋이 Microsoft Windows 7에서 RAID 0용 TRIM을 지원함을 확인했다. 인텔은 시리즈 칩셋에 대한 지원을 확인하지 않았지만 RAID 볼륨의 TRIM은 수정된 RAID 옵션 ROM 있는 하드웨어 지지자에 의해 Z68, P67 X79 칩셋에서 작동하는 것으로 나타났다. 시리즈 칩셋에 대한 공식 지원이 부족한 것은 기술적인 이유가 아니라 이나 소비자의 업그레이드를 유도하려는 시도나 승인 비용 때문이라고 추정된다. X79 칩셋이 있는 마더보드에서 수정된 옵션 ROM이 필요한 예외는 제조업체가 ROM 스위치를 추가한 경우이다. 이것은 BIOS/UEFI 내부에 있는 RST RST-E ROM을 모두 수반한다. 이를 통해 RST-E ROM 대신 RST ROM을 사용할 있으므로 TRIM이 작동할 있다. 인텔은 ROM과 동일한 버전의 드라이버를 사용하여 최상의 성능을 얻을 있다고 말한다. 예를 들어 BIOS/UEFI에 11.0.0.0m 옵션 ROM이 있는 경우 11.x 버전 드라이버를 사용해야 한다. === 지원되지 않는 파일 시스템 활성화 === 파일 시스템이 자동으로 TRIM을 지원하지 않는 경우 일부 유틸리티는 수동으로 TRIM명령을 보낼 있다. 일반적으로 사용 가능한 블록을 결정한 다음 목록을 일련의 TRIM명령으로 드라이브에 전달한다. 이러한 유틸리티는 다양한 제조업체(예: Intel, G.Skill 또는 일반 유틸리티(예: v9.17 이후 Linux의 hdparm "wiper", 또는 위에서 언급한 mdtrim ). hdparm과 mdtrim은 모두 파일 시스템에 파일을 할당하고 할당된 위치를 확인하여 여유 블록을 찾는다. 모든 운영 체제에서 드라이브는 컴퓨터가 블록에 모두 0을 기록할 때를 감지하고 블록을 기록하는 대신 해당 블록을 할당 해제(트림)할 있다. 할당 해제된 블록을 읽을 항상 0이 반환되는 경우 단축키는 모두 0인 블록의 빠른 쓰기(및 읽기)의 경우를 제외하고 사용자에게 투명하게 공개된다. 이에 더하여 사용되지 않는 영역에 빠르게 쓰는 일반적인 이점도 있다. 운영 체제는 파일이나 여유 공간을 "삭제" 하기 위해 모두 0을 쓰지 않지만 일부 유틸리티는 그렇게 한다. == 하드웨어 지원 == === ATA === TRIM 명령 사양 INCITS( International Committee for Information Technology Standards )의 T13 기술 위원회가 주도하는 ATA( AT Attachment 인터페이스 표준의 일부로 표준화되었다. TRIM은 ACS-2 사양 초안의 DATA SET MANAGEMENT 명령(opcode 06h)에 따라 구현된다. ATA 표준은 병렬(IDE, PATA) 직렬(SATA) ATA 하드웨어에서 모두 지원된다. 원래 ATA TRIM 명령의 단점은 대기열에 넣을 없는 명령으로 정의되어있기 때문에 대기열에 있는 읽기 쓰기 작업의 일반 작업 부하와 쉽게 섞일 없다는 것이다. SATA 3.1은 문제를 해결하기 위해 대기 중인 TRIM 명령을 도입했다. ATA IDENTIFY DEVICE 명령에서 반환된 SATA 워드 69 169에 의해 정의된 다양한 유형의 TRIM이 있다. 비결정적 TRIM: TRIM 논리 블록 주소 (LBA)에 대한 읽기 명령은 다른 데이터를 반환할 있다. 결정적 TRIM(DRAT): TRIM 이후 LBA에 대한 모든 읽기 명령은 동일한 데이터를 반환하거나 결정적이 된다. TRIM 결정적 읽기 0(RZAT): TRIM LBA에 대한 모든 읽기 명령은 0을 반환해야 한다. 드라이브가 지원할 있는 DATA SET MANAGEMENT 명령당 최대 512바이트 블록 수를 설명하는 SATA Word 105에 추가 정보가 있다. 일반적으로 기본값은 8(또는 4kB)이지만 많은 드라이브는 TRIM에 대한 Microsoft Windows 하드웨어 요구 사항을 충족하기 위해 값을 1로 줄인다. 해당 명령 완료 시간은 20ms 또는 8ms ×(LBA 범위 항목 수)를 초과하지 않고 항상 600ms 미만이어야 한다. 개별 LBA 범위를 LBA 범위 항목이라고 하며 8바이트로 표시된다. LBA는 LBA 범위 항목의 처음 6바이트로 표시되고 범위 길이는 나머지 2바이트로 표시되며 0부터 시작한다(예: 0=0 1=1)입니다. 2바이트 범위 길이가 0이면 LBA 범위 항목이 패딩으로 삭제됩니다. 즉, 장치가 지원하는 TRIM 범위의 512바이트 블록에 대해 최대값은 32MB 또는 2GB의 64개 범위이다. 장치가 8에서 SATA Word 105를 지원하는 경우 단일 TRIM(DATA SET MANAGEMENT) 명령으로 16GB를 트리밍할 있어야 한다. === SCSI === SCSI는 UNMAP 플래그 세트와 함께 UNMAP 명령(TRIM의 전체 아날로그) WRITE SAME 명령(10 16 변형)을 제공한다. === SD/MMC === MultiMediaCard SD ERASE(CMD38) 명령은 ATA TRIM 명령과 유사한 기능을 제공하지만 지워진 블록을 또는 1로 덮어써야 한다. eMMC 4.5는 폐기된 블록의 내용이 불확실한 것으로 간주될 있다는 점에서 ATA TRIM과 보다 밀접하게 일치하는 "폐기" 하위 작업을 추가로 정의한다(즉, "상관하지 않는다"). === NVM Express === NVM Express 명령 세트에는 블록 범위 세트의 스토리지 장치에 호스트의 의도를 암시하기 위한 ''일반 데이터 세트 관리 명령이 있다.'' 작업 하나인 ''deallocate는'' 트림을 수행한다. 또한 ''할당 해제'' 힌트를 제공하고 디스크가 TRIM을 수행하고 0을 반환할 있도록 ''하는 Write Zeroes 명령이 있다.'' == 단점 == 일부 거부 가능한 암호화 체계에는 전체 디스크를 임의의 쓰레기처럼 보이게 만드는 것이 포함된다. TRIM을 사용하면 생성된 all-zero(또는 all-one) 블록이 어떤 블록이 사용되는지 쉽게 나타내므로 그럴듯한 거부 가능성 계층을 무효화한다. TRIM을 비활성화하는 것도 의심스러울 있다는 주장이 있다. TRIM 명령의 원래 버전은 T13 소위원회에 의해 대기열에 없는 명령으로 정의되었으며, 따라서 예를 들어 파일 시스템 삭제 명령 후에 전송되는 경우 부주의하게 사용하면 엄청난 실행 페널티가 발생할 있다. 대기열에 없는 명령의 특성으로 인해 드라이버는 먼저 모든 미해결 명령이 완료될 때까지 기다렸다가 TRIM 명령을 실행한 다음 일반 명령을 재개해야 한다. TRIM은 SSD의 펌웨어에 따라 완료하는 많은 시간이 걸릴 있으며 가비지 수집 주기를 유발할 수도 있다. 페널티는 시스템 사용률이 최소인 시간에 이러한 일괄 작업을 예약 하여 모든 파일 삭제 트리밍하는 대신 정기적으로 일괄 처리 TRIM을 수행하는 솔루션에서 최소화할 있다. TRIM 단점은 Queued TRIM 명령의 도입으로 직렬 ATA 개정판 3.1에서 극복되었다. 대기 중인 TRIM에 대한 지원을 잘못 보고하거나 구현에 심각한 버그가 있는 결함이 있는 드라이브 펌웨어는 여러 장치, 특히 Micron Crucial의 M500 Samsung의 840 850 시리즈에서 심각한 데이터 손상과 관련이 있다. 데이터 손상은 Linux 운영 체제(2015년 7월 1일 현재 대기열 트림 지원이 있는 유일한 OS)에서 확인되었다. 이러한 장치는 Linux 커널의 블랙리스트에 있다.대기열에 포함되지 않은 TRIM 명령을 강제로 보내는 대기 중인 TRIM 명령 대신 다음 드라이브에 공장에서 재인증된 SSD를 포함한 모든 펌웨어 버전을 사용하는 Micron/Crucial M500 펌웨어 버전 MU01을 사용하는 Micron M510 펌웨어 버전 MU01을 사용하는 Micron/Crucial M550 펌웨어 버전 MU01을 사용하는 Crucial MX100 모든 펌웨어 버전을 사용하는 Samsung 840 850 시리즈 SSD 파일은 또한 TRIM이 발행될 잘못된 블록이 데이터를 잃게 하기 때문에 일반적으로 TRIM에 대해 SuperSSpeed S238을 블랙리스트에 추가한다. also has whitelist to list SSDs that are reliably known to the subsystem's maintainers to correctly implement the DRAT and RZAT flags rather than ignoring them, as many drives do. The whitelisted drives are as follows: 크루셜(Crucial) SSD Intel SSD 510을 제외한 Intel SSD 마이크론(Micron) SSD 삼성(Samsung) SSD 씨게이트(Seagate) SSD == 참고문헌 == == 외부 링크 == ''From write() down to flash chips'' TRIM 명령으로 SSD가 파일 시스템에서 사용하지 않는 데이터를 지우는 방법에 대한 설명 ''TRIM Command White Paper'' 명령의 목적과 동작을 설명하는 백서 Fusion-io 특허 "Apparatus, system, and method for redundant write caching" 분류:직렬 ATA 분류:SCSI