Назад | Перейти на главную страницу

Неточное ограничение пропускной способности в очередях altq

Я настраиваю среду, в которой у меня есть один сервер Linux, один маршрутизатор OpenBSD и один клиент Linux, и я хочу иметь возможность ограничивать полосу пропускания, которую должен использовать клиент.

Я проводил эти тесты с netcat и time (используя время для измерения времени передачи с netcat), и что происходит при попытке этих тестов (используя протокол TCP, очереди по какой-то причине не работают с UDP) заключается в том, что очереди совсем не точны.

Например: при установке ограничения пропускной способности в 10 Мбит клиент не может использовать более пяти Мбит, при установке ограничения в 100 Мбит клиент не может использовать более 50 Мбит.

Конфигурация выглядит так (в примере используется ограничение в 100 Мбит):

#queue rules
altq on { $int_if, $ext_if } cbq bandwidth 100Mb queue { def, low }
queue def bandwidth 0Mb cbq(default)
queue low bandwidth 100Mb cbq(default)

#Passrules test

pass out quick from $int_if to $ext_if queue low
pass in quick from $ext_if to $int_if queue low
pass out quick from $ext_if to $int_if queue low
pass in quick from $int_if to $ext_if queue low

По моему опыту, для того, чтобы altq работал хорошо, вам действительно нужно добавить red, rio или ecn вариант для ваших ограничивающих очередей, иначе по мере приближения к насыщению (физическому или виртуальной очереди) вы попадете в некоторые неприятные ситуации. Взгляните на раздел RED (случайное раннее обнаружение) в altq howto для получения дополнительной информации.

Кроме того, две проблемы с вашим фрагментом выше:

  1. У вас есть два default очереди: это не разрешено (на самом деле pf должен устроить фурор).
  2. У одной из ваших очередей нет полосы пропускания (0Мб)? - Наверное, это не то, что вы хотели / имели в виду ...