В этой статье приведены рекомендации для работы с твердотельными накопителями (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, то раздел будет смонтирован в режиме только-чтение.
Применение TRIM по раписанию cron
На некоторых SSD включение TRIM может привести к замедлению работ при удалении файлов. Если такое наблюдается у вас, используйте альтернативу — fstrim.
# fstrim -v /
Для использования fstrim, раздел должен быть примонтирован и указан точкой монтирования.
Для автоматизации можете использовать планировщик cron. Для более подробной информации по cron посмотрите страницу Crontab. После автоматизирования уберите опцию discard
из /etc/fstab
.
Включение TRIM с помощью tune2fs
В файловой системе ext4 флагdiscard
можно установить как параметр монтирования по умолчанию, используя tune2fs :
# tune2fs -o discard /dev/sdXY
Использование параметров монтирования по умолчанию вместо редактирования в /etc/fstab
полезно для внешних дисков, поскольку такой раздел на других машинах будет установлен с по умолчанию с включенным TRIM. Не придется на каждой машине редактировать /etc/fstab
.
Планировщик ввода/вывода
Используйте вместо стандартного 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