Interested Article - Trim (команда для накопителей)
- 2020-01-25
- 1
Trim ( англ. to trim — подрезать) — команда интерфейса ATA , позволяющая операционной системе уведомить твердотельный накопитель о том, какие блоки данных (страницы) не несут полезной нагрузки и их можно не хранить физически.
Trim входит в спецификацию интерфейса ATA , стандартизацией которого занимается группа T13 в составе .
Введена вскоре после появления твердотельных накопителей (SSD), чтобы сделать их конкурентоспособной альтернативой традиционным накопителям на жёстких магнитных дисках (HDD). Из-за того, что на внутреннем уровне реализация операций в SSD существенно отличается от реализации тех же операций в механических жёстких дисках, обычные методы операционных систем для таких операций, как удаление файлов и форматирование диска (не обращаясь непосредственно к затрагиваемым секторам или страницам на накопителе), приводят к прогрессирующему ухудшению производительности операций записи на SSD .
Применение Trim позволяет SSD уменьшить влияние сборки мусора , которая в противном случае в дальнейшем выразится падением производительности операций записи в затронутые секторы . (Хотя утилиты для «сброса» некоторых накопителей в начальное состояние были уже доступны ранее появления Trim, они, помимо прочего, удаляли все данные на накопителе, что делало их практически неприменимыми для проведения оптимизации .)
Уровень файловых систем
Ввиду особенностей методов удаления, обычно применяемых в файловых системах , накопители не знают, какие секторы и страницы действительно используются, а какие могут считаться незанятыми.
Операции удаления обычно ограничиваются пометкой блоков данных как «неиспользуемых» в файловой системе . В отличие от, например, операции перезаписи, удаление не приведёт к физической записи в затрагиваемые секторы, содержащие данные. Поскольку накопитель не имеет доступа к структурам файловой системы — таким как список неиспользуемых кластеров — накопитель остаётся в неведении об освобождении блоков.
Хотя это часто позволяло восстановить удалённые данные на традиционных HDD , несмотря на то, что они были отмечены как «удалённые» операционной системой, также это означало, что когда позже операционная система произведёт операцию записи в один из секторов, считающихся свободным местом, эта операция будет считаться операцией перезаписи с точки зрения накопителя. Для традиционных жёстких дисков эта операция никак не отличается от записи в незанятый сектор, для SSD из-за выравнивания износа перезапись данных существенно отличается от записи в незанятый сектор (каждая запись в тот же логический сектор будет произведена в разные физические секторы), потенциально ухудшая производительность дальнейших операций записи .
Физический уровень хранения
SSD хранят данные в ячейках флеш-памяти , сгруппированных (в MLC ) в «страницы» (обычно по 4 Кбайт каждая), которые, в свою очередь, сгруппированы в блоки (обычно 128 страниц или 512 Кбайт суммарно) .
Ячейки NAND-флеш-памяти могут быть непосредственно записаны лишь в том случае, когда они чисты. В случае, когда они хранят данные, содержимое ячеек должно быть очищено, прежде чем в них будут записаны новые данные. В SSD операция записи может быть проделана только для страниц, однако из-за аппаратных ограничений команда удаления всегда выполняется на весь блок . В результате, запись на SSD-носитель выполняется очень быстро до тех пор, пока существуют чистые страницы, но значительно замедляется, если необходимо очищать предварительно записанные страницы.
Так как очистка ячеек в странице необходима перед тем, как в них можно будет записывать снова, но только целый блок может быть очищен, процесс перезаписи инициирует цикл чтение-очистка-модификация-запись : содержимое целого блока должно быть сохранено в кеше перед тем, как оно может быть удалено с накопителя, перезаписываемые данные модифицируются в кеше и только после этого целый блок (с обновлённой страницей) записывается на накопитель. Это явление известно как .
Уровень контроллера
В SSD-контроллерах производители используют различные техники для оптимального распределения операций записи по всему флеш-накопителю . Это делается не только для того, чтобы оптимизировать скорость путём минимизации усиления записи, но также для увеличения продолжительности жизни флеш-ячеек ( ), так как обычные MLC-флеш-ячейки выдерживают 3000—5000 циклов записи . Другой подход заключается в том, чтобы использовать лишнюю (резервную) память, не задекларированную операционной системе и даже BIOS , для предоставления чистых страниц для операций записи как можно дольше перед тем, как начать перезаписывать другие страницы .
Эффективность этих методов по большей части зависит от обмена информацией между ОС и контроллером SSD о том, какие страницы могут считаться занятыми, а какие — свободными. Традиционно большинство ОС не информируют накопители об удалённых секторах и страницах, что не позволяет контроллерам SSD оптимально распределять свободное пространство. Команда Trim была введена чтобы исправить это, очищая неиспользуемые ячейки до того, как в них будет произведена запись, таким образом уменьшая время доступа .
Так как команда полностью стирает данные в ячейках, восстановить из них данные обычно не представляется возможным .
Trim не всегда поддерживается в RAID -массивах .
Поддержка команды операционными системами и накопителями
Для старых твердотельных накопителей, произведённых до добавления команды Trim в стандарт ATA, необходимо обновление прошивки — в противном случае команда будет ими игнорироваться. Команда Trim поддерживается также не всеми операционными системами .
Операционная система | Поддержка |
---|---|
Windows 8 и выше | Поддерживается с финального релиза (октябрь 2012) |
Windows Server 2012 | Поддерживается с финального релиза (октябрь 2012) |
Windows 7 | Поддерживается с финального релиза (октябрь 2009) |
Windows Server 2008 R2 | Поддерживается с финального релиза (октябрь 2009) |
Linux 2.6.33 | Поддерживается с февраля 2010 , ioctl BLKDISCARD |
OpenSolaris | Поддерживается с июля 2010 |
FreeBSD 8.3, 9.2, 10.0 | Поддерживается с UFS , поддерживается с ZFS . |
Mac OS X | Поддерживается (с версии 10.10.4 для любых SSD, до этого только SSD поставляемые Apple ) |
Android | Начиная с версии 4.3 в систему была добавлена поддержка функции fstrim, которая является аналогом Trim |
Ubuntu | Поддерживается начиная с Ubuntu 14.04. |
Другие методы и случаи
В некоторых случаях, когда Trim не поддерживается операционной системой, существуют утилиты , позволяющие отправлять эту команду «вручную». Обычно такие программы с помощью средств операционной системы составляют список свободных блоков и передают его накопителю в виде последовательности команд Trim. Такие продукты существуют как в виде универсальных утилит ( hdparm версии 9.17 и выше), так и в виде программного обеспечения для отдельных типов накопителей (Intel , G.Skill ).
Аналогом команды Trim для SCSI являются команды Unmap и Write same .
Примечания
- (англ.) . INCITS T13 . INCITS. Дата обращения: 8 июля 2009. 30 июня 2012 года.
- Shimpi, Anand Lal. (англ.) 4. AnandTech.com (18 марта 2009). Дата обращения: 19 июня 2010. 30 июня 2012 года.
- ↑ Shimpi, Anand Lal. (2009-03-18). p. 10.
- Shimpi, Anand Lal. (2009-03-18). p. 11.
- ↑ Savill, John. (англ.) . WindowsITPro (21 апреля 2009). Дата обращения: 19 июня 2010. 30 июня 2012 года.
- ↑ Shimpi, Anand Lal. (2009-03-18). p. 7.
- ↑ Shimpi, Anand Lal. (2009-03-18). p. 5.
- Shimpi, Anand Lal. (2009-03-18). p. 8.
- . Дата обращения: 20 сентября 2010. 15 ноября 2010 года.
- ↑ Shimpi, Anand Lal. (2009-03-18). p. 6.
- (англ.) . TechGage . TechGage (5 марта 2010). Дата обращения: 16 апреля 2010. 30 июня 2012 года.
- Gareth Halfacree. (англ.) . bit-tech.net (23 марта 2010). Дата обращения: ноябрь 2010. 30 июня 2012 года.
- (англ.) . MSDN (9 мая 2009). Дата обращения: 12 августа 2010. 30 июня 2012 года.
- (англ.) . Microsoft downloads . Microsoft Corporation (12 ноября 2008). Дата обращения: 8 июля 2009. 30 июня 2012 года.
- (англ.) . Windows IT Pro. Дата обращения: 1 сентября 2010. 2 января 2010 года.
- (англ.) . Kernel Newbies. Дата обращения: 1 сентября 2010. Архивировано из 30 июня 2012 года.
- (29 июля 2010). 30 июня 2012 года.
- (29 декабря 2010). 30 июня 2012 года.
- (23 сентября 2012). 25 октября 2012 года.
- (5 мая 2011). Архивировано из 30 июня 2012 года.
- Daniel Eran Dilger. (англ.) . appleinsider.com (4 марта 2011). Дата обращения: 2011-3-7. 30 июня 2012 года.
- . . Дата обращения: 7 января 2021. 9 января 2021 года.
- (рус.) . fullhub.ru . Дата обращения: 7 января 2021. 10 января 2021 года.
- (англ.) (pdf). Intel Corporation. Дата обращения: 23 января 2010. 30 июня 2012 года.
- (англ.) . XtremeSystems. Дата обращения: 23 января 2010. 30 июня 2012 года.
- . 30 июня 2012 года.
Ссылки
- Louis Gerbarg. (англ.) . devwhy.com (4 августа 2009). — Описание принципа удаления неиспользуемых данных. Дата обращения: 24 ноября 2010. 26 мая 2012 года.
- Nathan Edwards. (англ.) . Maximum PC (2 декабря 2009). — Описание команды. Дата обращения: 24 ноября 2010. 26 мая 2012 года.
- 2020-01-25
- 1