У меня не работает trim ssd

Почему по мере заполнения SSD падает скорость записи в RAID, или зачем нужен TRIM

Эта проблема наиболее актуальна для аппаратных RAID или firmware RAID (таких как Intel RST RAID 1/10/5/6) с непромышленными SSD.

Особенность SSD

SSD пишут и читают данные страницами, записать можно только на очищенные страницы, а очистить страницы можно только большими блоками. Например, у диска размер страницы 8 КБ, в блоке находится 128 страниц, таким образом, размер блока — 1024 КБ (здесь и далее, если не указано иного, КБ и МБ двоичные).

Например, если изменить 40 КБ в одном файле, то на физическом уровне это будет выглядеть так:

На логическом уровне всё выглядит как обычно — данные будут перезаписаны поверх в соответствующих секторах. Как только в блоке 1 останутся исключительно пустые и готовые для очистки страницы, этот блок стирается и становится пустым целиком.

Чтобы скрыть физическую реализацию, диск поддерживает карту соответствия логических и физических номеров страниц (Flash Translation Layer).

Пока мы видим только один путь, которым физическая страница сможет стать снова очищенной — если на её логический адрес запишут новые данные. Дело в том, что контроллер диска работает на уровне страниц и не знает ничего о файловой системе, а операционная система никак не извещает диск об удалённых файлах, какие секторы могут быть очищены. Несложно видеть, что рано или поздно каждая страница диска будет занята и ему будет некуда писать данные.

Чтобы решить это проблему, была добавлена команда ATA TRIM (wiki). Операционная система посылает её диску с указанием секторов, которые могут быть очищены. Аналоги этой команды — SCSI UNMAP и CF ERASE. К сожалению, в некоторых случаях нет возможности послать её диску:
— если диск находится в RAID с аппаратным контроллером (LSI, Adaptec и т. п.),
— если диски находится в firmware-RAID, в частности, Intel RST RAID 1/10/5/6,
— если диск подключен по USB (ограничение протокола),
— если диск зашифрован программно через TrueCrypt, dm-crypt, GELI и т.п. (может поддерживаться, но обычно не включается по соображениям безопасности).

Если в результате тестирования выясняется, что диск не получает команду TRIM, то вскоре для записи может остаться совсем мало свободных страниц. Но они будут: каждый диск содержит некоторую зарезервированную область, которая служит как запас свободных страниц и запас блоков на замену полностью изношенным. Чтобы узнать размер этой области нужно посмотреть, какой физический объём памяти установлен на диске и сколько LBA указано в документации.

Например, Samsung SSD 840 Pro 512 GB имеет 512 ГБ памяти, при этом доступно 1000215216 LBA секторов. Резерв составляет: 512 × 1024 × 1024 × 1024 — 1000215216 × 512 = 35 ГБ или 6,85 %. Доступная ёмкость диска при этом составляет (512 — 35) × 1024 × 1024 × 1024 = 512 × 10^9 = 512 ГБ, уже десятичных. Samsung SSD 850 Pro 128 ГБ имеет на борту 129 ГБ, пользователю доступно 128 ГБ десятичных, резерв — 7,6 %.

Итак, если мы заполним весь диск, потом удалим все файлы, то без поддержки TRIM диск сможет писать только на какую-то часть от 6,85 % объёма диска. Часть, потому что этот резервный объём будет частично состоять из не полностью пустых блоков из-за фрагментации. Наличие этой области позволяет хоть как-то продолжать перезапись файлов на диске.

Пример худшей ситуации: писать некуда, хотя объём занятых страниц не превышает доступный пользователю без резерва.

В этом случае одновременно с записью работает сборщик мусора, который будет читать блок в оперативную память, стирать блок на диске (долгая операция, стирание занимает 3000 мкс в сравнении с 900 мкс записи в пустую страницу) и записывать блок из оперативной памяти. Задержка происходит также из-за роста Write Amplification — на одну логическую операцию записи приходится 5-10 физических операций записи.

Поэтому чем больше у диска есть свободного места для манёвров, тем выше скорость записи. Сборщик мусора в фоне занимается не только очисткой и дефрагментацией блоков, но и равномерным распределением циклов записи/очистки (P/E) по блокам, чтобы они изнашивались одинаково.

Есть популярный миф, что у современных дисков настолько хороший сборщик мусора, что им не нужен TRIM. Это совершенно не так, сборщик мусора и TRIM решают разные задачи.

Читайте также:  Почему не работает интуиция соратника скайрим

