Обрезка (вычисление)

редактировать

A команда обрезки (известная как TRIM в наборе команд ATA и UNMAP в наборе команд SCSI ) позволяет операционной системе сообщать твердотельному диску (SSD), который блокирует данных больше не считаются используемыми и могут быть очищены внутри.

Обрезка была введена вскоре после появления SSD. Поскольку низкоуровневая работа твердотельных дисков значительно отличается от жестких дисков, типичный способ, которым операционные системы обрабатывают такие операции, как удаление и форматирование, привел к непредвиденному прогрессивному снижению производительности операций записи на твердотельные диски. Обрезка позволяет SSD более эффективно обрабатывать сборку мусора, что в противном случае замедлит будущие операции записи в задействованные блоки.

Хотя инструменты для «сброса» некоторых дисков в новое состояние уже были доступны перед введением обрезки они также удаляют все данные на диске, что делает их непрактичным использование для текущей оптимизации. К 2014 году многие твердотельные накопители имели механизмы внутренней фоновой сборки мусора, которые работали независимо от обрезки. Несмотря на то, что это успешно сохраняло их производительность даже в операционных системах, которые не поддерживали обрезку, у него были связанные недостатки: повышенное усиление записи и износ ячеек флэш-памяти.

Содержание
  • 1 Предпосылки
  • 2 Эксплуатация
  • 3 Реализация
    • 3.1 Поддержка операционной системы
    • 3.2 Проблемы с RAID
      • 3.2.1 Windows
      • 3.2.2 macOS
      • 3.2.3 Linux
    • 3.3 Включение неподдерживаемых файловых систем
  • 4 Поддержка оборудования
    • 4.1 ATA
    • 4.2 SCSI
    • 4.3 SD / MMC
    • 4.4 NVM Express
  • 5 Недостатки
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Предпосылки

Из-за того, что многие файловые системы обрабатывают операции удаления, помечая блоки данных как «неиспользуемые», носители данных (твердотельные накопители, а также традиционные жесткие диски) обычно не знаю, какие сектора / страницы действительно используются, а какие можно считать свободным пространством. В отличие от (например) операции перезаписи, удаление не будет включать физическую запись в секторы, содержащие данные. Поскольку обычный SSD не знает структур файловой системы, включая список неиспользуемых блоков / секторов, носитель данных не знает, что блоки стали доступными. Хотя это часто позволяет инструментам восстановить файлы для восстановления файлов с электромеханических жестких дисков, несмотря на то, что файлы сообщаются операционной системой как «удаленные», это также означает, что когда операционная система позже выполнит операция записи в один из секторов, который считается свободным пространством, фактически становится операцией перезаписи с точки зрения носителя данных. Для магнитных дисков перезапись существующих данных ничем не отличается от записи в пустой сектор, но из-за того, что некоторые твердотельные накопители работают на самом низком уровне, перезапись приводит к значительным накладным расходам по сравнению с записью данных на пустую страницу, что потенциально снижает производительность записи.

SSD хранят данные в ячейках флэш-памяти, которые сгруппированы в страницы, как правило, от 4 до 16 kiB, сгруппированных вместе в блоки размером обычно от 128 до 512 страниц. Пример: блоки по 512 кБ, которые группируют 128 страниц по 4 кБ каждый. Флэш-память NAND ячейки могут быть записаны напрямую, только когда они пусты. Если они содержат данные, их содержимое необходимо стереть перед операцией записи. Операция записи SSD может выполняться на одной странице, но из-за аппаратных ограничений команды стирания всегда влияют на целые блоки; следовательно, запись данных на пустые страницы на SSD происходит очень быстро, но значительно замедляется, когда ранее записанные страницы необходимо перезаписать. Поскольку перед повторной записью требуется стирание ячеек на странице, но могут быть удалены только целые блоки, перезапись инициирует цикл чтения-стирания-изменения-записи: содержимое всего блока сохраняется в кеше., затем весь блок стирается с SSD, затем перезаписанная страница записывается в кэшированный блок, и только после этого весь обновленный блок может быть записан на флэш-носитель. Это явление известно как усиление записи.

Операция

