Включить jumbo frame linux

Обновлено: 03.07.2024

В нашей городской сети более 30 тысяч абонентов. Суммарный объем внешних каналов — более 3 гигабит. А советы, данные в упомянутой статье, мы проходили еще несколько лет назад. Таким образом, я хочу шире раскрыть тему и поделиться с читателями своими наработками в рамках затрагиваемого вопроса.

В заметке описываются нюансы настройки/тюнинга маршрутизатора и NAT-сервера под управлением Linux, а также приведены некоторые уточнения по поводу распределения прерываний.

Прерывания

Раскидывание прерываний сетевых карт по разным ядрам — это самое первое, с чем сталкивается сисадмин при возрастании нагрузки на linux-маршрутизатор. В упомянутой статье тема освещена достаточно подробно — поэтому надолго останавливаться на этом вопросе мы не будем.

Хочу только отметить:

  • если вы вручную раскидываете прерывания, то вам необходимо остановить сервис irqbalance. Этот сервис предназначен как раз для автоматического регулирования прерываний между ядрами процессоров. Если вы делаете эту работу вручную — сервис лучше остановить;
  • не забудьте внести соответствующие правки в «автозагрузку» (например, /etc/rc.local) — т.к. после рестарта сервера все прерывания опять распределятся вкучку на одном ядре;
  • после рестарта сервера, сетевые карты могут получить (а скорее всего, именно так и будет) новые номера прерываний. Поэтому в /etc/rc.local лучше не вписывать руками конкретные номера прерываний — а автоматизировать с помощью вспомогательного скрипта распознавание, какая сетевая какое прерывание заняла.

Маршрутизатор

В первоначальной статье есть фраза «если сервер работает только маршрутизатором, то тюнинг TCP стека особого значения не имеет». Это утверждение в корне неверно. Конечно, на небольших потоках тюнинг не играет большой роли. Однако, если у вас большая сеть и соответствующая нагрузка — то тюнингом сетевого стека вам придется заняться.

Прежде всего, если по вашей сети «гуляют» гигабиты, то имеет смысл обратить свое внимание на MTU на ваших серверах и коммутаторах. В двух словах, MTU — это объем пакета, который можно передать по сети, не прибегая к его фрагментации. Т.е. сколько информации ваш один маршрутизатор может передать другому без фрагментирования. При значительном увеличении объемов передаваемых по сети данных, гораздо эффективнее передавать пакеты большего объема реже, — чем часто-часто пересылать мелкие пакеты данных.

Увеличиваем MTU на linux

/sbin/ifconfig eth0 mtu 9000

Увеличиваем MTU на коммутаторах

На коммутационном оборудовании обычно это будет называться jumbo-frame. В частности, для Cisco Catalyst 3750

Заметьте: коммутатор затем надо перезагрузить. Кстати, mtu jumbo касаются только гигабитных линков, — 100-мбит такая команда не затрагивает.

Увеличиваем очередь передачи на linux

/sbin/ifconfig eth0 txqueuelen 10000

По умолчанию значение стоит 1000. Для гигабитных линков рекомендуется ставить 10000. В двух словах, это размер буфера передачи. Когда буфер наполняется до этого граничного значения, данные передаются в сеть.

Имейте ввиду, что если вы меняете размер MTU на интерфейсе какой-то железки — вы должны сделать то же самое и на интерфейсе её «соседа». Т.е., если вы увеличили MTU до 9000 на интерфейсе linux-роутера, то вы должны включить jumbo-frame на порту коммутатора, в который данный роутер включен. В противном случае сеть работать будет, но очень плохо: пакеты ходить по сети будут «через одного».

Итоги

В результате всех этих изменений, в сети возрастут «пинги» — но общая пропускная способность заметно возрастет, а нагрузка на активное оборудование снизится.

Сервер NAT

Операция NAT (Network Address Translation) является одной из самых дорогостоящих (в смысле, ресурсоёмких). Поэтому, если у вас большая сеть, без тюнинга NAT-сервера вам не обойтись.

Увеличение кол-ва отслеживаемых соединений