Промышленные диски часто имеют 50% и больше резервной области, поэтому для них отсутствие TRIM не критично. Остальные диски чаще всего вообще не имеют явно заявленной резервной области, или она недостаточна. Тесты показывают, что хороший эффект имеет объём over-provisioning 25-29 % от общего объёма физической памяти (включая резервную область). Поэтому если у диска недостаточный объём резервной области, то нужно сделать over-provisioning самостоятельно.

Есть три способа:
— разметить диск таким образом, чтобы оставить некоторую часть неразмеченной области, после создания RAID,
— использовать команду ATA для создания Host protected area (howto), до создания RAID,
— настроить RAID контроллер, чтобы он использовал только часть объёма диска.

Прежде чем выделить свободную область, нужно дать знать диску, что эта область ничем не занята, одним из двух способов:
— подключить диск к другому контроллеру и послать команду ATA TRIM (или при помощи O&O Defrag — есть cli интерфейс, Windows 8 встроенный оптимизатор дисков или Anvil’s Storage Utilities),
— сделать полную очистку таблицы FTL, послав команду ATA Secure Erase.

Есть версия, что также можно заставить диск понять, что блоки не используются, если туда записать 0x00 или 0xFF (так называемый метод «Tony TRIM»). Возможно, для каких-то контроллеров это работает, но мои тесты не показали изменений.

На практике

У меня есть два диска Samsung SSD 540 Pro 512 GB в Intel RST RAID 1, на которых установлена Windows 8.1. После года работы я измерил производительность и был неприятно удивлён. После проверки TRIM я увидел, что он не работает.

— Проверка TRIM под Windows,
— Проверка TRIM под Linux:
Колонки DISC-GRAN и DISC-MAX обе должны быть больше 0 для всех участвующих компонентов.

Альтернативный вариант:
После удаления файла на диске должны быть 0x00 или 0xFF, но это недостоверный способ: разные диски ведут себя по-разному.

TRIM в реальном времени включается опцией «discard» при монтировании диска:

TRIM для файловых систем на одиночных дисках и LVM поддерживается с ядра Linux 2.6.33. TRIM для mdraid поддерживается с ядра Linux 3.7. Но может быть портирован и на старые версии ядра, например, поддерживается в CentOS 6.

По-умолчанию Ubuntu делает TRIM по расписанию раз в неделю при помощи fstrim, но только для одиночных дисков (не mdraid) следующих производителей: Intel, Samsung, OCZ, SanDisk и Patriot и если установлен «hdparm».

— Проверка TRIM в FreeBSD:
ZFS по-умолчанию поддерживает TRIM начиная с версии FreeBSD 9.2:

GEOM RAID gmirror поддерживает TRIM с FreeBSD 9.1:
колонка «d/s» — BIO_DELETE/second.

Intel RST RAID поддерживает TRIM только для типа RAID 1, как исключение: для включения нужно убедиться, что драйвер Intel RST версии 11 и выше, и прошивка OROM (Legacy boot) или SataDriver (UEFI boot) версии 11 и выше, или старая версия, но пропатченная. TRIM поддерживается в Intel RSTe RAID 0/1/10 начиная с версии 3.7.0.1093.

Я решил создать неразмеченный раздел диска для over-provisioning.
1. При помощи Acronis Backup я снял образ диска. Также сохранил таблицу разделов (важно иметь первый сектор, последний сектор, GPT тип раздела, GPT уникальный идентификатор, имя раздела).

2. Перезагрузился в BIOS и сделал SSD Secure Erase. Если этого пункта нет в BIOS, то можно выполнить команду при помощи hdparam (или здесь и здесь, есть под Windows), HDDErase или HDAT2.

3. Собрал RAID 1 на двух дисках.

Здесь нужно сделать важное замечание: при инициализации массива RAID-контроллер считывает каждый сектор с одного диска и записывает его на второй. Теоретически это должно помешать всей нашей затее, и на одном диске не будет over-provisioning. Но тесты показали, что этот метод почему-то работает. У меня этому нет объяснений.

4. Загрузился с LiveCD и при помощи GPT fdisk создал нужную таблицу разделов: последний раздел на 104 ГБ меньше, чем раньше. Разделы нужно выравнивать (partition align) по размеру страницы диска, а не по размеру блока.

5. Восстановил из резервной копии каждый раздел.

После этого я полностью заполнил диск и запустил тесты. Это должно показать худший случай. Кеш Windows включён, регулярная запись кеша выключена, Inter RST write-back выключен, все тесты используют область диска фиксированного размера в 40 ГБ. Тестировать диски непросто, поскольку показатели могут меняться во времени. Ниже сведены показатели установившегося состояния.

Я сравню три состояния:
— Один диск без RAID, полностью заполненный, стандартная скрытая резервная область 6,58 %.
— Один диск без RAID, после запуска на нём TRIM свободного места.
— Два диска в RAID 1, полностью заполненные, стандартная скрытая резервная область 6,58 %.
— Два диска в RAID 1, полностью заполненные, over-provisioning 27,24 % (включая скрытую резервную область).

