swap на SSD

Jun 20, 2016 01:53

Поскольку у моего десктопа мало памяти (2 ГиБ), я решил добавить swap на SSD. Опасения, что так я быстро угроблю SSD, оказались напрасными.

Посчитаем, сколько данных в день можно записывать на SSD, чтобы он прослужил 10 лет. Максимальное количество записанных данных для моего SSD равно 150 ТБ. 150 ТБ/(10*365.25 день) = 41 ГБ/день.

Перед реализацией этой идеи я в течение нескольких дней собирал статистику. Количество данных, записанных в swap за день, грубо равно 1 ГБ. Кстати, оно не зависит от того, swap находится на SSD или HDD. Оно примерно равно количеству данных, записанных в корневую файловую систему (она также включает «/home»). Так что опасность скорее исходит от той неведомой хрени, которую Линукс записывает по своей инициативе. Следовательно, угробить SSD штатной работой не получится.

А вот нештатная ситуация опасна. Например, какая-то программа (был такой случай, AMule) сходит с ума, начинает интенсивно использовать swap, а вы в этот момент не работаете за компьютером и не замечаете этого. К счастью, Линукс позволяет ограничить скорость записи с помощью cgroups.

Посчитаем максимальную скорость записи. Допустим, нештатная ситуация будет происходить раз в неделю, я буду отсутствовать 8 часов. Тогда максимальная скорость записи 41 ГБ/день * 7 день / (8*60*60 с) = 9,5 МиБ/с.

Чтобы ограничивать скорость записи при загрузке ОС, добавим в файл /etc/udev/rules.d/61-$NAME.rules правило UDev ACTION=="add", KERNEL=="sd[a-z]", ATTRS{model}=="TS128GSSD370S ", RUN+="/usr/local/bin/ssd-throttle %k", которое запускает следующую программу.

#!/usr/bin/python
import os
import sys
device_number_file = "/sys/class/block/"+sys.argv[1]+"/dev"
device_number = open(device_number_file, "r").read()[:-1]
open("/sys/fs/cgroup/blkio/blkio.throttle.write_bps_device", "a").write(device_number+" "+str(2**23)+"\n")

Задержки в работе программ при использовании swap, конечно, заметны. SSD не DRAM. Тем не менее, работать комфортно.

[Update 2016-07-09. Ещё полезная вещь: модуль ядра zswap, который сжимает данные в памяти. Благодаря ему количество виртуальной памяти увеличивается даже без использования swap за счёт вычислительный затрат на сжатие и разжатие. С другой стороны, он записывает в swap сжатые данные, то есть меньше данных, чем обычный swap.]

[Update 2016-08-18. При использовании zswap, если размер виртуального swap < 1/4 размера оперативной памяти, в физический swap не записывается ничего.]

linux

Previous post Next post
Up