FPGA ловит редкие гонки в когерентной шине, не сохраняя её трассу
Редкая ошибка в cache coherence почти никогда не выглядит как один подозрительный пакет. Её выдаёт порядок событий: запрос пришёл, ответ задержался, соседнее ядро успело изменить строку кэша, затем возник тайм-аут или лишняя инвалидация. Для такой сцены бесполезно смотреть на одиночный заголовок. Нужна память о том, что уже пролетело по шине.
Исследователи ETH Zürich, SBB и Huawei встроили такую память в FPGA-половину платформы Enzian. Процессор Marvell ThunderX-1 и Xilinx Virtex UltraScale+ связаны когерентным ECI-интерфейсом: два линка по 12 последовательных линий 10 Gb/s. Заявленная теоретическая полоса ECI составляет 30 GiB/s; сам транспорт имеет сигнальные и протокольные накладные расходы, поэтому это нельзя читать как измеренную полезную скорость экспорта трассы.
Dryas стоит рядом с этим трафиком и сначала извлекает из сообщений заранее выбранные признаки: например, opcode и адрес cache line. Затем их принимает оверлей из state-transition elements — аппаратный NFA, недетерминированный конечный автомат. Несколько его состояний могут оставаться активными параллельно. Поэтому одна и та же посылка способна продолжить сразу несколько ветвей поиска, как и требуется для перекрывающихся транзакций и неоднозначных последовательностей coherent-трафика.
Здесь FPGA работает как прибор, встроенный в объект измерения. Вместо захвата всего потока она проверяет гипотезу на каждом такте и выпускает совпадения с временными метками. Авторы показывают block-layer сценарий длительностью около пяти секунд: полный след оценён в 1.2 TiB, а отбор сократил объём захвата более чем в 10^5 раз. Для него хватило NFA из трёх элементов состояний; конфигурация с timestamping заняла около 21 тыс. LUT и 32 тыс. триггеров.
Другой пример разбирает cache misses. Автомат из семи состояний различает compulsory miss, coherency miss и общий класс capacity/conflict по сообщениям ECI. Здесь важна граница метода: capacity и conflict на доступных признаках не разделяются. В block-layer фильтр также оставляет false positives, которые дочищаются постобработкой. Dryas сокращает область поиска, а не выдаёт готовую безошибочную семантическую историю программы.
Шаблон поиска загружается менее чем за секунду без остановки приложения и без перепрошивки bitstream. Свобода при этом имеет чёткую геометрию: набор извлекаемых полей, число состояний, допустимый fan-in, связность автомата и число независимых потоков задаются при synthesis. Более крупный и связный NFA требует больше LUT и FF, а timing closure становится жёстче.
Идея FPGA-трассировки ECI с NFA уже появлялась в работах группы в 2021 году. Новая работа развивает её в более явный программируемый движок анализа. Самый сильный инженерный сдвиг остаётся прежним: при потоке такого масштаба сначала приходится решить, какое событие достойно памяти. Хранилище включается лишь после того, как аппаратный автомат увидел нужную драму на проводе.
### Источники
[1] [Dryas: A Reprogrammable Engine for High-Speed Interconnect Tracing and Analysis, arXiv:2608.12934](arXiv:2608.12934). [2] [Полный текст препринта с архитектурой, ресурсами и экспериментами](arXiv:2608.12934). [3] [Описание инфраструктуры Enzian и ECI от ETH Zürich](https://systems.ethz.ch/research/data-processing-on-modern-hardware/hardware-acceleration-infrastructure.html). [4] [Разбор физической структуры и измерений ECI](https://enzian.systems/techblog/2022/01/14/HowFastIsECI/).