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

Радости не было предела, однако 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
Наилучший выбор — ZFS, у неё copy-on-write. Такое впечатление, что люди её разрабатывали с оглядкой на SSD.
Но, поскольку только маньяки ставят на ноутбуки *BSD, Solaris, ограничимся файловой системой без журналирования.
Я выбрал ext2.
Журнал нужен для того, чтобы, например при пропадании электропитания, восстановить незавершенные транзакции — чтоб не потерять данные и оставить ФС целостной. Поскольку в ноутбуке присутствует батарея, описанный выше случай практически невозможен, поэтому журнал нам не нужен.
Сегодня можно также выбрать ext4 в качестве ФС для SSD, отключив журналирование после установки ОС:
tune2fs -o journal_data_writeback
©heroOfOurTime
Постоянная запись временных данных на 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
Наши временные файлы буту находиться в ОЗУ, которой на сегодня достаточно, и при перезагрузке удаляться - как и положенно порядочным временным файлам :-).
По-умолчанию, каждый раз, когда мы обращаемся к какому-либо файлу, пишется информация, про время, когда мы его открывали. Понятно, что на SSD это не нужно, да и вообще негативно влияет на производительность дисковой подсистемы.
Нужно добавить опцию noatime к точке монтирования ФС на SSD в /etc/fstab, например у меня:
/dev/disk/by-id/ata-PATRIOT_MEMORY_64GB_SSD_DC0208400CDF00009-part1 / ext2 noatime 0 1
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
сделайте его исполняемым.
Увеличиваем свободное место на SSD(которого и так мало=)) на файловых системах ext2/ext3, путем уменьшения количества резервированных секторов:heroOfOurTime
tune2fs -m2 /dev/sda1
Постоянная записть журнала на SSD также не идет ему на пользу, поэтому комментируем все журналы в /etc/syslogd/syslogd.conf (/etc/syslog-ng/syslog-ng.conf)
©
Для обычных жестких дисков по умолчанию используется логика, которая упорядочивает движение головки под диску, изменяя последовательность записываемых данных. Для SSD это не нужно, поэтому будет весьма разумно выбрать noop в качестве i/o scheduler'а. Это можно сделать выбрать непосредственно в конфиге ядра или передать опцию elevator=noop через груб на этапе загрузки ядра. Или даже через /sys.
В openSUSE это делается так:
yast->Система->Настройки ядра->параметры ядра->Общий I/O планировщик
Таким образом мы довольно неплохо увеличим живучесть SSD и время автономной работы ноутбука.
Все делается на свой страх и риск.
Все описанные действия проводились на openSUSE 11.0. На других ОС GNU/Linux может быть немного по-другому.
Источник: http://habrahabr.ru/blogs/linux/64682/
Комментарии
Отправить комментарий