Для осуществления своей задачи, NAT-серверу необходимо «помнить» обо всех соединениях, которые через него проходят. Будь то «пинг» или чья-то «аська» — все эти сессии NAT-сервер «помнит» и отслеживает у себя в памяти в специальной таблице. Когда сессия закрывается, информация о ней из таблицы удаляется. Размер этой таблицы фиксирован. Именно поэтому если трафика через сервер идет достаточно много, а размера таблицы нехватает, — то NAT-сервер начинает «дропать» пакеты, рвать сессии, интернет начинает работать с жуткими перебоями, а на сам NAT-сервер бывает даже попасть по SSH становится просто невозможно.

Чтобы таких ужасов не происходило, необходимо адекватно увеличивать размер таблицы — в соответствии с проходящим через NAT трафиком:

Настоятельно НЕ рекомендуется ставить такое большое значение, если у вас на NAT-сервере меньше 1 гигабайта оперативной памяти.

Посмотреть текущее значение можно вот так:

Посмотреть, насколько уже заполнена таблица отслеживания соединений, можно вот так:

Увеличение размера hash-таблицы

Пропорционально должная быть увеличена и хэш-таблица, в которой хранятся списки conntrack-записей.

echo 65536 > /sys/module/nf_conntrack/parameters/hashsize

Правило простое: hashsize = nf_conntrack_max / 8

Уменьшение значений time-out

Как вы помниите, NAT-сервер отслеживает только «живые» сессии, которые через него проходят. Когда сессия закрывается — информация о ней удаляется, дабы таблица не переполнялась. Информация о сессиях удаляется так же по тайм-ауту. Т.е., если втечение долгого времени в рамках соединения обмена траифка нет — оно закрывается и информация о нем так же удаляется из памяти NAT-а.

Однако, по умолчанию значения тайм-аутов стоят достаточно большие. Поэтому, при больших потоках трафика даже если вы растянете nf_conntrack_max до предела — вы все равно рискуете быстро столкнуться с переполнением таблицы и разрывами соединений.

Чтобы такого не произошло, необходимо грамотно выставить тайм-ауты отслеживания соединений на NAT-сервере.

Текущие значения можно посмотреть, например, так:

sysctl -a | grep conntrack | grep timeout

В результате вы увидите что-то подобное:

На первый взгляд, ничего страшного — но на самом деле это очень и очень много.

Говоря еще более простым языком, за-DDOS'ить такой NAT-сервер становится проще простого: его NAT-таблица (параметр nf_conntrack_max) переполняется «на ура» простейшим флудом — вследствие чего он будет рвать соединения и в худшем варианте быстро превратится в черную дыру.

Значения тайм-аутов рекомендуется ставить в пределах 30-120 секунд. Этого вполне достаточно для нормальной работы абонентов, и этого вполне хватит для своевременной очистки NAT-таблицы, исключающей её переполнение.

И не забудьте вписать соответствующие изменения в /etc/rc.local и /etc/sysctl.conf

Итоги

После тюнинга вы получите вполне жизнеспособный и производительный NAT-сервер. Конечно же, это только «базовый» тюнинг — мы не касались, например, тюнинга ядра и т.п. вещей. Однако, в большинстве случаев даже таких простых действий будет достаточно для нормальной работы достаточно большой сети. Как я уже говорил, в нашей сети более 30 тыс. абонентов, трафик которых обрабатывают 4 NAT-сервера.

Работающая установка Linux с сетевым подключением и привилегиями root.

трудность

Условные обозначения

Вступление

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

Jumbo-кадры больше, чем стандартные сетевые пакеты. Обычно размер полезной нагрузки или MTU (максимальная единица передачи) устанавливается равным 1500 байтов. Jumbo-кадры могут поддерживать до 9000 байт на пакет.

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

Настройте свою сеть

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

Настройки MTU на маршрутизаторе DD-WRT

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

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

Проверьте размер MTU

Теперь, когда ваша сеть поддерживает Jumbo-кадры, проверьте, установлен ли ваш компьютер. Это, вероятно, 1500 байт, так как это по умолчанию, но это хорошо, чтобы убедиться.

Все здесь будет обрабатываться ip командой. Итак, используйте его для проверки размера MTU, разрешенного вашими сетевыми интерфейсами.

Установить новый размер

Установить размер MTU очень просто ip . Вам просто нужно указать, какой интерфейс вы хотите изменить, и какой размер вы хотите установить.

Вы можете настроить каждый интерфейс на вашем компьютере, если ваше оборудование поддерживает его.

Сделайте это постоянным

Ваш скрипт должен выглядеть примерно так:

Если вы используете systemd, создайте простой модуль и настройте его на запуск при запуске.

