Новая реализация устранила зависания и хаос в коде.
В DragonFlyBSD наконец-то появилось важное и интересное обновление — на прошлой неделе в систему был внедрён новый модуль шифрования дисков под названием dm_target_crypt_ng. Это переработанная версия модуля DM-crypt, совместимая с одноимённой реализацией в Linux. За разработку отвечает Майкл Нойман, один из активных участников проекта DragonFlyBSD.
В отличие от старого варианта, новый модуль больше не использует устаревшие и сложные в обслуживании подсистемы opencrypto и cryptodev. Вместо этого используется собственный набор реализаций симметричных блочных шифров, что заметно упростило архитектуру и избавило от асинхронных ловушек, вызывавших зависания и проблемы с отзывчивостью системы.
Одним из ключевых улучшений стало повышение интерактивности. Раньше при запуске тестов, например утилиты blogbench, система буквально «замерзала» — мышь останавливалась, и общая отзывчивость падала. Новый модуль dm_target_crypt_ng лишён этого недостатка: даже под нагрузкой курсор мыши продолжает двигаться плавно, а производительность осталась примерно на том же уровне. Более того, результаты тестов слегка улучшились — например, число операций чтения увеличилось с 200 тысяч до 203 тысяч.
Технически новая система организована через два пула рабочих потоков, привязанных к конкретным процессорам. Один отвечает за расшифровку (чтение), другой — за шифрование (запись). Такой подход обеспечивает большую справедливость при распределении нагрузки. Для чтения не требуется дополнительной памяти, а запись использует общую очередь, как и раньше, чтобы зашифровать данные перед отправкой.
На данный момент поддерживаются только два алгоритма — AES-CBC и AES-XTS. Другие, более надёжные, но медленные алгоритмы, такие как Twofish и Serpent, пока отключены из-за отсутствия аппаратной поддержки, но могут быть возвращены при необходимости.
Попробовать новый модуль можно уже сейчас, добавив строку dm_target_crypt_ng_load=YES
в конфигурационный файл /boot/loader.conf
. Однако есть нюанс: при использовании swapon
модуль может не загрузиться автоматически, так как утилита по-прежнему ищет старый dm_target_crypt
.
Майкл Нойман планирует сделать новую версию модуля основной по умолчанию и удалить старую после дополнительного тестирования и получения обратной связи от пользователей. За последние несколько дней в репозиторий уже поступили обновления с улучшениями API и поддержкой новых алгоритмов — в том числе вернули Twofish и Serpent в режимах CBC и XTS.
Проект DragonFlyBSD не выпускал стабильных релизов уже более двух лет — последняя версия 6.4 вышла в 2022 году. Хочется верить, что новый модуль шифрования станет частью скорого релиза, который объединит в себе все накопленные улучшения.