Привет OVS сетевые гуру,
Я - разработчик, который тестирует новое клиент-серверное приложение, которое должно будет когда-нибудь пробежать сеть OVS. Коллега создал меня рабочий испытательный стенд из запасного хоста Ubuntu (ver 16.04.2 LTS). Мой тестовый клиент и машины сервера соединяются с Ubuntu, и в хосте, их трафик пробегает мост OVS. (OVS ver 2.12.1, DPDK ver 18.11.2), можно думать об испытательном стенде как это:
Я знаю немного о 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?Спасибо!
Это не краткий ответ, но вся информация, которая вам может понадобиться, находится здесь...
Источник: 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
Во-первых, читать 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) обработкой интерфейсов.