Как tcp_rmem sysctl влияет на использование оперативной памяти? - PullRequest
0 голосов
/ 24 апреля 2020

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

Например, если я установлю для tcp_rmem значение 1 МБ (мин.), 2 МБ (по умолчанию), 3 МБ (макс.). 1. Всегда ли оно выделяет 2 МБ на соединение или, если нужно, выделяет 2 МБ? 2. Начинается ли он с 1 МБ и когда видит, что 1 МБ недостаточно, затем выделяет 2 МБ, а когда видит, что 2 МБ недостаточно, выделяет 3 МБ. 3. Независимо от задержки, он всегда будет выделять 1 МБ, 2 МБ или 3 МБ в зависимости от входящей скорости?

Так что в моих тестах скорость постоянная, а задержка переменная. В 90% случаев задержка будет очень низкой. Но чтобы справиться с этими 10% случаев с высокой задержкой, мне нужно изменить tcp_rmem на высокое значение, что также влияет на 90% других сценариев ios.

Я не смог найти, как работает параметр tcp_moderate_rcvbuf? На основании каких параметров выделяется память.

1 Ответ

0 голосов
/ 27 апреля 2020

min, по умолчанию, max поля значений systcl tcp_rmem и tcp_wmem имеют следующее значение. min: всегда гарантируется, что минимальный размер буфера сокета будет выделен. Используя опцию сокета SO_RCVBUF, для буфера приема может быть любой размер. Но оно не может превышать макс.

по умолчанию: это общая сумма размера буфера сокета, выделенного по умолчанию. max: если явно установлено с использованием SO_RCVBUF, нельзя установить размер буфера сокета больше этого.

SO, если установлены более высокие значения min, default, max. Они всегда используются независимо от времени ожидания и пропускной способности.

...