Анализ результатов:
— чтение с RAID 1 оказывается быстрее, чем с одного диска, невзирая на то, что у нас всего лишь firmware RAID.
— запись тем быстрее, чем больше нераспределенного пространства: на первом месте TRIM, на втором — наш самодельный over-provisioning.

Читайте также:  Lenovo ideapad s145 не работает тачпад при установке windows

Установившееся состояние не всегда достигается быстро. Посмотрим тест последней конфигурации (over-provisioning 27,24 %) в динамике и увидим худший случай:

Любопытный процесс идёт первые 400 секунд, после чего производительность возрастает и стабилизируется. Я думаю, параллельно с записью работает сборщик мусора, который дефрагментирует блоки и подготавливает их для записи. Такое поведение наблюдается не каждый раз, а время от времени. Видно, что последовательная запись проседает до 70 МБ/с, случайная запись — до 18000 IOPS. Эти показатели всё равно в два раза лучше, чем без over-provisioning (32 МБ/с и 7139 IOPS соответственно). Чтобы убедиться, что установившееся состояние на самом деле имеет такую высокую производительность, я также выполнил тест в течении 30 минут, при этом было записано на диск 490 ГБ со средним 69721 IOPS.

Кратко

— Если диск получает ATA TRIM от ОС, то беспокоиться не о чем, достаточно оставлять часть места на диске свободным.
— Если используются дорогие промышленные диски, то проверьте объём встроенной резервной области, если он достаточен, то проблем с записью не будет.
— В остальных случаях нужно оставить не размеченную область, чем больше её размер, тем меньше будет стандартное отклонение латентности записи.
— Иногда сборщик мусора не успевает подготовить чистые блоки и скорость записи может просесть и быть непостоянной.
— После over-provisioning установившаяся максимальная скорость записи повысилась с 7000 до 68000 IOPS, а средняя минимальная — с 6000 IOPS до 19000 IOPS.

Источник

Trim SSD – что за функция и как это работает

Функция Trim SSD что это такое, для чего нужно, как включить. На все эти и многие другие вопросы, Вы найдете ответы в данной статье.

Современные операционные системы, как и файловые системы, пока еще рассчитаны в основном на работу с HDD (жесткий механический диск или винчестер) и при записи файла операционная система записывает их в специальную таблицу на жестком диске (MFT — Master File Table — Главная файловая таблица) — координату данного файла. Этим самым файловая таблица сообщает системе четкое и точное месторасположение кластеров с записанной информацией. Когда же файл удаляется с жесткого диска, система удаляет данные такого файла из этой таблицы MFT, сам файл не трогая. А при записи новых данных файлы просто пишутся поверх старых. Так работает перезапись на HDD. А вот для перезаписи данных на SSD требуется удаление не только координаты из MFT таблицы, но стирания самого ненужного более файла из ячеек flash-памяти. Здесь нам на помощь и придет Trim.

Ликбез по функции


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

Для того, чтобы скорости работы SSD не падали, в новые операционные системы добавляется команда ATA TRIM. Специальный драйвер файловой системы при стирании файла направляет команду Trim для контроллера SSD диска. Когда контроллер SSD диска воспринимает команду, он сразу же очищает более не используемые блоки flash памяти. Делается это в режиме фона, в перерывах между любыми операциями записи и чтения.

Использование команды Trim позволяет вернуть нам полную скорость записей для вторично используемых блоков flash памяти. К сожалению, далеко не все операционные системы работают с командой Trim. Поддерживают ее относительно новые версии систем:

Windows 7, 8, 10 и Server 2008 R2 с файловой системой NTFS.

Ядро Linux, с версии 2.6.33 и выше.

Mac OS X, с версии с 10.6.6 (и то, только после установки соответствующего обновления) и выше.

Так же функция Trim не будет работать если:

  • Подключение SSD диска осуществляется через USB.
  • Диск SSD размечен в файловой системе FAT32.

Как проверить включение Trim на операционных системах Windows 7, 8 и 10

Вначале откроем консоль Командной строки с правами администратора. Далее меню Пуск – Программы – Стандартные – Командная строка. Нажатие правой кнопки мышки — Запуск от имени Администратора.

Затем в командной строке вводится команда:

fsutil behavior query disabledeletenotify – Выполнить.

В том случае, если вывод команды покажет — disabledeletenotify=1, это значит, что команда TRIM выключена. Подключение делаем с помощью команды:

Читайте также:  Как настроит музыкальный центр technics

fsutil behavior set disabledeletenotify 0

