RDot

RDot (https://rdot.org/forum/index.php)
-   Аппаратное обеспечение/Electronic equipment (https://rdot.org/forum/forumdisplay.php?f=50)
-   -   Оптимизация работы Linux+SSD с большим объёмом RAM (https://rdot.org/forum/showthread.php?t=3044)

12309 22.02.2014 19:18

Оптимизация работы Linux+SSD с большим объёмом RAM
 
Cобрал большинство рекомендаций по продлению жизни SSD, и ускорению работы системы в целом, в один мануал.
эта инструкция вам НЕ подходит, если у вас <= 4 GB RAM (рекомендуемый объём - 8 GB и выше), не SSD и не Linux :)


1. Разделы диска (/etc/fstab)

1.1. Параметры монтирования разделов

Нужно отключить запись времени доступа к файлам и директориям (access time), для этого в /etc/fstab нужно добавить к нужным разделам параметр noatime.
Также нужно добавить параметр discard, чтобы работала функция контроллера TRIM.
Предварительно обязательно прогуглите особенности вашего SSD! я не активировал опцию discard у себя, т.к. встречал сообщения, что у Samsung 840 Pro (который я использую) функцию TRIM контроллер выполняет автоматически, а опция discard только добавляет лишнюю нагрузку - следовательно, с включённым discard конкретно этот SSD умрёт быстрее из-за большей нагрузки.
Если вы не уверены в своём SSD, лучше не добавлять опцию discard, а периодически запускать команду fstrim вручную или по крону.
Для запуска по крону создайте файл /etc/cron.daily/trim и пропишите в него:
Код:

#!/bin/sh
LOG=/var/log/trim.log
echo "*** $(date -R) ***" >> $LOG
fstrim -v / >> $LOG
fstrim -v /home >> $LOG

Частоту запуска (daily или hourly) и необходимые разделы (/, /home, etc) настройте в зависимости от вашей системы и ваших предпочтений.
Нежелательно одновременно включать параметр discard и делать fstrim, выберите что-то одно, в зависимости от вашего SSD, лучше использовать параметр discard.

Помните, что для корректной работы параметра discard нужно ядро версии 2.6.33 и выше!

Примеры записей в /etc/fstab:
Код:

/dev/sda1    /  ext4  defaults,noatime,discard  0      1
 /dev/system/home    /home                ext4      noatime,acl,user_xattr        1 2

(нижняя строчка используется у меня, без discard, потому что самсунг)

Если у вас используется файловая система BTRFS - добавьте еще параметр ssd, типа "defaults,noatime,discard,ssd"

Если вы обнаружили, что какой-то софт (например, почтовый клиент mutt, и некоторые софтины для бэкапов) стал косячно работать - замените параметр noatime на relatime (в этом случае будет записываться время доступа к файлу, но только если оно не новее, чем время изменения файла).

Также рекомендуется сделать выравнивание разделов http://blog.nuclex-games.com/2009/12...-ssd-on-linux/, но это опасно и может привести к потере данных, делайте на свой страх и риск.


1.2. Создание RAM-дисков

Рекомендуется монтировать /tmp, /var/log, и /var/tmp в оперативную память.
/tmp - желательно всегда,
/var/log - только если вам не нужны логи после перезагрузки компьютера,
/var/tmp - только если вам пофиг на кэш некоторого софта (например, браузера konqueror, и окружения KDE в целом).

Для монтирования этих разделов в RAM добавьте эти строки в /etc/fstab:
Код:

tmpfs /var/tmp tmpfs defaults,noatime,mode=1777 0 0
 tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0

Если у вас есть systemd, то раздел /tmp в RAM лучше монтировать так:
Код:

mkdir -p /etc/systemd/system/local-fs.target.wants
 ln -s /usr/lib/systemd/system/tmp.mount /etc/systemd/system/local-fs.target.wants/tmp.mount

Если у вас нет файла /etc/systemd/system/local-fs.target.wants/tmp.mount, или если нет systemd, то добавьте в /etc/fstab такую строку:
Код:

tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
По умолчанию RAM-диски создаются с максимальным размером 50% от всей оперативной памяти, если вы хотите их сильнее ограничить (или наоборот, увеличить), то добавьте к параметрам монтирования параметр size, например, так:
Код:

tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=4096M 0 0
 tmpfs /var/tmp tmpfs defaults,noatime,mode=1777,size=512M 0 0
 tmpfs /var/log tmpfs defaults,noatime,mode=0755,size=1024M 0 0


2. Системные настройки

2.1. Отключение readahead (упреждающего чтения данных в кэш)

На SSD эта функция не нужна, т.к. SSD имеют крайне низкое время поиска (seek time), по сравнению с HDD.

Если у вас есть systemd, отключите readahead так:
Код:

systemctl disable systemd-readahead-collect.service
 systemctl disable systemd-readahead-replay.service

Если нет systemd, то добавьте эти строки в файл /etc/rc.d/boot.local (или его аналог в вашем дистрибутиве):

Код:

# turn drive caching on, turn readahead off
hdparm -W1a0A0 /dev/sda

вместо /dev/sda укажите обозначение вашего SSD, если оно другое.


2.2. Отключение свопа

Имея кучу гигабайт оперативы и SSD, своп становится бесполезен, всвязи с чем его рекомендуется отключать. Для этого добавьте в /etc/sysctl.conf (или его аналог в вашем дистрибутиве) строку
Код:

vm.swappiness=0
Если вы используете множество софта, требовательного к оперативе, то всей памяти может не хватить, для этого имеет смысл поднять значение swappiness до 1-5, например:
Код:

vm.swappiness=1
Если вы обычно не забиваете всю память софтом, и не пользуетесь гибернацией (я в принципе не рекомендую ей пользоваться, т.к. параноик) то имеет смысл вообще удалить раздел swap, чтобы освободить несколько драгоценных гигабайт места на SSD :)
И вообще не забивайте свой SSD, чем больше на нём свободного места, тем дольше он проживёт.


2.2. Изменение планировщика ввода-вывода

Обычно по-умолчанию в дистрибутивах используется планировщик CFQ, который неплохо ведёт себя с HDD, но не подходит для SSD. Для SSD лучше подходит планировщик Noop, работающий по простой схеме FIFO ("первый пришёл - первый вышел").

Если у вас в системе нет других дисков, кроме SSD, то нужно добавить параметр elevator=noop в параметры загрузки ядра (ищите в /boot/grub/menu.lst или /boot/grub2/grub.cfg строку с "kernel /vmlinuz-.... root=/.... " или "linuxefi /vmlinuz-.... root=/.... " и дописывайте elevator=noop в её конец. для загрузчика LILO инструкцию сами найдёте).

Если в системе есть другие диски, то добавьте в /etc/rc.d/boot.local (или его аналог) такие строки:
Код:

# noop scheduler for SSD
echo noop > /sys/block/sda/queue/scheduler

вместо sda укажите обозначение вашего SSD, если оно другое.


2.3. Logical Volume Management

если вы используете LVM, то измените в /etc/lvm/lvm.conf параметр issue_discards = 0 на issue_discards = 1
но помните про особенности работы discard в разных SSD (типа samsung 840)! Если вы не уверены в своём SSD, лучше оставить issue_discards = 0.


2.4. 12309

Если вы используете KDE и испытываете тормоза системы при копировании больших файлов, рекомендуется сделать такую настройку: создайте файл /etc/tmpfiles.d/local.conf и пропишите в него строки
Код:

w /sys/kernel/mm/transparent_hugepage/enabled - - - - madvise
w /sys/kernel/mm/transparent_hugepage/defrag - - - - madvise
w /sys/kernel/mm/transparent_hugepage/khugepaged/defrag - - - - 0


3. Настройки софта

3.1. Firefox

Фаерфокс можно настроить так, что он будет хранить свой кэш в RAM-диске (но конфиги, закладки, плагины и т.п. он все равно будет хранить на харде).
Для переноса кэш в рамдиск откройте в адресной строке адрес about:config,
найдите параметр browser.cache.disk.enable и измените на "false"
найдите параметр browser.cache.memory.enable и измените на "true"
найдите параметр browser.cache.memory.max_entry_size и пропишите объём оперативы (в килобайтах), который хотите выделить под кэш. Например, 1024000 для 1 GB, или -1 для автоматического выбора объёма.


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

julpierto 23.02.2014 08:57

Мне понравилась вот эта статья, настраивал по ней.

SynQ 23.02.2014 09:23

Добавлю, user_xattr для ext4 включен по дефолту где-то с версии 3.0.

PS И самое важное, эти настройки не обязательны, и наверно даже не "желательны для всех", :) а нужны тем, кто понимает, зачем они ему.
ssd будет работать и без оптимизаций, и наверняка не сломается.
Берите хорошие, на проверенных временем контроллерах (sandforce, marvell, самсунг), от производителей, которые сами память делают, а не покупают с рынка. Что-то вроде plextor (они память не делают сами, но по отзывам вполне норм) / sandisk / samsung / toshiba.

b3 23.02.2014 15:11

Цитата:

И вообще не забивайте свой SSD, чем больше на нём свободного места, тем дольше он проживёт.
Вот чисто моё имхо но мне статья напоминает бомжа) Не покупайте вообще SSD и ваш простой винт проживет еще дольше... Вам мало тех 2-3 лет что заявлены?) Не забивать винт, какие еще будут рекомендации? Может сократить своё прибывание за компом?)

12309 23.02.2014 15:39

забыл добавить.
Важно: не напрягайте SSD частыми записями! Компилируйте сорцы в рамдиске!


> Вам мало тех 2-3 лет что заявлены?)

мой corsair force gt на 480 гб сдох за 3 месяца использования. если бы я пользовался всеми вышеуказанными советами, он с большой вероятностью прожил бы намного дольше.

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

> Может сократить своё прибывание за компом?)

вспомни три основных правила информационной безопасности :)
1. Не покупайте компьютер.
2. Если вы купили компьютер, не включайте его.
3. Если вы включили компьютер, не пользуйтесь им.

AiR0 27.02.2014 11:43

из всего рекомендованного использовал только atime, работаю во freebsd
с разницей в год умерло уже 2 ssd, 1 - kingston, 2 - ocz, после смерти первого, делаю регулярные бэкапы, сейчас взял intel