Пользователи OpenRC могут разместить свой скрипт /etc/init.d/ и запускать его как сервис по умолчанию.

Заключительные мысли

Jumbo-кадры уменьшают нагрузку на вашу сеть и могут высвободить вычислительные ресурсы вашего маршрутизатора. Они не будут сильно влиять на скорость вашей сети, но могут сократить время, необходимое для передачи файлов.

Jumbo Frames может предоставить некоторые серьезные преимущества для вашей локальной сети. Они могут ускорить вашу общую скорость сети, обеспечить лучшее взаимодействие между некоторыми приложениями и снизить нагрузку на вашу сеть.

У них также есть некоторые серьезные ограничения и недостатки, потому что они нарушают стандарт Ethernet. Если вы планируете внедрять Jumbo Frames, важно сначала выполнить домашнее задание.


Фреймы Ethernet

Прежде чем вы сможете понять Jumbo Frames, вы должны иметь представление о том, что такое Ethernet Frames. Таким образом, кадры Ethernet буквально выделяют данные, передаваемые в пакетах Ethernet. Все Ethernet-фреймы имеют одинаковые основные части.

Эта структура имеет решающее значение для сотрудничества между устройствами. Оно должно быть распознаваемым для любого устройства Ethernet для передачи и понимания данных. Каждый кадр Ethernet начинается с преамбулы. Сетевые устройства используют преамбулу, чтобы дифференцировать кадр, чтобы синхронизировать передачу кадра.

В конце преамбулы находится разделитель начального кадра (SFD). SFD предназначен для отделения преамбулы от фактической структуры кадра Ethernet.

Сразу после SFD идет MAC-адрес назначения, за которым непосредственно следует MAC-адрес источника. Конечно, это важно для обеспечения того, чтобы пакет попал туда, куда ему нужно, и чтобы ответ мог быть отправлен. Следующая часть присутствует только в конфигурации VLAN. Он содержит информацию о VLAN.

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

Его размер может изменяться, но максимальный размер сети определяет максимальный размер передаваемого блока (MTU). Стандарт Ethernet устанавливает MTU на 1500 байтов.

Наконец, концом кадра Ethernet является последовательность проверки кадра (FCS). Это циклическая проверка избыточности (CRC), которая позволяет получателю кадра проверять отсутствующие или поврежденные данные.

Что делает их Джамбо?

Итак, почему Jumbo Frames Jumbo? Они несут гораздо большую полезную нагрузку, чем обычные кадры Ethernet. Вместо обычных 1500 байт, Jumbo Frames может загружать до 9000 байт. Эти значительно большие кадры могут нести в шесть раз больше данных, чем стандартные кадры. Теоретически, вы можете уменьшить количество пакетов, передаваемых в вашей сети, до одной шестой стандартной скорости при идеальных условиях.

Зачем идти Джамбо?

Вы уже увидели причины использования Jumbo Frames в своей сети. Теперь пришло время погрузиться глубже и разобраться в основных причинах выбора Jumbo Frames.

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

Ваше оборудование должно занять время для обработки каждого полученного пакета. Размер полезной нагрузки не влияет на требуемое время обработки. Сетевые устройства имеют дело только с сетевыми данными в начале кадра Ethernet.

Таким образом, меньшее количество полезных нагрузок создает меньшую нагрузку на сетевое оборудование, чем множество мелких полезных нагрузок.

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

В чем подвох?

Jumbo Frames не идеальны. Есть несколько очень явных недостатков при их реализации в вашей сети.

Прежде всего, вам нужно оборудование, которое поддерживает Jumbo Frames. Теперь, это обычно не проблема в корпоративных средах, но это все еще вопрос. Все ваше сетевое оборудование должно поддерживать Jumbo Frames.

Обычно это означает, что скорость должна быть не менее гигабитной. Вы также должны явно настроить его для работы с Jumbo Frames. Если какой-то фрагмент в цепочке не поддерживает Jumbo Frames, он фрагментирует кадры.

Это увеличит нагрузку на процессор этого устройства, создаст узкое место и замедлит работу вашей сети. Короче говоря, если ваша сеть не поддерживает Jumbo Frames, вы получите противоположность желаемых результатов.

Вам нужны не только маршрутизаторы и коммутаторы. Сетевые интерфейсные карты (NIC) всех ваших клиентских компьютеров также должны поддерживать Jumbo Frames. Если они этого не сделают, они все равно будут работать, но соединение с этим клиентом будет замедляться, так как оно разбивает кадры на более мелкие стандартные.

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

Как использовать их

Как и в большинстве ситуаций с сетью, очень сложно предоставить конкретику. Здесь все сводится к совместимости. Если все ваше оборудование поддерживает Jumbo Frames, их настройка не должна быть проблемой. MTU является ключом к использованию Jumbo Frames.

Процесс настройки вашей сети сводится к изменению настройки MTU на каждом устройстве до 9000 байт вместо 1500 байт по умолчанию. Сначала проверьте каждый маршрутизатор, коммутатор и любое другое сетевое устройство в вашей сети. Убедитесь, что он поддерживает Jumbo Frames. Если они все делают, измените настройку MTU на каждом.

Затем сделайте то же самое на своих подключенных устройствах. Вам нужно будет установить MTU через операционную систему каждого компьютера. Как правило, это проще в системах на основе Unix, но вы можете сделать это и в Windows.

В Windows 10 вы можете включить Jumbo Frames через настройки вашей сетевой карты. В диспетчере устройств вы можете выбрать свой сетевой адаптер. Ищите настройки Jumbo Frames. Если его там нет, ваша карта не поддерживает его. Когда вы выбираете Jumbo Frames, установите размер 9k.

Под Linux есть несколько способов включить Jumbo Frames. Предполагая, что вы используете Linux на рабочем столе, вы можете увеличить размер MTU через Network Manager. Выберите правильное соединение, и вы можете ввести пользовательское значение MTU.

Если вы работаете с сервером, у вас есть некоторые другие параметры интерфейса командной строки, в том числе написание пользовательского модуля Systemd, настройка его с помощью ifconfig при запуске или установка значения в resolv.conf.

Если у вас есть телефоны или другие устройства, которые не поддерживают Jumbo Frames, кадры Ethernet, поступающие с этих устройств, останутся стандартными 1500 байтами. Устройство сломает любые Jumbo Frames, которые приходят к нему.

Если вы работаете в большой сети, вы, вероятно, увидите хорошую выгоду от Jumbo Frames. Домашние пользователи могут использовать их, но, возможно, не увидят такой большой пользы. Поскольку их настройка не слишком сложна, вы можете поэкспериментировать с ней, если вы чувствуете себя авантюрным.


Поговорим о том что такое Jumbo Frame и где они используются.

Немного из истории. Давным давно в 1997 году компания Alteon Web Systems реолизовала на своем сетевом оборудование новую технологию Jumbo Frames, в 2000 году компанию приобретает Nortel Networks и в этомже году продает ее компание 3Com, которая продолжает дальнейшее развитие этой технологии.

Основные виды Jumbo Frames

Вот и все. Теперь у вас есть краткое представление о технологии JumboFrame.

1" :pagination="pagination" :callback="loadData" :options="paginationOptions">

Есть 2 вида Jumbo:

— mini (baby) jumbo — это пакеты размером немного больше 1500. Активно используются для 802.1q, QinQ, MPLS.
— нормальные jumbo — размером около 9000 байт

Зачем же они нужны?
Jumbo Frames увеличивают эффективность передачи данных за счет снижения накладных расходов (эффективность равна полезной нагрузке кадра деленной на общий размер кадра). Их рекомендуют включать в сетях, где есть интенсивная пересылка больших объемов данных.

По умолчанию jumbo frames выключен. Как же их включить? Оказывается достаточно просто увеличить размер MTU до нужного значения.

При изменении MTU рекомендую ознакомится со статьёй

Ниже будет приведён пример для разных ОС:

FreeBSD

Что бы работало после ребута (в /etc/rc.conf):

ifconfig_em0="inet 10.10.10.1/24 mtu 9000"

Linux

Что бы работало после ребута, вносим в настройки сетевого интерфейса строку

Windows

В консоли выполняем команду

C:>netsh interface ipv4 set subinterface "Имя интерфейса" mtu=9000 store=persistent

Solaris 11

Если вы получаете ошибку

То попробуйте удалить все адреса с net1, включая команду:

и заново изменить mtu. Если и в этом случае не вышло, тогда возможно проблема с драйвером сетевой карты.

В этой статье мы рассмотрим методику активации пакетов увеличенной длины, Jumbo Frames, на виртуальной машине с Windows, запущенной в Hyper-V на базе Windows Server 2012 R2. Но для начала немного вкратце напомним что такое Jumbo Frames и зачем они нужны.

Jumbo Frames – это особые, сверхдлинные кадры Ethernet, размер которых превышает стандартный размер MTU (Maximum Transmission Unit) для Ethernet в 1518 байт. Размер Jumbo-кадров обычно варьируется в диапазоне от 1518 до 16000 байт. Как правило, размер Jumbo Frame-а не превышает 9000 байт, это ограничение накладывается 32 битной CRC в сетях Ethernet, теряющей свою эффективность при объеме передаваемых данных больше 12000 байт.

Зачем же нужны такие увеличенные пакеты?

Благодаря использованию пакетов увеличенной длины можно существенно повысить КПД сети, т.к. при сохранении размера Ethernet заголовка, количество полезной информации, содержащейся в пакете увеличивается (почти в 6 раз). Кроме того за счет уменьшения количества пакетов, заголовки которых нужно разбирать, снижается нагрузка на CPU сервера. Пакеты Jumbo Frames рекомендуется использовать в высокопроизводительных сетях с интенсивной пересылкой больших объемов данных

Настройка Jumbo Frames в Hyper-V Windows Server 2012 / R2

По умолчанию jumbo frames в Windows — системах отключен. Чтобы активировать передачу больших пакетов Jumbo Frames для гостевой ОС, запущенной в виртуальной машине на базе Hyper –V 2012 нужно:

  1. Включить Jumbo Frames на физических сетевых картах (NIC) гипервизора (хостовой ОС), подключенных к сети LAN
  2. Включить поддержку Jumbo Frames на сетевом оборудовании LAN
  3. Включить Jumbo Frames на виртуальном коммутаторе Hyper-V
  4. Активировать Jumbo Frames в гостевой ОС

Jumbo Frames на физических сетевых картах сервера

Для каждой из сетевых карточек (NIC), используемых для подключений сервера (хостовой ОС) к сети LAN необходимо в свойствах сетевых адаптеров перейти в режим настройки драйвера (кнопка Configure). Затем на вкладке Advanced найти параметр с названием Jumbo Frames (в зависимости от производителя NIC, он также может называться Packet Size, Jumbo Packets или что-то похоже) и установить его значение в 9014.


Поддержка Jumbo Frames на сетевом оборудовании

Далее необходимо включить поддержку Jumbo Frames на коммутаторах, которые в дальнейшем будут задействована в цепочке передачи данных между серверами с включенным Jumbo Frames (это задача для администраторов сети).

Включаем поддержку Jumbo Frames на виртуальном коммутаторе Hyper-V

В том случае, если на хостовой ОС (гипервизор) установлена Windows Server 2012, чтобы активировать Jumbo Frames для виртуального коммутатора Hyper-V нужно

    Открыть редактор реестра и развернуть ветку HKLMSYSTEMCurrentControlSetControl >Примечание. Хорошая новость для владельцев Windows Server 2012 R2 – никакой настройки виртуального коммутатора для работы с Jumbo Frames не требуется

Активация Jumbo Frames в гостевой ОС (Windows Server 2012)


На уровне гостевой ОС (в нашем примере это Windows Server 2012) включается аналогично гипервизору: в расширенных настройках драйвера укажите, что Jumbo Packet=9014 Bytes.

Тестируем работу Jumbo Frames в Windows

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

Протестировать работу Jumbo Frames можно с помощью простой команды ping, позволяющей определить что пакет большого размера может быть передан без дефрагментации:

где, флаг f — запрещает фрагментацию пакета, флаг –l задает размер пакета (8972 — на нашем стенде это максимальный размер пакета, передающийся без дефрагментации), second_jumbo_frame_server – имя/ip_адрес второго сервера с включенным Jumbo Frames.

Если ping отработал успешно – поздравляю, вы только что настроили Jumbo Frames для виртуальной машины на Hyper-V!

Настройка Jumbo Frames из Powershell

Указанные выше операции можно выполнить и с помощью всемогущего Powershell:

Следующая команда позволяет узнать включен ли Jumbo Frames для сетевого адаптера с именем Ethernet:

Если команда возвращает Disables (RegistryValue 1514), этоозначает, что Jumbo Frames в настоящий момент не включен, и используется стандартный размер MTU – 1514 байт.

Читайте также: