UDP-пакеты не отправлены вовремя

Я работаю над приложением C ++, которое можно квалифицировать как маршрутизатор. Это приложение получает пакеты UDP по заданному порту (почти 37 байтов в секунду) и должно передавать их другим адресатам в течение 10 мс. Однако иногда после приема пакета повторная передача превышает предел 10 мс и может достигать 100 мс. эти задержки запрещены.
Приложение получает по тому же интерфейсу Ethernet, но через другой порт другие типы пакетов (до 200 пакетов почти 100 байтов в секунду). Я не уверен, что этот более поздний поток нарушает другой, потому что эти пики задержки слишком редки (2 пакета из 10000 пакетов)

Каковы могут быть причины этих спорадических задержек? И как их решить?

Постскриптум Мое приложение работает на Linux 2.6.18-238.el5PAE. Задержки измеряются между приемом пакета и после успешной передачи!

Изображение должно быть более четким:
введите описание изображения здесь

1

Решение

10 мс — жесткий срок для ОС не в реальном времени.

  • Назначьте свой процесс одной из политик планирования в реальном времени, например, SCHED_RR или SCHED_FIFO (некоторое чтение). Это можно сделать в коде через sched_setscheduler () или из командной строки через CHRT. Отрегулируйте также приоритет, пока вы на нем.

  • Убедитесь, что ваш код не потребляет процессор больше, чем должен, иначе это повлияет на производительность всей системы.

  • Вам также может понадобиться RT_PREEMPT патч.

В целом, задача генерации трафика Ethernet для планирования в Linux не простая. Например. увидеть BRUTE, высокопроизводительный генератор трафика; может быть, вы найдете что-то полезное в его коде или в исследовательской работе.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector