Оптимизация SSD в Linux VPS

Дата: 18.10.2015Метки:

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

Паравиртуальный драйвер Virtio для SSD

Драйвера Virtio реализованы для блочных, сетевых и других устройств. В общем случае использование паравиртуальных драйверов позволяет достичь большей производительности и отзывчивости в работе виртуальных окружений.

Если ваша панель управления KVM VPS позволяет изменять драйвер виртуализации диска, то для улучшения быстродействия дисковой системы, рекомендуется переключить режим работы диска с IDE на Virtio.

Редактирование fstab

Начнем с параметров монтирования разделов в Linux. Для этого необходимо отредактировать файл /etc/fstab, который состоит из набора файловых систем. Для монтирования каждого раздела или диска в файле используется отдельная строка.

Структура файла fstab выглядит следующим образом:

  • filesystem — физическое размещения файловой системы, можно указать имя файла устройства, его метку или UUID.
  • dir — точка монтирования файловой системы.
  • type — тип файловой системы.
  • options — параметры монтирования файловой системы.
  • dump — используется утилитой dump для управления процессом создания резервных копий. Возможные значения: 0 или 1. Если указано число 1, dump создаст резервную копию.
  • pass — используется программой fsck для проверки целостности файловой системы. Возможные значения: 0, 1 или 2. Значение 1 используют для корневой файловой системы. Значение 2 имеет меньший приоритет, его используют для других разделов. Значение 0 отключает проверку fsck.

По умолчанию файл fstab в Debian выглядит следующим образом:

# <file system>                              <dir>    <type>    <options>           <dump>    <pass>
UUID=ed47f65f-2336-41e7-ad06-a03d75c4c503    /        ext4      errors=remount-ro   0         1

Где UUID это идентификатор нашего SSD, который смонтирован в корень и отформатирован в файловой системе EXT4. В качестве параметра используется опция errors=remount-ro.

Будьте предельно внимательны, редактирование fstab может стать причиной невозможности загрузки системы. Создайте резервную копию файла перед внесением каких-либо изменений.

Отключить время доступа к файлам и каталогам

Чтобы снизить нагрузку по записи, можно полностью отключить время последнего доступа к файлам и каталогам. Для этого в параметры монтирования fstab необходимо добавить опции монтирования noatime и nodiratime.

Отключить барьеры

Барьеры гарантируют целостность журнала файловой системы. К их недостаткам можно отнести снижение производительности. Отключив использование барьеров barrier=0, мы ускоряем операции записи на разделы EXT4.

В итоге файл fstab должен выглядеть следующим образом:

# <file system>                              <dir>    <type>    <options>                                         <dump>    <pass>
UUID=ed47f65f-2336-41e7-ad06-a03d75c4c503    /        ext4      noatime,nodiratime,barrier=0,errors=remount-ro    0         1

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

mount -o remount rw,errors=remount-ro,noatime,nodiratime,barrier=0 /

Настройка параметров ядра Linux для SSD

Для улучшения производительности системы, рекомендуется снизить интенсивность обращения к SWAP. Чтобы снизить минимальный процент свободной памяти, при которой будет происходить запись страниц в SWAP, необходимо установить значение параметра vm.swappiness=10.

echo 'vm.swappiness=5' >> /etc/sysctl.conf
# Применить настройки
sysctl -p

Параметр vfs_cache_pressure отвечает за уровень выделяемой памяти под использование дискового кэша. В зависимости от величины, параметр увеличивает или уменьшает активность выгрузки неиспользуемых страниц памяти из кэша. Для SSD рекомендуется установить значение параметра vfs_cache_pressure равным 50.

echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf
# Применить настройки
sysctl -p

Для того чтобы проверить, что система правильно определила ваш SSD, необходимо выполнить команду:

cat /sys/block/vda/queue/rotational
0

Где vda имя вашего диска в системе. Для просмотра списка устройств используйте команду df. Значение равное 0, служит подтверждением того, что система определила тип используемого диска как SSD. В противном случае, необходимо установить значение вручную:

echo 0 > /sys/block/sda/queue/rotational
echo "echo 0 > /sys/block/sda/queue/rotational" >> /etc/rc.local

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

echo noop > /sys/block/vda/queue/scheduler
echo "echo noop > /sys/block/vda/queue/scheduler" >> /etc/rc.local

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

echo 0 > /sys/block/vda/queue/rotational
echo "echo 0 > /sys/block/vda/queue/rotational" >> /etc/rc.local

Последняя параметр rq_affinity. Может принимать значение равное 1 принуждает обработку операций на том же процессоре, где они были сгенерированы. Это может повысить эффективность кэширования данных. Для гостевых систем KVM рекомендуется установить значение равное 0, чтобы разрешить обработку операций на любом процессоре.

echo 0 > /sys/block/sda/queue/rq_affinity
echo "echo 0 > /sys/block/sda/queue/rq_affinity" >> /etc/rc.local