Me

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.

Me

«Код-2»

Сегодня наша маленькая, но гордая команда решила подвизаться на поприще телевидения. Скоро мы снимем телешоу.

Расклад такой: двенадцать программистов собираются в тесной телестудии со своими лэптопами, открывают таск-трекер, запускают самые модные редакторы/IDE, и, пользуясь самыми модными ЯП и фреймворками, пытаются успеть завершить проект в срок, не загнувшись от кофеиновой интоксикации по ходу дела.

Разумеется, тут есть подвох. Один из них, двенадцати, носит клеймо PHP-программиста. Все знают об этом, но не знают, кто этот человек. Он же, в свою очередь, изо всех сил старается не выдать себя.

После каждого спринта команда устраивает митинг, чтобы выявить злодея и изгнать его (её) из своих рядов голосованием. Изгнанный (-ая) покидает студию без оплаты.

Если честным участникам команды удаётся избавиться от настоящего PHP-шника, оставшиеся в студии программисты продолжают работу над проектом и получают своё вознаграждение согласно контракту. Честно говоря, эта часть шоу вряд ли будет интересна кому-то, кроме самих кодеров. Если же, наоборот, злодей перехитрит команду и останется в студии один, он немедленно срывает джек-пот и уходит. (Прямо как в жизни.)

Как вы уже могли заметить, в игре достаточно места для стратегических манёвров. Сильные кодеры могут вначале сливать не самых слабых игроков, чтобы увеличить своё вознаграждение, но с оглядкой на объём работы и сроки. Слабые кодеры могут консолидировать свои голоса. Конечно, это не выглядит так забавно, если не принимать во внимание свойственную программистам асоциальность…

Как вы думаете, взлетит?

Reposted from Code Tinkers Blog.

Me

Золотой молоток

Где кончается здоровый прагматизм и начинается антипаттерн «Золотой молоток»?

Я уже давно подумываю заняться программированием логики на FPGA. Выбирал поначалу между SystemVerilog и VHDL, но теперь всё больше склоняюсь к MyHDL. Засада?

Reposted from Code Tinkers Blog.

Me

О сайте

  1. Как мы все знаем, Let’s Encrypt перешёл в открытый режим работы. Пригласительные больше не нужны; достаточно загрузить и запустить их клиент. Ограничения, связанные с количеством доменов в сертификате и частотой выдачи сертификатов убраны или ослаблены. По крайней мере, я легко получил сертификаты на 5 субдоменов, не считая «голый» домен.

    Я разобрался с установкой сертификатов (в прошлый раз я использовал в настройках nginx конечный сертификат вместо цепочки, что и вызывало недовольство со стороны браузеров), но делаю я это по-прежнему в ручном режиме: плагин для nginx всё ещё неюзабелен. Впрочем, коммиты в репо letsencrypt делаются каждый день, так что плагин рано или поздно допилят.

  2. Для зарегистрированных читателей моего блога теперь имеется возможность подписаться на получение на email комментариев на интересующие посты.

Reposted from Code Tinkers Blog.