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

У нас запущено торговое приложение на основе Java, и в определенные периоды мы хотим установить максимальный приоритет для исходящего сетевого трафика в течение примерно 10 мс. Есть ли способ временно буферизовать весь входящий сетевой трафик в течение короткого периода времени, либо на сетевой карте, либо через процесс или буфер на нашем Redhat Linux box?

Основанием для этого является то, что входящий сетевой трафик в этот же период резко возрастает, и приложение, обрабатывающее этот трафик, отбирает циклы ЦП из процесса, который мы пытаемся расставить по приоритетам. У нас нет детального контроля над приложением, обрабатывающим входящий сетевой трафик.

У нас соединение 1 Гбит / с, поэтому достаточно буфера около 1 МБ. Мы бы предпочли не отбрасывать входящий трафик и запрашивать повторную передачу, так как это увеличило бы нагрузку на нашу сеть в течение довольно загруженных периодов.

3 ответа


Можно использовать Qos на маршрутизаторе или использовать trickle для управления пропускной способностью с помощью примера конфигурации:

   /etc/trickled.conf.


см. пример в URL.

Я не уверен, правильно ли я понимаю вашу проблему. Иногда вы беспокоитесь о том, что у вас есть приоритет для работы с выходным сетевым трафиком, и в это время входящий трафик будет накапливаться и, в конечном итоге, может вызвать отбрасывание пакета или повторную передачу, которая вам не нужна. Поэтому вы хотите буферизовать входящий трафик.

Если мое понимание верно и вы используете TCP, попробуйте увеличить размер вашего tcp-буфера. http://kaivanov.blogspot.com/2010/09/linux-tcp-tuning.html и затем используйте netstat, чтобы проверить, действительно ли ваши изменения вступили в силу.

Адриан, вы пытались установить приоритет вашего процесса исходящей связи, чтобы он был выше, чем у процесса, получающего входящие данные? С использованием nice Команда этого может быть достигнута. Обратите внимание, что в Unix/Linux чем меньше число, тем выше приоритет.

В противном случае я не уверен, что это возможно без прямой связи между двумя приложениями, которые отправляют / получают, что позволяет вам эффективно игнорировать входящие соединения, с которых можно считывать данные, до тех пор, пока любые ваши данные не будут отправлены.

Другие вопросы по тегам