Задача
В большинстве систем хранения действительно горячие данные - малая часть массива, но именно из-за них приходится переплачивать за память и NVMe. Классические LRU/LFU-политики реактивны: они узнают о горячем блоке постфактум и быстро деградируют на смешанной нагрузке.
AI Block Dev - исследовательский проект интеллектуального блочного кэша: заранее оценивать, какие регионы данных скоро понадобятся, насколько дорог промах по ним и где их выгоднее держать - в DDR, NVMe, SSD или оставить на HDD. Жёсткое требование к архитектуре: ускорение не имеет права ломать корректность хранения, любая ошибка модели должна безопасно переводить систему на базовую политику.
Архитектура
Два независимых контура.
Контур данных работает на горячем пути ввода-вывода: принимает read/write, переводит LBA в region, достает снимок признаков, запускает вывод и превращает результат в действие - положить блок в DDR, отправить в NVMe, сделать предзагрузку, удержать грязный регион или обойти кэш.
Контур управления живет отдельно и не мешает вводу-выводу: собирает телеметрию, обновляет статистику по эпохам, выпускает новые версии модели, сравнивает их через воспроизведение сценариев, следит за смещением режима нагрузки и при необходимости откатывает систему к консервативной политике.
Единица решений - не файл и не сектор, а region. Для каждого региона оцениваются вероятность скорого повторного чтения, вероятность read-after-write, последовательность доступа, стоимость промаха, давление на текущий уровень хранения. Вероятности переводятся в конкретные действия: promote_to_ddr, promote_to_nvme, demote_to_ssd, write_allocate / write_around, keep_dirty / flush_early, prefetch_neighbors и fallback_to_baseline, если модель не укладывается в бюджет или дает сомнительный результат.
Компоненты
- AI Cached Block Driver - концепция прозрачного блочного драйвера: размещение, предзагрузка, вытеснение, буферизация записи
- cpp_bayesian - моё C++20-ядро вероятностного вывода:
BayesianNetwork,DynamicBayesianNetwork,FactorTable,JunctionTree - Контур воспроизведения и отката - журналирование и повторный прогон сценариев нагрузки
- QEMU/devcontainer-лаборатория - безопасные эксперименты с блочными устройствами
Ключевые идеи
- Предиктивное многоуровневое размещение вместо реактивного LRU/LFU
- Разделение контура данных и контура управления: модель не трогает горячий путь
- Безопасный возврат к базовой политике как обязательная часть архитектуры
- Воспроизведение и откат как встроенные свойства системы, а не внешняя надстройка
Технический стек
- Язык: C++20
- Сборка: CMake
- ML/вывод: байесовы сети,
JunctionTree, факторные таблицы - Виртуализация и эксперименты: QEMU, Docker, devcontainer