CfK 24.01.2017 19:49

1. Использовать F2FS для SSD, EMMC, etc
2. Почти все, что написано можно опровергнуть, за исключением ramdisk и noatime.
3. ZRAM (опция ядра CONFIG_ZRAM + ZPOOL + CONFIG_ZBUD + CONFIG_Z3FOLD).
4. ZSWAP (опция ядра CONFIG_ZSWAP)
5. ZSMALLOC for SLAB (опция ядра CONFIG_ZSMALLOC + CONFIG_SLAB) (@arm only!, x86 - amd64 - use SLUB!)
4. KSM (опция ядра CONFIG_KSM не совсем по топику, но тоже хорошо).
5. Для генты есть https://wiki.gentoo.org/wiki/Zram.
С сжатием lz4 получаем 3х кратное увеличение объма рамдиска. итого на 16гб имеею:
Цитата:

# /tmp ; 2G used, expanded to 6G with lz4
# If you use this, you should put zram-init into the boot runlevel,
# and services using /tmp should be in the default runlevel and/or have
# rc_need=zram-init in their /etc/conf.d/... file
type0=/tmp
flag0=ext4
size0=6144
opts0="nodev,nouser,noatime"
mode0=1777
owgr0= # No reason to change the default "root:root"
notr0= # keep the default on linux-3.15 or newer
maxs0=2
algo0=lz4

# /var/tmp ; 4G used, expanded to 12G with lz4
type1=/var/tmp
flag1=ext4
size1=12880
opts1="nodev,nouser,noatime"
mode1=1777
owgr1= # No reason to change the default "root:root"
notr1= # keep the default on linux-3.15 or newer
maxs1=2
algo1=lz4
, остается еще 10. Вполне достаточно.
6. Остальные нюансы можно прочесть https://wiki.archlinux.org/index.php/ZRAM


Часовой пояс GMT +3, время: 06:18.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot