Цитата
Мануал на Intel 82599 10 GbE Controller просмотрел, но вот информации по реализации FIFO не нашёл,
если коротко, то там используются:
1) 512 кбайт буферного озу
2) SGDMA
3) DMA для чтения таблиц дескрипторов
4) 16 записей для указателей (видных через BAR)
5) 16 таблиц для дескрипторов для SGDMA
проц формирует в озу пк таблицы дескрипторов-указателей на буферы под хранение данных.
проц заполняет записи 4) -- слейвом (ака запись в target) -- самая медленная операция
после чего DMA 3) вычитывает из оперативки таблицы дескрипторов и складирует их себе в 5)
сетевка готова к приему.
по приему пакета SGDMA 2) берёт очередную запись из 5) и пишет данные из буфера 2) в озу пк по адресу, указанному в дескрипторе. посылает MSI.
при расходовании целых таблиц из 5) посылаются прерывания на пополнение таблицы дескрипторов.
проц снова формирует таблицу дескрипторов, пишет в 4) адрес где он эту табличку положил, и DMA 3) её вычитывает
Цитата
вычитка данных происходит со скоростью на 60 % больше чем запись
вы не можете контролировать процесс формирования готовности со стороны PCIe Root Complex, поэтому в любой момент DMA-передача по PCIe может застрять на очередном отправляемом куске TLB в 128 байт. соотношение максимальных пропускных способностей AXI и FIFO здесь погоды не делают.
Цитата
просто происходит остановка передачи Traffic Generator
в реальной жизни, в отличие от Traffic Generator-а остановить прилетающий поток невозможно.
провоцируем неудовлетворенных провокаторов с удовольствием.