Рейтинг:1

Почему параметры кольца NIC не заданы заранее в соответствии с максимальными аппаратными возможностями?

флаг us

Проверьте кольцевой буфер NIC:

# ethtool -g eth0
Параметры кольца для eth0:
Предустановленные максимумы:
Прием: 4096
Мини-приемник: 0
Джамбо-прием: 0
Техас: 4096
Текущие настройки оборудования:
Прием: 256
Мини-приемник: 0
Джамбо-прием: 0
Техас: 256

Можно установить «RX/TX» до предела, указанного в «Предустановленных максимумах», например:

# ethtool -G eth0 rx 4096 rx 4096

Вопрос: по умолчанию ;, почему они установлены так низко (на каждом сервере, который у меня есть, все они имеют 256) вместо более высокого значения или их максимальные аппаратные возможности? Есть ли недостатки (если да, то какие?) Увеличение этих значений?

ewwhite avatar
флаг ng
Хороший вопрос!!
Рейтинг:1
флаг cn

Во-первых, номера, которые вы указали, не входят в байты как многие думают, они в дескрипторы (и размер дескриптора зависит от аппаратного обеспечения). Таким образом, когда вы увеличиваете длину кольца, вы запрашиваете выделение памяти в ядре для этих дескрипторов. В общем, вы хотите, чтобы эта память ядра находилась в кеше L1, чтобы обработка прерываний была максимально быстрой. Увеличение размера кольца делает это менее вероятным, а в некоторых случаях и вовсе невозможным.

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

Все вышеперечисленное приводит к простому эффекту ведра — при большем кольце снижается вероятность отбрасывания пакетов и увеличивается задержка в сети. Это может быть совершенно нормально, если вы передаете большие файлы по TCP, и может быть совершенно нежелательным, если вы представляете приложение с небольшими пакетами с малой задержкой (например, игры и т. Д.).

Числа по умолчанию, которые вы видите, являются разумным компромиссом между ними.

CrazyRabbit avatar
флаг us
Спасибо за это объяснение. Я использую приложение для обслуживания файлов через TCP, и у меня были ошибки fifo, поэтому на основе этого https://serverfault.com/questions/650596/meaning-of-rx-queue-csum-err-and-rx-fifo- ошибки я увеличил его. Есть ли способ, кроме проб и ошибок, увеличить это значение до «хорошего значения» между 256 по умолчанию и максимальным допустимым значением 4096?
Peter Zhabin avatar
флаг cn
@ user1773988, для конкретной рабочей нагрузки, для которой известен размер пакета, мы используем iperf с соответствующими параметрами для эмуляции нагрузки и просмотра производительности и загрузки ЦП системы (на которую также влияет этот параметр), чтобы найти золотую середину. Однажды нам пришлось установить их на кучу брандмауэров Linux в роли BRAS для бедняков в среде интернет-провайдера, и здесь методом проб и ошибок был единственный метод.
CrazyRabbit avatar
флаг us
Спасибо за ваш вклад. Дополнительный вопрос; можно ли их уменьшить ниже 256? Скажем, сервер Redis, небольшие пакеты, выделенный сетевой адаптер, rx и tx, установленные на 128?
Peter Zhabin avatar
флаг cn
@user1773988 user1773988 это значение можно снизить до 48 AFAIR, но вероятность отбрасывания пакетов увеличит esp в случае неожиданных всплесков pps. Redis — это TCP-приложение, и его отбрасывание не принесет никакой пользы. У меня нет личного опыта работы с малой задержкой, только с точки зрения интернет-провайдера, поэтому мы почти всегда повышали эти значения, но до определенного момента, основываясь на 24-часовой статистике мониторинга.

Ответить или комментировать

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