Будьте внимательны: ноль – включенная команда, единица – выключенная команда.

Включение TRIM в Linux

Для того, чтобы использовать функцию TRIM, нам необходимо, чтобы наша файловая система была ext4.

Включение команды TRIM нужно указать в опции монтирования для разделов ext4 в файле fstab. Это опция discard.

Кроме этого, для раздела на SSD диске стоит добавлять опции noatime или realtime и nodiratime — это опции уменьшения нагрузки по записи, тогда не станут обновляться даты доступа к папкам и файлам.

Еще можно добавлять опцию commit и указывать значения, допустим, в 60 секунд — операции записи будут отложены и станут выполняться на один раздел раз в 60 секунд. Но обратите внимание, что данную опцию стоит добавлять только в том случае, если ваш компьютер подключается через UPS (ИБП), или же вы производите действия на ноутбуке.

Тем самым, строка fstab может иметь, к примеру, такой вид:

UUID=aeade6fd-2b24-4e59-bc8c / ext4 noatime,discard,errors=remount-ro,commit=60 0 1

Так же в Linux можно выполнять команду TRIM вручную:

В данном примере команда применяема к корневой файловой системе.

Как выполнять TRIM на разделах NTFS

При установленных операционных системах операционная Windows 7, 8, 10, можно не делать ничего. Достаточно того, что мы проверим включение для функции TRIM. Затем Windows станет автоматически отправлять команды TRIM при таких операциях с дисками, как:

  • Удаление файлов.
  • Быстрое форматирование разделов диска NTFS.
  • Удаление разделов NTFS.

В Windows 8 и 10 предусмотрено выполнение команды TRIM и для целого раздела NTFS. На вкладке «Сервис» в свойствах диска необходимо открыть Оптимизатор дисков. Так по-новому называется дефрагментатор в Windows.

Для разделов NTFS в Оптимизаторе на SSD диске нам будет доступна команда «Оптимизировать диск». Выполнение данной команды приведет к тому, что Windows отправит на SSD диск команду Trim для абсолютно всех свободных блоков на данном диске. То есть выполнится «тримизация» полностью всего свободного раздела диска, размеченного в NTFS.

Так же в Windows 7, 8, 10 мы можем сделать «тримизацию» всего раздела NTFS. Для того, чтобы это сделать необходимо выполнить быстрое форматирование этого раздела. Только нужно помнить и не забывать, что это действие уничтожает полностью все данные в разделе.

В последних (с 2015 года) версиях драйверов ntfs-3g (драйвера ntfs под Линукс) есть добавленная функция TRIM. Теперь мы можем «тримизировать» и раздел NTFS из Linux. Команда:

fstrim -v /media/ntfs/

где /media/ntfs/ — примонтированный раздел NTFS.

Как выполнять Trim на Windows XP и Windows Vista

Как уже говорилось выше, Windows XP и Windows Vista не поддерживают TRIM. Если необходимо «тримизировать» SSD диск, используемый в этих операционных системах, то есть такие варианты:

Программа от производителя SSD диска, при ее наличии.

Подключение этого диска на компьютер, с установленными Windows 8 или Windows 10. Через Оптимизатор дисков выполняется оптимизация NTFS разделов на нужном SSD диске. Помните, что SSD диск нужно подключать не через USB, а через SATA.

Загрузка компьютера с флешки с новым дистрибутивом Linux (начиная с 2015 года). Примонтируются разделы NTFS и выполняется команда fstrim.

Хотя можно и вообще не делать TRIM на этих операционных системах. Мы можем оставить неразмеченной 20-30% от дисковой емкости и этого будет хватать для поддержки нормальной скорости записи. Неразмеченной, то есть ни одному разделу не присвоенной.

Удаленные данные и их восстановление

Если использовать Trim, то о восстановлении удаленных данных можете забыть. Если удалить файл, то все его данные на SSD дисках будут полностью уничтожены.

Так как же влияет Trim на скорость записи?

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

Проще говоря, скорости записи зависят от количества свободного места на SSD диске. Если же ваш диск практически полностью занят, то и скорости записи упадут даже в том случае, если вы пользуетесь Trim. А в том случае, если у вас не менее 20-30% емкости SSD диска остаются без разметки (unallocated disk space), то можете обходиться и без использования функции Trim. Контроллер SSD диска будет применять неиспользуемое место под разделы для того, чтобы выровнять скорость записи.

Функция Trim имеет те полезные свойства, что действительно дает возможность поддержать максимально высокую скорость записи, но только при двух условиях:

  • Под разделы размечена полная емкость SSD диска.
  • Разделы с файловой системой заполнены не более чем на 70-80% от своей емкости.

Видео по включению трим в Mac OS

Источник

Оцените статью