Фон
Я хочу создать тестовое приложение для проверки производительности сети разных систем. Для этого я планирую, чтобы эта машина отправляла кадры Ethernet по частной (в противном случае не занятой) сети на другую машину (или устройство), которая просто получает сообщение и отправляет его обратно. Отправляющее приложение будет записывать общее время поездки туда и обратно (среди прочего).
Цель тестов - увидеть, как конкретная система (компоненты OS + и т. Д.) Выполняет , когда речь идет о сетевом трафике. Это показано как машина А на рисунке ниже. Обратите внимание, что я не заинтересован в производительности сетевой инфраструктуры (коммутаторы, кабели и т. Д.) - я пытаюсь проверить производительность сетевого трафика внутри компьютера A (то есть от когда он попадает в сетевую карту, пока не достигнет пользовательского пространства)
Мы будем (пытаться) измерить все виды вещей, одна вещь - это полная передача сообщения в обоих направлениях, а также такие вещи, как задержка прерывания машины A, общие издержки драйвера и т. Д. Машина A будет системой реального времени. Но для поддержки этих тестов мне нужна отдельная машина, которая может возвращать сообщения и другими способами добавлять сетевые стимулы в тестируемую систему. Эта отдельная машина - это машина B на рисунке ниже, и именно об этом вопрос.
Моя проблема
Я хочу разработать приложение, которое может получать и возвращать эти сообщения с максимально постоянной (и предпочтительно низкой) задержкой. Я надеюсь получить задержки, которые не меняются в течение нескольких микросекунд. Для простоты я хотел бы сделать это в ОС общего назначения, такой как Windows или Linux, но я открыт для других предложений. На компьютере не будет другой нагрузки (ЦП или иным образом), кроме операционной системы и моего тестового приложения.
Я думал о следующих подходах:
- Обычное приложение, работающее в пространстве пользователя с высоким приоритетом
- Поток, работающий в пространстве ядра, чтобы избежать переходов пространства пользователя / пространства ядра
- Готовое устройство, которое уже делает это (хотя я не нашел одно)
Вопросы
Существуют ли другие подходы или, возможно, структуры, которые уже делают это? Что еще нужно подумать, чтобы получить постоянную и низкую задержку? Какой подход рекомендуется?