AG
Все проекты

AI Block Dev: интеллектуальный блочный кэш

Исследовательский проект многоуровневого хранения: предиктивное размещение блоков между DDR, NVMe, SSD и HDD с безопасным возвратом к базовой политике.

C++20StorageMLCMakeDockerQEMU
AI Block Dev: интеллектуальный блочный кэш

Задача

В большинстве систем хранения действительно горячие данные - малая часть массива, но именно из-за них приходится переплачивать за память и 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