Установить MTU в интерфейсе Ubuntu с драйвером DPDK?

Привет OVS сетевые гуру,

Я - разработчик, который тестирует новое клиент-серверное приложение, которое должно будет когда-нибудь пробежать сеть OVS. Коллега создал меня рабочий испытательный стенд из запасного хоста Ubuntu (ver 16.04.2 LTS). Мой тестовый клиент и машины сервера соединяются с Ubuntu, и в хосте, их трафик пробегает мост OVS. (OVS ver 2.12.1, DPDK ver 18.11.2), можно думать об испытательном стенде как это:

enter image description here

Я знаю немного о Ubuntu и OVS, но мой коллега внес свою лепту, где физические интерфейсы Ubuntu (eno1 и eno2) были подключены к логическим интерфейсам на мосту OVS (dpdk1 и dpdk2) В то время, я помню, что он сказал мне, что “установит драйвер DPDK на физических интерфейсах. Мои примечания говорят мне, что он использовал эти команды:

/usr/local/share/dpdk/tools/dpdk_nic_bind.py -u 01:00.0
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -u 01:00.1
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -b igb_uio 01:00.1
/usr/local/share/dpdk/tools/dpdk_nic_bind.py -b igb_uio 01:00.0
ovs-vsctl add-port OVS_Bridge dpdk1 -- set Interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0
ovs-vsctl add-port OVS_Bridge dpdk2 -- set Interface dpdk2 type=dpdk options:dpdk-devargs=0000:01:00.1

И все работавшее отлично. Мои хосты клиента и сервера смогли говорить друг с другом очень хорошо.

Но затем, мой коллега покинул компанию.

И после этого, я получил новое требование тестирования, чтобы мой клиент и сервер должны были связаться путем отправки пакетов крупного размера, т.е. пакетов, больше, чем 1 518 байтов. Я могу установить размеры пакета на своих тестовых хостах, без проблем. Но когда они отправляют трафик через Ubuntu, транспортные фрагменты к 1 518 байтам. Путем проигрывания вокруг с виртуальными хостами в Ubuntu, я знаю, что проблемой не является мост OVS. Я предполагаю, что узкое место является этими двумя физическими интерфейсами.

По умолчанию интерфейс Ubuntu имеет MTU 1 500 байтов. Когда мой коллега настроил эту среду для меня, мы никогда не играли с MTU, таким образом, я предполагаю eno1, и eno2 все еще имеют MTU 1500. Но к сожалению, интерфейсы больше не появляются в ifconfig вывод.

Кто-либо знает, как проверить текущий MTU, если эти интерфейсы выполняют драйвер DPDK? И если так, я могу установить тот MTU на 9 000?Спасибо!

0
задан 13 March 2020 в 22:54

2 ответа

Это не краткий ответ, но вся информация, которая вам может понадобиться, находится здесь...

Источник: http://docs.openvswitch.org/en/latest/topics/dpdk/jumbo -frames/

Также читайте: https://software.intel.com/en-us/articles/jumbo-frames-in-open-vswitch-with-dpdk

Памятка: https://therandomsecurityguy.com/openvswitch-cheat-sheet/

Jumbo Frames

Новое в версии 2.6.0.

По умолчанию порты DPDK настроены на стандартный Ethernet MTU (1500B). Чтобы включить поддержку Jumbo Frames для порта DPDK, измените атрибут mtu_request интерфейса на достаточно большое значение. Например, чтобы добавить физический порт DPDK с MTU 9000, выполните:

$ ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk \
  options:dpdk-devargs=0000:01:00.0 mtu_request=9000

Аналогично , чтобы изменить MTU существующего порта на 6200, выполните:

$ ovs-vsctl set Interface dpdk-p0 mtu_request=6200

Для использовать преимущества jumbo-кадров с пользовательскими портами vHost:

Объединенные буферы должны быть включены для пользовательских портов vHost, как показано во фрагменте командной строки QEMU ниже:

-netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,mrg_rxbuf=on

Где устройства virtio привязаны к драйверу ядра Linux в гостевой среде (т. е. интерфейсы не привязаны к гостевому драйверу DPDK), MTU этих логических сетевых интерфейсов также необходимо увеличить до достаточно большого значения. Это позволяет избежать сегментации Jumbo-кадров, полученных в гостевой системе. Обратите внимание, что «MTU» относится только к длине IP-пакета, а не к длине всего кадра.

Чтобы вычислить точное значение MTU стандартного кадра IPv4, вычтите длину заголовка L2 и CRC (т. е. 18 байт) из максимального поддерживаемого размера кадра.Таким образом, чтобы установить MTU для Jumbo-кадра 9018B:

$ ip link set eth1 mtu 9000

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

Поддержка Jumbo-кадров проверена на соответствие кадрам 9728B, что является максимальным размером кадра, поддерживаемым сетевой платой Fortville с использованием драйвера DPDK i40e, но могут поддерживаться более крупные кадры и другие драйверы сетевой платы DPDK. Эти случаи являются общими для вариантов использования, включающих только трафик Восток-Запад.

Обновление #1:

Вам вероятно нужно что-то похожее на это... но никаких гарантий, т.к. я не специалист по ОВС...

sudo ovs-vsctl set Interface dpdk1 mtu_request=9000
sudo ovs-vsctl set Interface dpdk2 mtu_request=9000
sudo ip link set en01 mtu 9000
sudo ip link set en02 mtu 9000
1
ответ дан 16 March 2020 в 22:37

Во-первых, читать man ip;man ip-link

Вы видите свои значения MTU с:

ip link | grep -E 'mtu [0-9]+'

Вышеупомянутые шоу MTU для всех интерфейсов система знают о.

и можно изменить MTU с ip link set, как описано в man страница.

Если Ваши интерфейсы не обнаруживаются в ip link команда,
можно смотреть, как система обнаруживает свои аппаратные средства/программную среду в мучительных деталях sudo journalctl -b 0.

Пролистайте это, чтобы узнать, как Ваша система является (mis) обработкой интерфейсов.

1
ответ дан 17 March 2020 в 00:03

Другие вопросы по тегам:

Похожие вопросы: