Обмен сообщениями в сети с низкой задержкой / высокой производительностью

Предпосылки

Я хочу создать тестовое приложение для проверки сетевой производительности различных систем. Для этого я планирую, чтобы эта машина отправляла кадры Ethernet через частную (в противном случае незанятую) сеть на другую машину (или устройство), которая просто получает сообщение и отправляет его обратно. Отправляющее приложение будет записывать общее время в оба конца (среди прочего).

Цель тестов - увидеть, как конкретная система (компоненты ОС + и т. Д.) Работает , когда дело касается сетевого трафика. Это показано как машина А на рисунке ниже.Обратите внимание, что меня не интересует производительность сетевой инфраструктуры (коммутаторы, кабели и т. Д.) - я пытаюсь проверить производительность сетевого трафика внутри машины A (т. Е. От когда он попадает в сетевую карту до тех пор, пока не достигнет пространства пользователя)

Мы (попытаемся) измерить все виды вещей, одна вещь - это общий проход сообщения в оба конца, а также такие вещи, как задержка прерывания машины A, общие издержки драйвера и т. д. • Машина A будет системой реального времени. Но для поддержки этих тестов мне нужна отдельная машина, которая может возвращать сообщения и другими способами добавлять сетевые стимулы к тестируемой системе. Эта отдельная машина - это машина B на картинке ниже, и именно об этом идет этот вопрос.

General overview of my test system

Моя проблема

Я хочу разработать приложение, которое могло бы получать и возвращать эти сообщения с максимально стабильной (и желательно низкой) задержкой. Я надеюсь получить задержки, которые будут постоянными, по крайней мере, в течение нескольких микросекунд. Для простоты я хотел бы сделать это в ОС общего назначения, такой как Windows или Linux, но я открыт для других предложений. На машине не будет никакой другой нагрузки (ЦП или какой-либо другой), кроме операционной системы и моего тестового приложения.

Я подумал о следующих подходах:

  • Обычное приложение, работающее в пользовательском пространстве с высоким приоритетом
  • Поток, работающий в пространстве ядра, чтобы избежать переходов между пользовательским пространством и пространством ядра
  • полочное устройство, которое уже делает это (хотя я его не нашел)

Вопросы

Есть ли какие-либо другие подходы или, возможно, фреймворки, которые уже делают это? О чем еще мне нужно подумать, чтобы получить стабильную и низкую задержку? Какой подход рекомендуется?

10
задан Isak Savo 4 January 2012 в 11:26
поделиться