Команда TRIM позволяет операционной системе уведомлять SSD о страницах, которые больше не содержат действительных данных. Для операции удаления файла операционная система пометит секторы файла как свободные для новых данных, а затем отправит команду TRIM на SSD. После обрезки SSD не сохранит содержимое блока при записи новых данных на страницу флэш-памяти, что приведет к меньшему усилению записи (меньшему количеству записей), более высокой пропускной способности записи (нет необходимости в последовательности чтения-стирания-изменения), таким образом увеличивая срок службы привода.

Различные твердотельные накопители реализуют команду по-разному, поэтому производительность может различаться.

TRIM сообщает SSD, чтобы он пометил область LBA как недопустимую, и последующие чтения из области не будут вернуть любые значимые данные. В течение очень короткого времени данные все еще могут находиться на флэш-памяти внутри. Однако после выполнения команды TRIM и выполнения сборки мусора маловероятно, что даже криминалист сможет восстановить данные.

Реализация

Поддержка операционной системы

Команда TRIM полезна только в том случае, если диск реализует ее и ее запрашивает операционная система. В таблице ниже указаны все известные операционные системы и первая версия, поддерживающая команду. Кроме того, более старые твердотельные накопители, разработанные до добавления команды TRIM в стандарт ATA, потребуют обновления прошивки, в противном случае новая команда будет проигнорирована. Однако не каждый привод можно модернизировать для поддержки обрезки.

Поддержка TRIM также зависит от того, на что способен конкретный драйвер файловой системы в операционной системе, поскольку только программа с пониманием того, какие части диска являются свободными, может безопасно выполнить команду, и на системном уровне эта способность, как правило, заложена в самом драйвере файловой системы.

Операционная системаПоддерживается сПримечания
DragonFly BSD 2011-05Май 2011
FreeBSD 2010-078.1 - июль 2010Поддержка была добавлена ​​на уровне блочных устройств в 8.1. Поддержка файловой системы была добавлена ​​в FreeBSD 8.3 и FreeBSD 9, начиная с UFS. Поддержка обрезки ZFS была добавлена ​​в FreeBSD 9.2. FreeBSD 10 поддерживает обрезку программных конфигураций RAID.
NetBSD 2012-10Октябрь 2012
Linux 2008-12-252.6.28–25 декабря 2008Первоначальная поддержка операций сброса была добавлена ​​для устройств FTL NAND flash в версии 2.6.28. Поддержка команды ATA TRIM была добавлена ​​в 2.6.33.

Не все файловые системы используют обрезку. К файловым системам, которые могут автоматически выдавать запросы обрезки, относятся Ext4, Btrfs, FAT, GFS2, JFS, XFS и NTFS-3G. Однако в некоторых дистрибутивах это отключено по умолчанию из-за проблем с производительностью в пользу плановой обрезки на поддерживаемых твердотельных накопителях. Ext3, NILFS2 и OCFS2 предлагают ioctls для автономной обрезки. Спецификация TRIM требует поддержки списка диапазонов обрезки, но начиная с ядра 3.0 обрезка вызывается только для одного диапазона, который работает медленнее.

macOS 2011-06-2310.6.8–23 июня 2011Хотя драйвер блочного устройства AHCI получил возможность отображать, поддерживает ли устройство операцию TRIM в 10.6.6 (10J3210), сама функциональность оставалась недоступной до 10.6.8, когда операция TRIM была добавлена ​​поддержка IOStorageFamily и файловой системы (HFS +). До 10.10.4 в Mac OS X функция TRIM была изначально включена только для твердотельных накопителей Apple; доступны сторонние утилиты, позволяющие использовать его для других брендов. Старые сторонние драйверы TRIM перестали работать после обновления Yosemite. Теперь существуют обновленные драйверы, которые работают с OS X Yosemite. В Mac OS X с обновлением 10.10.4 Apple добавила утилиту командной строки trimforce, которую можно использовать для включения TRIM на твердотельных накопителях сторонних производителей.
Microsoft Windows 2009–10 Windows 7 и Windows Server 2008 R2 - октябрь 2009 г.Windows 7 изначально поддерживала TRIM только для дисков из семейства AT Attachment, включая Parallel ATA и Serial ATA, и не поддерживала это для любых других устройств, включая твердотельные накопители Storport PCI-Express, даже если само устройство примет команду. Подтверждено, что с родными драйверами Microsoft команда TRIM работает в Windows 7 в AHCI и устаревшем режиме IDE / ATA. Windows 8 и более поздние версии Операционные системы Windows поддерживают обрезку для твердотельных накопителей PCI Express на основе NVMe и команду unmap, которая является полным аналогом команды TRIM из Serial ATA для устройств, использующих стек драйверов SCSI, включая Протокол USB Attached SCSI (UASP). Microsoft выпустила обновление для Windows 7, KB2990941, которое при интеграции в программу установки Windows 7 с помощью DISM добавляет поддержку NVM Express, включая TRIM для твердотельных накопителей PCIe.

TRIM, как известно, поддерживается для ReFS и NTFS, оба из которых реализуют переключатель DisableDeleteNotify для его отключения. Источники не согласны с тем, существует ли поддержка TRIM для других файловых систем.

OpenSolaris 2010-07July 2010
Android 2013-74.3 - 24 июля 2013Запускает fstrimавтоматически каждые 24 часа, если на устройстве простаивал не менее часа и заряжен не менее чем на 80% (30% при подключении к зарядному устройству).

Проблемы с RAID

По состоянию на январь 2017 года поддержка команды TRIM не реализована в большинстве аппаратные технологии RAID. Однако реализации программного RAID часто включают поддержку TRIM.

Windows

Windows 10 предлагает поддержку TRIM в томах SSD RAID с использованием параметра «оптимизировать диски» при настройке тома RAID.

macOS

Драйвер macOS RAID не поддерживает TRIM. Это верно для всех версий Mac OS X от 10.7 до macOS 10.12.x.

TRIM поддерживается для томов RAID (0,1,4,5 и 10) при использовании стороннего приложения SoftRAID®, включая поддержку TRIM на устройствах SSD сторонних производителей. (Примечание: TRIM для устройств SSD сторонних производителей должен быть специально включен с помощью команды терминала "sudo trimforce enable")

Linux

TRIM доступен с томами RAID в выпусках после января 2011 г. ядра Linux dmraid, который реализует поддержку «поддельного аппаратного RAID» с помощью BIOS и который теперь проходит через любые запросы TRIM от файловой системы, которая находится в массиве RAID.

Не использовать следует путать с dmraid, универсальной программной RAID-системой Linux, mdraid, экспериментальная поддержка пакетной (а не активной, при удалении файла ) TRIM на массивах RAID 1, когда системы настроены на периодический запуск утилиты mdtrim в файловых системах (даже таких, как ext3 без встроенной поддержки TRIM). В более поздних версиях Linux, например Red Hat Enterprise Linux 6.5 и более поздних версий, mdraid поддерживает фактическую передачу команд TRIM в реальном времени, а не просто как пакетное задание.

Однако Red Hat не рекомендует использовать программные уровни RAID 1, 4, 5 и 6 на SSD с большинством технологий RAID, потому что во время инициализации большинство утилит управления RAID (например, Linux mdadm ) записывают во все блоки на устройствах, чтобы гарантировать, что контрольные суммы (или -drive проверяет, в случае RAID 1 и 10) работает правильно, заставляя SSD полагать, что все блоки, кроме резервной области, используются, что значительно снижает производительность.

С другой стороны, красный Hat рекомендует использовать RAID 1 или RAID 10 для RAID LVM на твердотельных накопителях, поскольку эти уровни поддерживают TRIM («сброс» в терминологии Linux), а утилиты LVM не записывают данные во все блоки при создании Том RAID 1 или RAID 10.

В течение короткого времени в марте 2010 года пользователи были уверены, что технология Intel Rapid Storage Technology (RST) 9. 6 поддерживали TRIM на томах RAID, но позже Intel пояснила, что TRIM поддерживался для настроек BIOS режима AHCI и режима RAID, но не в том случае, если диск был частью тома RAID.

По состоянию на август 2012 года Intel подтверждает, что наборы микросхем серии 7 с драйверами Rapid Storage Technology (RST) 11.2 поддерживают TRIM для RAID 0 в Microsoft Windows 7. Хотя Intel не подтвердила поддержку наборов микросхем серии 6, TRIM на томах RAID 0 имеет энтузиасты аппаратного обеспечения продемонстрировали работу на чипсетах Z68, P67 и X79 с модифицированным дополнительным ПЗУ RAID . Предполагается, что отсутствие официальной поддержки чипсетов 6-й серии связано с затратами на проверку или попыткой побудить потребителей к обновлению, а не по техническим причинам.

Исключением из необходимости модифицированного дополнительного ПЗУ на материнских платах с чипсетом X79 является добавление производителем переключателя ПЗУ; это влечет за собой нахождение как RST, так и RST-E ROM внутри BIOS / UEFI. Это позволяет использовать RST ROM вместо RST-E ROM, позволяя TRIM функционировать. Intel отмечает, что наилучшей производительности можно добиться, используя драйвер той же версии, что и ПЗУ; например, если BIOS / UEFI имеет дополнительное ПЗУ 11.0.0.0m, следует использовать драйвер версии 11.x.

Включение неподдерживаемых файловых систем

Если файловая система не поддерживает TRIM автоматически, некоторые утилиты могут отправлять команды обрезки вручную. Обычно они определяют, какие блоки свободны, а затем передают этот список в виде серии команд обрезки на привод. Эти утилиты доступны от различных производителей (например, Intel, G.Skill) или как общие утилиты (например, Linux hdparm "wiper" с версии 9.17 или mdtrim, как упоминалось выше). И hdparm, и mdtrim находят свободные блоки, выделяя большой файл в файловой системе и определяя, какому физическому расположению он был назначен.

В любой операционной системе накопитель может определить, когда компьютер записывает все нули в блок, и освободить (обрезать) этот блок вместо записи блока нулей. Если при чтении освобожденного блока всегда возвращаются нули, этот ярлык прозрачен для пользователя, за исключением более быстрой записи (и чтения) нулевых блоков в дополнение к обычному преимуществу более быстрой записи в неиспользуемые области. Операционные системы не записывают все нули в «стереть» файлы или свободное пространство, но некоторые утилиты это делают.

Поддержка оборудования

ATA

Спецификация команды TRIM была стандартизирована как часть стандарта интерфейса AT Attachment (ATA) под руководством Технического комитета T13 Международного комитета по стандартам информационных технологий (INCITS). TRIM реализуется командой DATA SET MANAGEMENT (код операции 06h) чернового варианта спецификации ACS-2. Стандарт ATA поддерживается как параллельным (IDE, PATA), так и последовательным (SATA) оборудованием ATA.

Недостатком исходной команды ATA TRIM является то, что она была определена как команда без очереди, и поэтому ее нельзя было легко смешать с обычной рабочей нагрузкой операций чтения и записи в очереди. SATA 3.1 представила команду TRIM в очереди, чтобы исправить это.

Существуют различные типы TRIM, определенные словами SATA 69 и 169, возвращаемыми из команды ATA IDENTIFY DEVICE:

  • Недетерминированная TRIM: каждая команда чтения для адрес логического блока (LBA) после TRIM может возвращать разные данные.
  • Детерминированная TRIM (DRAT): все команды чтения в LBA после TRIM должны возвращать те же данные или становиться
  • Детерминированный ноль чтения после TRIM (RZAT): все команды чтения LBA после TRIM должны возвращать ноль.

В слове SATA 105 содержится дополнительная информация, которая описывает максимальное количество 512-байтов блоков на команду DATA SET MANAGEMENT, которую может поддерживать диск. Обычно это значение по умолчанию составляет 8 (или 4 КБ), но многие диски уменьшают это значение до 1, чтобы соответствовать требованиям к оборудованию Microsoft Windows для TRIM, время выполнения этой команды не должно превышать 20 мс или 8 мс × (количество записей диапазона LBA), в зависимости от того, что больше и всегда должно быть меньше 600 мс.

Отдельный диапазон LBA называется записью диапазона LBA и представлен восемью байтами. LBA выражается первыми шестью байтами записи диапазона LBA, а длина диапазона - это счетчик с отсчетом от нуля (например, 0 = 0 и 1 = 1), представленный оставшимися двумя байтами. Если длина двухбайтового диапазона равна нулю, то запись диапазона LBA должна быть отброшена как заполнение. Это означает, что для каждого 512-байтового блока диапазонов TRIM, поддерживаемых устройством, максимум составляет 64 диапазона по 32 МБ или 2 ГБ. Если устройство поддерживает SATA Word 105 на 8, то оно должно иметь возможность обрезать 16 ГБ с помощью одной команды TRIM (УПРАВЛЕНИЕ НАБОРОМ ДАННЫХ).

