Таннер, Джок Таннер (tanner_of_kha) wrote,
Таннер, Джок Таннер
tanner_of_kha

Cut by the edge

Недавно мне в руки попал китайский SSD. Вот такой.

Встал вопрос его использования. У меня уже когда-то был отрицательный опыт c довольно «породистым» драйвом, а тут и бренд не вызывает особого доверия. К тому же размер диска не то чтобы совсем маленький, но и не такой большой, чтобы поместить на него все мои данные. А я не хочу выбирать, какие файлы и директории нуждаются в ускоренном доступе, а какие − нет. Я хочу, чтобы техника сама об этом догадывалась. Поэтому я решил использовать SSD в качестве файлового кэша.

Я опробовал несколько современных технологий кэширования, используемых в Linux, и выбрал из них «наименьшее зло». Возможно, мой опыт кому-то пригодится.

Я рад был бы также ускорить и Windows, которую использую преимущественно для игр, но, к сожалению, аналогичные средства для Windows либо платные, либо ограничены поддержкой определённых чипсетов, либо используют медленные USB-устройства вместо SSD.

1. bcache

Плюсы:

  • модуль включён в мейнстримное ядро Linux,
  • не используется прослойка device-mapper,
  • поддерживает кэширование с обратной записью (writeback) на корневом диске.


Минусы:

  • необходимо пересоздавать раздел на кешируемом устройстве,
  • модуль использует блокировки, несовместимые с патчем rt-preempt. Из-за этого вариант отпал, и я перешёл к рассмотрению альтернатив.


2. EnhanceIO

Плюсы:

  • может использоваться на «живой» ФС, ничего переформатировать не нужно.


Минусы:

  • обратная запись не работает на корневом разделе,
  • разработка заброшена. Приходится перебирать разные форки, чтобы найти тот, что соберётся при помощи dkms с ядром старше 3.10. После этого нужно заставить утилиту eio_cli работать на современной системе. Всё это на ваш страх и риск, разумеется,
  • для ускорения загрузки официально рекомендуется собрать бинарный файл eio_cli при помощи PyInstaller и включить его в initramfs. Я знаю, как устроены бинарники, собираемые PyInstaller'ом, поэтому категорически отказался от использования EnhanceIO, несмотря на то, что его модуль вроде бы «взлетел».


3. lvmcache

Плюсы:

  • модуль включён в мейнстримное ядро Linux,
  • поддерживает кэширование с обратной записью (writeback) на корневом диске.


Минусы:

  • LVM и device-mapper − очень сложные подсистемы. Они незаменимы в продакшне, на облачных фермах и в хранилищах, но для использования в персональном компьютере − явный overkill,
  • пользовательский интерфейс LVM − образец мозговыносящей RedHat'овской креативности. Собственно, для каждого из трёх уровней, на которых работает LVM − физические тома, группы томов и логические диски − имеется отдельная группа утилит. Каждая утилита имеет впечатляющий набор команд и опций. Одного и того же результата зачастую можно добиться разными способами, с использованием разных утилит или разных команд/опций одной утилиты,
  • неочевидность, которая стоила мне несколько часов гугления и копирования: GRUB может читать данные, находящиеся на LVM-томе, но только на самом базовом, linear-уровне. Если же логический диск расположен на томе, созданном dm-raid, striped-томе или, как в моём случае, кэшированном томе − аллес капут, “error unknown filesystem”. Это тот случай, когда отсутствие фичи (если бы GRUB честно отказывался понимать LVM) намного лучше частично реализованной фичи.


Технология тоже оказалась не совсем очевидной. Первым делом на SSD выделяется физический том (PV), который будет служить кэшем. Затем этот «быстрый» том нужно включить в ту же группу (VG), в которой находится логический том-источник данных для кэширования (Origin LV). На появившемся в группе свободном пространстве организуется кэш-пул: “lvcreate --type cachepool”. Наконец, источник данных преобразуется в кэшируемый том командой “lvconvert --type cache” с указанием пула ключом “--cachepool”. Индикатором успеха служит сообщение: “Logical volume xxx is now cached”.

В конце концов цель была достигнута: время загрузки проекта в PyCharm сократилось с 40 секунд до 8.

Reposted from Code Tinkers Blog.

Subscribe
  • Post a new comment

    Error

    default userpic
  • 1 comment