Оптимизация для работы с SSD-дисками: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Отложенная запись)
Строка 58: Строка 58:
  
 
===Отложенная запись===
 
===Отложенная запись===
Обычно рекомендуют для нетбуков с ssd дисками, наколько актуально для рабочей станции, не знаю, но на всякий случай что было.
+
Обычно рекомендуют для нетбуков с ssd дисками, наколько актуально для рабочей станции, не знаю, но на всякий случай что бы было.
  
 
В случае отложенной записи ядро будет копить данные, ожидающие записи на диск, и записывать их либо при острой необходимости, либо по истечении таймаута.  
 
В случае отложенной записи ядро будет копить данные, ожидающие записи на диск, и записывать их либо при острой необходимости, либо по истечении таймаута.  
Строка 69: Строка 69:
 
  vm.laptop_mode = 5  
 
  vm.laptop_mode = 5  
 
  vm.dirty_writeback_centisecs = 6000
 
  vm.dirty_writeback_centisecs = 6000
 
 
  
 
==Включение поддержки TRIM==
 
==Включение поддержки TRIM==

Версия 20:38, 16 мая 2012

Кратко о Главном

Выравнивание разделов

Суть проблемы в том, что если начало разделов в секторах не кратно размеру кластера файловой системы, то резко падает производительность при чтении/записи с диска, а в случае с SSD диском ещё и увеличивается износ диска. То есть когда разделы не выравнены, то кластер файловой системы занимает несколько секторов и тем самым увеличивается количество операций чтения/записи. При создании раздела его стартовый сектор должен делиться на 8 без остатка!

fdisk -l
Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *        2048    20000767     9999360   83  Linux
/dev/sda2        20000768   117229567    48614400   83  Linux

Начальные сектора 2048 и 20000768 кратны 8!


P.S. При установки Ubuntu 12.04 и создании разделов стандартными графическими средствами, выравнивание разделов выполнять не пришлось, программа всё сделала сама!


Параметры подключения

в /etc/fstab нужно добавить параметры монтирования диска:

sudo nano /etc/fstab
UUID=04871f6d-9620-4a01-875b-76462d31873d   /    ext4    discard,relatime,nodiratime,errors=remount-ro 0       1

discard — включает работу TRIM (что такое читай ниже)
relatime — разрешает записывать только время изменения
nodiratime — отменяет запись времени доступа к директориям

P.S. вместо relatime есть другой параметр noatime - зарпещает вести запись времени доступа, но его не рекомендуется использовать т.к. может быть нарушена стабильная работа некоторых программ


если логи и временные файлы не нужны, то их можно вынести во временную память, добавив строки:

none /var/log tmpfs size=10M 0 0
none /tmp tmpfs size=100M 0 0
none /var/tmp tmpfs size=20M 0 0

Это позволит избежать лишних операций записи на диск

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

По умолчанию в Ubuntu Linux в качестве файлового планировщика используется CFQ, он старается минимизировать перемещения головок, но у SSD нет движущихся частей и CFQ не нужен. в файле /etc/default/grub нужно найти строку:

sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

и добавить параметр elevator=noop

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop". 

После выполнить:

sudo update-grub


Отложенная запись

Обычно рекомендуют для нетбуков с ssd дисками, наколько актуально для рабочей станции, не знаю, но на всякий случай что бы было.

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

Для этого открываем /etc/sysctl.conf и добавляем параметры

sudo nano /etc/sysctl.conf
vm.laptop_mode = 5 
vm.dirty_writeback_centisecs = 6000

Включение поддержки TRIM

Что такое TRIM Если в кратце, то штука нужная и обязательная!

Для включения поддержки TRIM в /etc/fstab нужно добавить параметр discard:

sudo nano /etc/fstab

по умолчанию страка выглядит так:

   UUID=b49c6a96-ee65-4c12-9aca-66f5ea927aab / ext4 errors=remount-ro 0 1 

меняем на:

   UUID=b49c6a96-ee65-4c12-9aca-66f5ea927aab / ext4 discard,relatime,nodiratime,errors=remount-ro 0 1


! TRIM не работает с «виртуальными» дисками, хранящимися в виде образов, что не ограничивает использование команды в виртуальной среде.
! TRIM не всегда поддерживается в RAID-массивах

Проверка работы TRIM

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

cd /

sudo dd if=/dev/urandom of=tmpfile count=10 bs=512k oflag=direct

2. находим номер сектора диска содержащего данные этого файла (нам нужно любое число из колонки begin_LBA):

sudo hdparm --fibmap tmpfile

3. проверяем содержимое этого сектора:

sudo hdparm --read-sector 17179648 /dev/sda

(вместо 17179648 подставьте номер сектора показанный командой из п.2 и вместо /dev/sda устройство которым обозначен SSD диск) будет показан набор случайных данных похожий на:

   …
   adb1 0d7a e027 042e 84ad 3231 2f6c 85f1
   58ee feb6 cac0 d403 5df0 46db 2cfe 531c
   3cbd 5a21 e0b6 9b57 799a 7ac8 dd15 3883 

4. удаляем файл:

sudo rm tmpfile
sudo sync

5. проверяем содержимое файла еще раз:

sudo hdparm --read-sector 17179648 /dev/sda

при включенной поддержке TRIM вывод будет содержать нули:

   …
   0000 0000 0000 0000 0000 0000 0000 0000
   0000 0000 0000 0000 0000 0000 0000 0000
   0000 0000 0000 0000 0000 0000 0000 0000 

если вывод содержит не нули, а данные из п. 3, то поддержка TRIM не осуществляется и нужно: Включить поддержку TRIM