7.2 Использование твердотельных накопителей (SSD)

В этой статье приведены рекомендации для работы с твердотельными накопителями (SSD) и другими устройствами хранения на основе флэш-памяти.

TRIM

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

TRIM позволяет SSD более эффективно производить сбор мусора , что в противном случае замедляло бы будущие операции записи в затронутые секторы.

Проверьте, поддерживается ли TRIM

# hdparm -I /dev/sda | grep TRIM
        *    Data Set Management TRIM supported (limit 1 block)

Включите TRIM с помощью флагов монтирования

Используйте следующий флаг монтирования в /etc/fstab, чтобы включить TRIM:

/dev/sda1  /       ext4   defaults,noatime,discard   0  1
/dev/sda2  /home   ext4   defaults,noatime,discard   0  2
Примечание:
  • не используйте флаг discard, если вы периодически запускаете fstrim;
  • если вы используете флаг discard для корневого раздела с файловой системой ext3, то раздел будет смонтирован в режиме только-чтение.
Важно
Перед внесением изменений убедитесь, что ваш SSD поддерживает TRIM. Иначе вы можете потерять данные!

Применение TRIM по раписанию cron

Этот метод не работает для файловых систем VFAT.

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

# fstrim -v /

Для использования fstrim, раздел должен быть примонтирован и указан точкой монтирования.

Для автоматизации можете использовать планировщик cron. Для более подробной информации по cron посмотрите страницу Crontab. После автоматизирования уберите опцию discard из /etc/fstab.

Приоритеным способом является использование discard. Только если возникли проблемы с ним или вам не подешел discard, используйте fstrim.

Включение TRIM с помощью tune2fs

В файловой системе ext4 флагdiscard можно установить как параметр монтирования по умолчанию, используя tune2fs :

# tune2fs -o discard /dev/sdXY

Использование параметров монтирования по умолчанию вместо редактирования в /etc/fstab полезно для внешних дисков, поскольку такой раздел на других машинах будет установлен с по умолчанию с включенным TRIM. Не придется на каждой машине редактировать /etc/fstab .

Параметры монтирования по умолчанию не указаны /proc/mounts.
Важно
При использовании данного способа, опция discard НЕ будет показана командой mount.

Планировщик ввода/вывода

Используйте вместо стандартного CFQ планировщика (Completely Fair Queuing) NOOP или Deadline. Это повысит производительность SSD.

Планировщик NOOP вставляет все входящие запросы ввода-вывода в простую очередь FIFO и реализует слияние запросов. Этот планировщик полезен, когда определено, что хост не должен пытаться переупорядочивать запросы на основе содержащихся в нем номеров секторов. Другими словами, планировщик предполагает, что хост не знает, как продуктивно переупорядочить запросы.

Существуют (как правило) три основные ситуации, когда такая ситуация желательна:

  • Если планирование ввода-вывода будет обрабатываться на нижнем уровне стека ввода-вывода. Примером нижних уровней, которые могут обрабатывать планирование, являются блочные устройства, интеллектуальные RAID-контроллеры, сетевое хранилище или внешний контроллер, такой как подсистема хранения, доступ к которой осуществляется через коммутируемую сеть хранения. Поскольку запросы ввода-вывода потенциально переносятся на более низкий уровень, повторное выравнивание IOP на уровне хоста использует время центрального процессора для операций, которые будут просто отменены на более низком уровне, увеличивая задержку/уменьшая пропускную способность без какой-либо продуктивной причины.
  • Поскольку точные сведения о позиции сектора скрыты от хост-системы. Примером может служить контроллер RAID, который не выполняет планирование самостоятельно. Несмотря на то, что хост имеет возможность повторно заказывать запросы, а RAID-контроллер — нет, в хост-системе отсутствует видимость для точного переупорядочения запросов для уменьшения времени поиска. Поскольку хост не имеет возможности судить, является ли одна последовательность лучше другой, она не может оптимально реструктурировать активную очередь и поэтому должна передать ее устройству, которое (теоретически) более осведомлено о таких деталях.
  • Поскольку перемещение головки чтения/записи не влияет на производительность приложения, чтобы оправдать накладные расходы переупорядочения. Обычно это происходит с невращающимися носителями, такими как флеш-накопители или твердотельные накопители.

РЕД ОС по умолчанию использует планировщик CFQ. Для проверки этого выведите содержимое файла /sys/block/sdX/queue/scheduler:

$ cat /sys/block/sdX/queue/scheduler
noop deadline [cfq]

Используемый планировщик выделен квадратными скобками.

Вы можете поменять планировщик без необходимости перезагрузки:

# echo noop > /sys/block/sdX/queue/scheduler
Важно
Данный способ отменится после перезагрузки!

Использование udev для выбора планировщика при загрузке

Добавьте udev-правило. Создайте файл в директории /etc/udev/rules.d с именем, например, ’60-schedulerset.rules’. Запишите в него следующие строки:

# установка планировщика deadline для SSD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="noop"

# установка планировщика cfq для HDD
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="cfq"

Вы можете заменить noop/cfq любыми другими планировщиками. Изменения вступят в силу после перезагрузки. Чтобы проверить сработало ли правило, выполните команду

$ cat /sys/block/sdX/queue/scheduler   #где X — буква физического накопителя

Общие советы по уменьшению операций чтения/записи

Продление использования SSD является перенос интенсивных операций ввода вывода на HDD или в оперативную память.

Продумайте схему разделов

Если на рабочей станции установлены одновременно оба типа дисков (HDD и SSD), то рекомендуем монтировать раздел /var на HDD, это снизит операции чтения/записи на ssd.

Если же SSD является единственным диском в системе, рекомендуем выделить отделный раздел для /var, чтобы избежать проблем с переполнением данного раздела лог-файлами или прочим.

Опция монтирования noatime

Важно
Внимание! Это может привести к снижению уровня безопасности системы!

Монтируйте разделы SSD с опцией noatime.

Если файловая система была смонтирована с этой опцией, чтение из файловой системы больше не приведет к обновлению информации atime. Важность настройки noatime заключается в том, что она устраняет необходимость делать записи в файловую систему для файлов, которые просто читаются. Это может привести к измеримому повышению производительности. Обратите внимание, что информация о времени записи в файл будет продолжать обновляться в любое время, когда файл записывается.

Для монтирования с опцией noatime, впишите её в файл /etc/fstab.

/dev/sda1 / ext4 defaults,noatime,discard 0 1 
/dev/sda2 /home ext4 defaults,noatime,discard 0 2​

Примонтируйте /tmp в tmpfs

Перенос /tmp в оперативную память — отличная идея продления срока жизни диска. Добавьте строку /etc/fstab. Если объем операвтиной памяти больше 4ГБ, с помощью параметра size=установите размер раздела равный половине доступной памяти.

Пример для машины с 8ГБ оперативной памяти:

tmpfs /tmp tmpfs nodev,nosuid,size=4G 0 0

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.