SSD: различия между версиями

Материал из ALT Linux Wiki
м (чуточку подновил (статье бы не помешала более увесистая доза внимания))
Строка 12: Строка 12:


== Минимизация записи ==
== Минимизация записи ==
Количество циклов перезаписи для flash-памяти ограничено, поэтому при всех предпринимаемых производителями мерах по [http://lwn.net/Articles/428793/ wear leveling] стоит по возможности снизить запись на разделы, размещённые на SSD-накопителе (особенно мелкоблочную случайного характера).
Количество циклов перезаписи для flash-памяти ограничено, поэтому при всех предпринимаемых производителями мерах по [http://lwn.net/Articles/428793/ wear leveling] стоит по возможности снизить запись на разделы, размещённые на SSD-накопителе (особенно мелкоблочную случайного характера, для которой ожидаема высокая степень write amplification).


=== временные файлы ===
=== временные файлы ===
Строка 19: Строка 19:
=== журналы ===
=== журналы ===
* десктоп: рекомендуется отключить ({{cmd|chkconfig syslogd off; service syslogd stop}})
* десктоп: рекомендуется отключить ({{cmd|chkconfig syslogd off; service syslogd stop}})
* сервер: стоит пересмотреть конфигурацию syslog (см. {{path|/etc/syslog.conf}}).
* сервер: стоит пересмотреть конфигурацию syslog (см. {{path|/etc/syslog.*}}).


=== своп ===
=== своп ===
Строка 26: Строка 26:
== Настройки ==
== Настройки ==
=== block layer ===
=== block layer ===
Рекомендуется выставить планировщик ввода-вывода <tt>noop</tt> или <tt>deadline</tt><ref><tt>deadline</tt> вроде как больше подходит для контроллеров недорогих SSD, которые могут "захлебнуть" запись; <tt>noop</tt> чуть дешевле по CPU</ref>, добавив в {{path|/etc/sysfs.conf}} ({{pkg|sysfsutils}}) строку
Можно выставить планировщик ввода-вывода <tt>noop</tt> или <tt>deadline</tt><ref><tt>deadline</tt> вроде как больше подходит для контроллеров недорогих SSD, которые могут "захлебнуть" запись; <tt>noop</tt> чуть дешевле по CPU</ref>, добавив в {{path|/etc/sysfs.conf}} ({{pkg|sysfsutils}}) строку
  block/sda/queue/scheduler = deadline
  block/sda/queue/scheduler = deadline
применение «на лету»:
применение «на лету»:
Строка 39: Строка 39:
=== файловые системы ===
=== файловые системы ===
Некоторые ФС уже обзавелись<ref>Linux 2.6.33++</ref> поддержкой SSD, которую стоит задействовать — сперва проверив при помощи {{cmd|mount -o remount,option&#61;value}} вручную и затем аккуратно зафиксировав в {{path|/etc/fstab}}.
Некоторые ФС уже обзавелись<ref>Linux 2.6.33++</ref> поддержкой SSD, которую стоит задействовать — сперва проверив при помощи {{cmd|mount -o remount,option&#61;value}} вручную и затем аккуратно зафиксировав в {{path|/etc/fstab}}.
В последнее время считается, что рекомендуемым вариантом является периодическое выполнение команды {{cmd|fstrim -a}}, а не применение опций ФС для немедленной отработки TRIM по освобождаемому пространству.  Одновременное применение опций ФС и {{cmd|fstrim}} не имеет смысла.


==== общие ====
==== общие ====
Строка 44: Строка 46:


==== ext4 ====
==== ext4 ====
* обязательно при поддержке [[ruwp:TRIM_(команда_SSD)|TRIM]] накопителем: <tt>discard</tt>
* желательно: <tt>data=writeback,delalloc,nobarrier</tt>
* желательно: <tt>data=writeback,delalloc,nobarrier</tt>
* при поддержке [[ruwp:TRIM_(команда_SSD)|TRIM]] накопителем: <tt>discard</tt>
* возможно<ref>почитайте {{cmd|man mount}} и подгоните под свою ситуацию!</ref><ref>замечено, что как минимум под 2.6.39-pure-emerald-alt6 <tt>max_batch_time</tt> получает значение <tt>min_batch_time</tt>, см. {{path|/proc/mounts}}</ref>: <tt>stripe=1024,commit=NN,max_batch_time=NNNNN,min_batch_time=NNNN</tt>
* возможно<ref>почитайте {{cmd|man mount}} и подгоните под свою ситуацию!</ref><ref>замечено, что как минимум под 2.6.39-pure-emerald-alt6 <tt>max_batch_time</tt> получает значение <tt>min_batch_time</tt>, см. {{path|/proc/mounts}}</ref>: <tt>stripe=1024,commit=NN,max_batch_time=NNNNN,min_batch_time=NNNN</tt>


для использования опции монтирования data=writeback для корневой файловой системы (/)  нужно также добавить в параметры загрузки ядра:
для использования опции монтирования data=writeback для корневой файловой системы (/)  нужно также добавить в параметры загрузки ядра:
rootflags=data=writeback
rootflags=data=writeback


==== btrfs ====
==== btrfs ====
* обязательно: <tt>ssd</tt> (btrfs автоматически применяет опцию <tt>ssd</tt>, если видит SSD)
* <tt>ssd</tt> (btrfs автоматически применяет опцию <tt>ssd</tt>, если видит SSD)
* обязательно при поддержке TRIM накопителем: <tt>discard</tt>
* при поддержке TRIM накопителем: <tt>discard</tt>


== Примечания ==
== Примечания ==

Версия от 17:16, 11 октября 2020


Использование ALT Linux на твердотельных дисках

SSD (Solid State Drive, твердотельный накопитель) — перспективный вид постоянной памяти, отличающийся высокой скоростью и низкой латентностью доступа, который уже пригоден для использования в десктопных и серверных задачах.

Несмотря на эти достоинства и совместимость с обычными SATA HDD по интерфейсу большинства моделей, начинка радикально отличается по поведению и без учёта этой разницы можно получить снижение производительности и сокращение срока службы.

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

Вкратце — как и для HDD с размером сектора более 512 байт или страйповых RAID, для получения разумной производительности необходимо учитывать размер физического блока[1] при разбиении устройства на разделы. Может быть достаточно отделить первые 1—4[2] двоичных (sic!) мегабайта и начинать первый раздел с 2048-го или 8192-го сектора размером в 512 байт; текущий fdisk сделает это автоматически, инсталер 6.0+ — тоже.

Минимизация записи

Количество циклов перезаписи для flash-памяти ограничено, поэтому при всех предпринимаемых производителями мерах по wear leveling стоит по возможности снизить запись на разделы, размещённые на SSD-накопителе (особенно мелкоблочную случайного характера, для которой ожидаема высокая степень write amplification).

временные файлы

Рекомендуется /tmp на tmpfs (по умолчанию в 4.0+) совместно с pam_mktemp. Можно обдумать отключение дискового кэша браузера.

журналы

  • десктоп: рекомендуется отключить (chkconfig syslogd off; service syslogd stop)
  • сервер: стоит пересмотреть конфигурацию syslog (см. /etc/syslog.*).

своп

При достаточном количестве RAM можно обдумать/проверить работу без раздела/файла подкачки (либо вынести его на HDD).

Настройки

block layer

Можно выставить планировщик ввода-вывода noop или deadline[3], добавив в /etc/sysfs.conf (sysfsutils) строку

block/sda/queue/scheduler = deadline

применение «на лету»:

echo noop > /sys/block/sda/queue/scheduler

VFS

Рекомендуется добавить в /etc/sysctl.conf строку

vm.laptop_mode = 5

применение «на лету»:

sysctl -w vm.laptop_mode=5

файловые системы

Некоторые ФС уже обзавелись[4] поддержкой SSD, которую стоит задействовать — сперва проверив при помощи mount -o remount,option=value вручную и затем аккуратно зафиксировав в /etc/fstab.

В последнее время считается, что рекомендуемым вариантом является периодическое выполнение команды fstrim -a, а не применение опций ФС для немедленной отработки TRIM по освобождаемому пространству. Одновременное применение опций ФС и fstrim не имеет смысла.

общие

  • обязательно: noatime[5] или хотя бы relatime (по умолчанию с 4.0+, кажется)

ext4

  • желательно: data=writeback,delalloc,nobarrier
  • при поддержке TRIM накопителем: discard
  • возможно[6][7]: stripe=1024,commit=NN,max_batch_time=NNNNN,min_batch_time=NNNN

для использования опции монтирования data=writeback для корневой файловой системы (/) нужно также добавить в параметры загрузки ядра:

rootflags=data=writeback

btrfs

  • ssd (btrfs автоматически применяет опцию ssd, если видит SSD)
  • при поддержке TRIM накопителем: discard

Примечания

  1. ...даже если про него железка смело врёт, что "512 bytes"!
  2. см. тж. flashbench и здесь
  3. deadline вроде как больше подходит для контроллеров недорогих SSD, которые могут "захлебнуть" запись; noop чуть дешевле по CPU
  4. Linux 2.6.33++
  5. также включает nodiratime
  6. почитайте man mount и подгоните под свою ситуацию!
  7. замечено, что как минимум под 2.6.39-pure-emerald-alt6 max_batch_time получает значение min_batch_time, см. /proc/mounts

Ссылки

обзорные

предметные