Лабораторная 11.5 — Задержка и джиттер конвейера AXI DMA¶
Цель¶
Смоделировать пропускную способность, задержку и джиттер на уровне пакетов для упрощённого runtime-конвейера Zynq:
- входной этап DMA;
- этап DSP на FPGA;
- выходной этап DMA;
- конечная глубина очередей и потери пакетов.
Зачем это нужно¶
DSP-блок, корректный на бумаге, всё равно может отказать в работающей системе, потому что данные не успевают вовремя. Пакеты проходят DMA на входе, этап FPGA и DMA на выходе; каждый этап занимает переменное время, а у каждой передачи есть очередь конечной глубины. Если самый медленный этап не успевает за скоростью прихода, очереди заполняются и пакеты теряются; если успевает, цена: задержка и джиттер. Работа превращает это в числа, чтобы глубина очередей и размер пакета выбирались, а не угадывались.
Инженерный вопрос¶
Выдерживает ли конвейер целевую скорость пакетов при допустимых задержке и джиттере и какая глубина очередей для этого нужна?
Исполняемый файл¶
| Файл | Назначение |
|---|---|
blocks/block_11_integrated_sdr_project/python/lab_11_5_axi_dma_latency_jitter.py |
симуляция задержки/джиттера с конечными буферами |
Запуск из корня репозитория:
python blocks/block_11_integrated_sdr_project/python/lab_11_5_axi_dma_latency_jitter.py
Сгенерированные артефакты¶
docs/assets/lab115_axi_dma_latency_trace.png
docs/assets/lab115_axi_dma_latency_histogram.png
docs/assets/lab115_axi_dma_latency_metrics.json
Ключевые метрики¶
| Метрика | Смысл |
|---|---|
drop_ratio |
потерянные пакеты / предложенные пакеты |
mean_latency_us |
средняя сквозная задержка пакета |
p95_latency_us, p99_latency_us |
показатели «хвоста» задержки |
latency_jitter_std_us |
разброс задержки |
throughput_msample_per_s |
эффективная пропускная способность |
Чего ожидать¶
С моделью по умолчанию (800 пакетов по 4096 отсчётов при 2,4 МС/с, то есть один пакет каждые 1706,7 мкс; средние времена этапов 135 / 95 / 145 мкс с джиттером 22 / 14 / 24 мкс; очереди по 10 пакетов) корректный запуск печатает:
Processed/dropped packets: 800/0
Drop ratio: 0.0000
Latency mean/p95/p99 (us): 373.55/430.19/453.33
Latency jitter std (us): 33.81
Throughput (Msample/s): 2.402
Как читать:
- Средняя задержка 373,6 мкс это по сути сумма трёх средних времён этапов (135 + 95 + 145 = 375): без очередей пакет просто проходит по этапам.
- p99 равен 453 мкс, на 80 мкс выше среднего. В отчёте приводят «хвост» задержки, потому что дедлайн реального времени определяется худшими пакетами, а не средним.
- Ноль потерь здесь: не открытие, а запас. Даже самому медленному этапу (145 мкс) нужно лишь около 8,5 % от периода пакета 1706,7 мкс, поэтому очереди никогда не заполняются, а их глубина (10) намного больше необходимой. Интересная область работы: заметно быстрее или заметно медленнее этой по умолчанию; см. упражнения.
- Пропускная способность 2,402 МС/с равна предложенной скорости, как и должно быть, когда ничего не теряется.
Упражнения¶
- Самый медленный этап занимает 145 мкс. При какой частоте дискретизации период пакета падает до 145 мкс? Предскажите долю потерь чуть выше этой частоты, измените
sample_rate_hzи проверьте. - При скорости, близкой к насыщению конвейера, уменьшите обе глубины очередей с 10 до 1, затем до 2. Как изменятся потери и p99 задержки и почему глубина очереди не помогает по-настоящему перегруженному конвейеру?
- Уменьшите
samples_per_packetвдвое. Задержка на пакет падает, но накладные расходы на пакет теперь важнее; набросайте, как вы выбирали бы размер пакета для собственного проекта.
Чек-лист отчёта¶
- Указаны допущения о размере пакета и частоте дискретизации.
- Приложены график задержки во времени и гистограмма.
- Указаны средняя/p95/p99 задержки.
- Указаны джиттер и доля потерь.
- Дана рекомендация по глубине очереди для целевой пропускной способности.