Оптимизируем Linux для SSD

Однажды, я решил перейти на лептоп вместо полноценного десктопа.
Причин тому было много — экономия рабочего места, абсолютная индифферентность к игрушкам, требование мобильности системы.
К выбору я подошел со всей ответственностью — выбрал себе ноутбук с мощным процессором, несколькими Гб ОЗУ, дискретной видеокартой с поддержкой VDPAU, и т.д.
Одного я неучел — скорости работы дисковой подсистемы на ноутбуках в сравнении с десктопами…
Мучения продолжались пару месяцев, пока терпение не лопнуло, и я не прикупил себе SSD на 64 Гб на чипах MLC — Patriot SSD Warp 64Gb.
SSD

Радости не было предела, однако 10000 циклов перезаписи ячейки — это слишком мало для активно работающей системы, так же как и энергопотребление, которое минимально только при простоях диска. Кроме того, максимальная скорость записи для этого типа дисков достигается только при записи большими блоками — время на случайную перезапись у MLC слишком высокое.
Согласно данным тезисам, а так же опираясь на все могущество GNU/Linux мы и будем оптимизировать наш ноутбук. Ну, поехали!

Частично информация была найдена на специализированных сайтах и форумах, частично — додумана самому.

Скоростные параметры SSD:
godlike:~ # hdparm -i /dev/sda

/dev/sda:

Model=PATRIOT MEMORY 64GB SSD, FwRev=02.10104, SerialNo=DC0208400CDF00009

godlike:~ # dd if=/dev/sda1 of=/dev/null bs=1M
61130+1 записей считано
61130+1 записей написано
скопировано 64099574784 байта (64 GB), 565.736 c, 113 MB/c

По впечатлениям - программы запускаются почти моментально, система тоже ощутимо быстрее грузится

Про железо свое рассказал, система у меня — openSUSE 11.0/2.6.25.20

1. Выбор файловой системы

 

Наилучший выбор — ZFS, у неё copy-on-write. Такое впечатление, что люди её разрабатывали с оглядкой на SSD.

 

Но, поскольку только маньяки ставят на ноутбуки *BSD, Solaris, ограничимся файловой системой без журналирования.

 

Я выбрал ext2.

 

Журнал нужен для того, чтобы, например при пропадании электропитания, восстановить незавершенные транзакции — чтоб не потерять данные и оставить ФС целостной. Поскольку в ноутбуке присутствует батарея, описанный выше случай практически невозможен, поэтому журнал нам не нужен.

 

Сегодня можно также выбрать ext4 в качестве ФС для SSD, отключив журналирование после установки ОС:

tune2fs -o journal_data_writeback
©heroOfOurTime

2. Временные файлы

 

Постоянная запись временных данных на SSD не пойдет ему на пользу, поэтому добавляем в /etc/fstab следующие строки:

tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0
tmpfs /var/spool/postfix tmpfs defaults 0 0

Наши временные файлы буту находиться в ОЗУ, которой на сегодня достаточно, и при перезагрузке удаляться - как и положенно порядочным временным файлам :-).

 

3. Время последнего доступа к файлам

 

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

 

Нужно добавить опцию noatime к точке монтирования ФС на SSD в /etc/fstab, например у меня:

/dev/disk/by-id/ata-PATRIOT_MEMORY_64GB_SSD_DC0208400CDF00009-part1 / ext2 noatime 0 1

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

 

SSD может пребывать только в 2-х режимах - active и suspend. Когда он active - он кушает много энергии, когда в suspend - мало. Поэтому сейчас увеличиваем время нахождения SSD в suspend режиме:

 

Добавляем параметр

vm.laptop_mode=5

в /etc/sysctl.conf.

 

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

 

Увеличить перерыв между записями на диск можно также с помощью поднятия таймаута между сбросом «грязных» буферов (части файлов, измененные программой или пользователем, но еще не записанные на диск). По умолчанию, таймаут равняется 5 секундам, увеличим его до 150. ВНИМАНИЕ: Внезапное выключение ноутбука в этот таймаут приведет к потере

 

незаписанных данных!

 

Добавляем в /etc/sysctl.conf строку:

vm.dirty_writeback_centisecs = 15000

Если вы используете kpowersaved в качестве программы, управляэщей

 

энергосбережением (я использую), то kpowersaved перекроет проведенные

 

изменения. Для предотвращения этого делаем следующее:

 

редактируем файл /etc/powersave/events

 

находим строки с

EVENT_ACADAPTER_ONLINE
EVENT_ACADAPTER_OFFLINE

Если они имеют значение "ignore", поменяйте его на

 

"set_dirty_writeback".

 

Создайте файл /usr/lib/powersave/scripts/set_dirty_writeback

 

С таким содержимым:

#!/bin/bash
#
# load helper functions
. ${0%/*}/helper_functions

# set vm parameter to required value
sleep 3
$LOGGER "set dirty_writeback_centisecs to 15000"
echo 15000 > /proc/sys/vm/dirty_writeback_centisecs

# exit in the required manner
$script_RETURN $EV_ID 0 "set_dirty_writeback complete"
EXIT 0

сделайте его исполняемым.

 

5. Свободное место

 

Увеличиваем свободное место на SSD(которого и так мало=)) на файловых системах ext2/ext3, путем уменьшения количества резервированных секторов:heroOfOurTime

tune2fs -m2 /dev/sda1

6. Логгирование

 

Постоянная записть журнала на SSD также не идет ему на пользу, поэтому комментируем все журналы в /etc/syslogd/syslogd.conf (/etc/syslog-ng/syslog-ng.conf)

 

7. I/O Scheduler

 

©

heroOfOurTime

Для обычных жестких дисков по умолчанию используется логика, которая упорядочивает движение головки под диску, изменяя последовательность записываемых данных. Для SSD это не нужно, поэтому будет весьма разумно выбрать noop в качестве i/o scheduler'а. Это можно сделать выбрать непосредственно в конфиге ядра или передать опцию elevator=noop через груб на этапе загрузки ядра. Или даже через /sys.

 

В openSUSE это делается так:

 

yast->Система->Настройки ядра->параметры ядра->Общий I/O планировщик

 

Выводы

 

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

 

Postscriptum:

Все делается на свой страх и риск.
Все описанные действия проводились на openSUSE 11.0. На других ОС GNU/Linux может быть немного по-другому.

Источник: http://habrahabr.ru/blogs/linux/64682/


Комментарии

Отправить комментарий

CAPTCHA
Защита от роботов
8 + 9 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.