SCSI

SCSI предоставляет команду UNMAP (полный аналог TRIM) и команду WRITE SAME (варианты 10 и 16) с установленным флагом UNMAP.

SD / MMC

Команда MultiMediaCard и SD ERASE (CMD38) обеспечивает функциональность, аналогичную команде ATA TRIM, хотя требует, чтобы стертые блоки перезаписывались нулями или ед. eMMC 4.5 дополнительно определяет подоперацию «отбрасывать», которая более точно соответствует ATA TRIM в том смысле, что содержимое отброшенных блоков можно считать неопределенным (то есть «безразлично»).

NVM Express

В наборе команд NVM Express есть общая команда управления набором данных, которая указывает на намерение хоста для устройства хранения в наборе диапазонов блоков. Одна из его операций, deallocate, выполняет обрезку. Он также имеет команду Write Zeroes, которая предоставляет подсказку об освобождении и позволяет диску обрезать и возвращать нули.

Недостатки
  • Некоторые схемы отрицательного шифрования предполагают, что весь диск выглядит как случайный мусор. Использование TRIM устраняет этот уровень правдоподобного отрицания, поскольку созданные блоки «все нули» (или все-единицы) легко указывают, какие блоки используются. Утверждалось, что отключение TRIM также может быть подозрительным.
  • Исходная версия команды TRIM была определена подкомитетом T13 как команда без очереди и, следовательно, может повлечь за собой массовое выполнение штраф при неосторожном использовании, например, при отправке после каждой команды удаления файловой системы. Не ставящая в очередь природа команды требует, чтобы драйвер сначала дождался завершения всех невыполненных команд, выдал команду TRIM, а затем возобновил обычные команды. TRIM может занять много времени, в зависимости от прошивки на SSD, и может даже вызвать цикл сборки мусора. Этот штраф можно свести к минимуму в решениях, которые периодически выполняют пакетную TRIM вместо обрезки при каждом удалении файла, путем планирования таких пакетных заданий на время, когда загрузка системы минимальна. Этот недостаток TRIM был преодолен в Serial ATA версии 3.1 с введением команды TRIM в очереди.
  • Неисправная микропрограмма накопителя, которая неверно сообщает о поддержке TRIM в очереди или имеет критические ошибки в ее реализации. связано с серьезным повреждением данных на нескольких устройствах, в первую очередь на Micron и Crucial M500 и Samsung 840 и 850 серии. Повреждение данных было подтверждено в операционной системе Linux (единственная ОС с поддержкой обрезки в очереди на 1 июля 2015 г.).

Эти устройства занесены в черный список в libata-core.c ядра Linux, чтобы принудительно отправлять команды TRIM без очереди (ATA_HORKAGE_NO_NCQ_TRIM) для этих дисков вместо помещенных в очередь команд TRIM:

  • Micron / Crucial M500 с использованием всех версий прошивки, включая повторно сертифицированные твердотельные накопители
  • Micron M510 с версией прошивки MU01
  • Micron / Crucial M550 с версией прошивки MU01
  • Crucial MX100 с версией прошивки MU01
  • SSD-накопители Samsung 840 и 850 серий со всеми версиями прошивки

Этот файл также помещает SuperSSpeed ​​S238 в черный список для TRIM в целом из-за вызывая потерю данных неправильными блоками при запуске TRIM.

libata-core.c также имеет белый список для перечисления твердотельных накопителей, которые надежно известны специалистам по обслуживанию подсистемы для правильной реализации флагов DRAT и RZAT (ATA_HORKAGE_ZERO_AFTER_TRIM), вместо того, чтобы игнорировать их, как многие др. ives делать. В белый список включены следующие диски:

  • твердотельные накопители Crucial
  • твердотельные накопители Intel, за исключением твердотельных накопителей Intel 510
  • твердотельные накопители Micron
  • твердотельные накопители Samsung
  • твердотельные накопители Seagate
См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-11 11:33:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте