Чуть-чуть теории. Несколько слов о том, как можно повысить скорость OpenVPN соединения увеличив размер буферов в конфиге. Далее по заметке делюсь тем, что делал сам.
Итак, если кратко, размер буфера — это величина обозначающая максимальный объём данных, который будет передан за единицу времени. Так уж сложилось, что в OpenVPN этот параметр составляет 64КБ. При этом, количество отправленных пакетов на единицу времени ограничивается скоростью прохождения этих самых пакетов. Соответственно, чем ниже у нас будет скорость прохождения пакетов (чем больше будет пинг), тем ниже скорость работы OpenVPN мы получим.
Что делать в данной ситуации? Попробовать увеличить объём данных, который будет передаваться за единицу времени. В OpenVPN для этого предусмотрены параметры sndbuf и rcvbuf. Для того, что бы размер буфера задавался настройками ОС, в конфиг можно просто задать этим параметрам 0:
sndbuf 0 rcvbuf 0
Если возможности изменить конфиг клиента нет, то значения буфера нужно ему передать с помощью push. При этом, передавать мы будем сразу же большое знчение:
sndbuf 0 rcvbuf 0 push "sndbuf 524288" push "rcvbuf 524288"
При этом, мы можем обозначить и размер буфера в конфиге сервера, сделать вот так, например:
sndbuf 524288 rcvbuf 524288 push "sndbuf 524288" push "rcvbuf 524288"
Кроме того, размер буферов мы можем изменить и в настройках самой системы (далее речь о Linux). Если мы используем UDP в OpenVPN, то увеличить буферы можно передав значения для параметров net.core.rmem_default и net.core.wmem_default, при этом, передаваемые им значения мы делим на два. При использовании TCP, размер буферов увеличивается параметрами net.ipv4.tcp_rmem и net.ipv4.tcp_wmem.
В моём случае (после которого и появился этот разбор), на сервере использовался UDP, так что параметры были вот такими:
net.core.wmem_default = 212992 net.core.rmem_default = 212992
При этом, не стоит забывать что в системе существуют параметры net.core.rmem_max и net.core.wmem_max, значения которых, возможно, так же (в моём случае потребовалось) потребуется увеличить. Параметры отвечают за максимальный размер буфера для приёма и передачи данных.
По тестам на попугаях имею примерно следующее — слева результат до настройки буфера, а справа уже после тюнинга.
Результат в моём случае заметен.
MTU надо увеличивать при такоц настройке?
Я не увеличивал в данном случае, но по идее, большой MTU несколько разгрузит процессор, что должно дать небольшой прирост в производительности тоже. Как только до этого дойдут руки — протестирую и отпишусь отдельно, пожалуй.
Добрый день.
Я правильно понимаю,что это все редактируется в server.conf?
Да, sndbuf, rcvbuf и их push задаются в конфиге сервера. Ну а net.core.wmem_max и прочие параметры — это уже sysctl в системе.
«передаваемые им значения мы делим на два»
почему так?
В общем, воспользовался советом из данной статьи — действительно стало быстрее.
Еще наткнулся на вот это:
https://wiki.archlinux.org/index.php/Sysctl#Networking
на сервере почти все оттуда применил, что-то на ноуте. Хуже не стало
> почему так?
Я заморочился сегодня утром, но к сожалению точной ссылки не нашёл уже. Но общий смысл там был в том, что большой буфер для UDP может негативно сказаться на работу некоторых программ. Именно поэтому тогда для себя пометил, что для UDP его нужно делать меньшего размера.
А арчвики — да, полезного там много. Причём почти для любого современного дистрибутива.
сделал, как указано в данной статье, появились проблемы:
при любой нагрузке насеть скорость доходит до 3,5 мбайт в секунду и затем режется до 100 кбайт, снова доходит до 3,5 мбайт и снова режется.
вернул значения в конфиге сервера на 0, но проблема осталась, теперь в sysctl значения по умолчанию стоят 212992, ручная установка в sysctl.conf не помогает, при перезагрузке все раввно подставляются откуда-то 212992.
как быть? скорость так постоянно прыгает, нормально работать нельзя
Занятно. С подобным не сталкивался ни разу. Проблем с соединением до VPN сервера точно нет (потери пакетов и т. п.)? Провайдер чудить не может?
Опять же — если вернуть параметры «по умолчанию», будет ли проблема себя проявлять?
а если используется windows server 2012r2 то есть ли какой либо аналог управления net.core.wmem_default
В дополнительных настройках сетевухи. Буферы получения и передачи попробуй. Но не уверен.