Позволяет ли TRIM избежать влияния mdadm RAID 1 на производительность SSD?

Позволяет ли TRIM избежать влияния mdadm RAID 1 на производительность SSD?

В других вопросах уже упоминалось, что Red Hat не рекомендует использовать mdadm RAID 1 на SSD.

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

Я понимаю, почему это так. Однако я подозреваю, что это было написано до прибытияmdtrim, который разработан специально для mdadm RAID 1. Это обходит проблему? Если я правильно понимаю TRIM, то я думаю, что это так, но я не уверен, поэтому и спрашиваю.

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

Одно из предложений, которое я видел, состояло в том, чтобы использовать только около 80% каждого диска, так что после того, как mdadm выполнит свою первоначальную проверку, все еще останется несколько неиспользованных блоков. Но разве эти блоки не будут первыми, которые будут использованы при последующем использовании диска? Они все равно будут использоваться довольно быстро, и тогда мне не станет лучше, верно?

решение1

Конечно, вы можете сделать частичную обрезку с помощью mdtrim (см. --reserveопцию), чтобы всегда оставлять некоторое количество свободного места необрезанным. Или вы можете просто создать большой файл с помощью dd(1) на вашей зашифрованной FS, чтобы использовать некоторое пространство, которое затем никогда не будет обрезано (и не будет использовано вами). Я думаю, обрезка всего, кроме ~30% неиспользуемого пространства, даст вам массу преимуществ в производительности, не сильно ставя под угрозу безопасность.

вы можете (как вы предлагаете) вместо обрезки использовать избыточное выделение (на новом или ATA-безопасно-стертом SSD) создав раздел всего с 80% пространства, и использовать его. Он не будет "использован довольно быстро, и тогда вам не станет лучше". Вот почему:

Предположим (для простоты), что ваш диск имеет 10000 секторов (LBA). Когда вы разбиваете его так, что используется только половина (опять же для простоты), вы будете использовать только LBA 0-4999, в то время как LBA 5000-9999 никогда не будут затронуты. Теперь, прошивка уровня износа в диске имеет два способа узнать, какие сектора не используются - те, которые ваша ОС указала TRIM, и те, которые перезаписываются. Таким образом, если вы записываете в LBA 100 в первый раз, он будет использован (например, в физическом блоке 123). При второй записи в LBA 100 SSD запишет данные в новое место (например, в физический блок 124), а затем пометит СТАРУЮ версию LBA 100 (физический блок 123) как неиспользуемую (TRIMed), поэтому позднее, когда SSD будет простаивать, он сможет выполнить сборку мусора и (если все другие физические блоки в этом блоке стирания также не используются) стереть весь блок стирания (который намного больше физического блока записи — например, 512 КБ против 4 КБ).

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

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

решение2

Добавлю к устаревшему ответу: недавно я заменил неисправный жесткий диск на моем RAID1 на твердотельный накопитель. В результате проведенных мной экспериментов и исследований я обнаружил следующее:

  • Linux md передает команды TRIM на составляющие диски, начиная с версии ~2.6.39, но только если все они поддерживают команду TRIM.
    • Для моего HDD+SSD RAID1 мне пришлось отключить и извлечь HDD, выполнить TRIM, а затем --re-addHDD.
  • TRIM можно выполнить на горячем блочном устройстве с помощью fstrim, Linux md затем передаст его на SSD.
  • Первоначальное восстановление RAID1 будет производиться на весь SSD.
  • Скрипт mdtrim все еще является экспериментальным и не обновлялся уже много лет.
  • Используя TRIM для избыточно записанных блоков, можно освободить место в глазах прошивки SSD и повысить производительность, уменьшить усиление записи и многое другое.

Связанный контент