ALT Linux sysadmins discussion
 help / color / mirror / Atom feed
From: Alexey Shabalin <a.shabalin@gmail.com>
To: ALT Linux sysadmin discuss <sysadmins@lists.altlinux.org>
Subject: [Sysadmins] howto: openvswitch+dpdk + mlx5(mellanox)
Date: Mon, 13 Jan 2020 17:09:23 +0300
Message-ID: <CAEdvWkSSgFVFRjVHC3TE7j0XWn_COGi46PaD2DbZBj7M5+ZQRg@mail.gmail.com> (raw)

День добрый.
Посылаю сюда результаты, как заставить работать openvswitch+dpdk на
сетевых карточках mellanox. Вроде есть документация на официальном
сайте (http://docs.openvswitch.org/en/latest/intro/install/dpdk/), но,
как всегда, не совсем полная или понятная. Поэтому хотел где нибудь
оставить на память(для себя в первую очередь :)

1) Настройка hugepages
-  добавить
default_hugepagesz=1G hugepagesz=1G iommu=pt intel_iommu=on
в /etc/sysconfig/grub2 к параметрам загрузки (размер страниц можно и
неменять, делайте на своё усмотрение по вкусу)
- в /etc/sysctl.d/hugepages.conf определить нужной количество hugepages
vm.nr_hugepages=16

2) для сетевых карты Intel нужно "отбиндить" родной ядерный модуль, и
прибиндить модуль vfio или uio. Для этого лучше воспользоваться
пакетом driverctl.
Для сетевых карт mellanox этого делать не надо (они в этом смысле
особенные). Просто пропускаем этот пункт.

3) Настройка openvswitch:
# ovs-vsctl add-br vmbr0 datapath_type=netdev (или переключить
существующий бридж ovs-vsctl set bridge vmbr0 datapath_type=netdev)
# ovs-vsctl set Open_vSwitch . other_config:dpdk-init=true
# ovs-vsctl --no-wait set Open_vSwitch .
other_config:dpdk-socket-mem="1024,0" (ограничить память и
используемое ядро)

При добавлении порта сетевой карты в openvswitch
# ovs-vsctl add-port vmbr0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk
-- set Interface dpdk-p0 options:dpdk-devargs=0000:5e:01.2
получаем ошибку:
ovs-vsctl: Error detected while setting up 'dpdk-p0': Error attaching
device '0000:5e:01.2' to DPDK.  See ovs-vswitchd log for details.

# ovs-vsctl show
a513afa7-32b1-476f-b42f-ccc797dd11d3
    Bridge "vmbr0"
        Port "dpdk-p0"
            Interface "dpdk-p0"
                type: dpdk
                options: {dpdk-devargs="0000:5e:01.2"}
                error: "Error attaching device '0000:5e:01.2' to DPDK"

В логах ошибка такая:
|netdev_dpdk|ERR|Failed to create mempool "ovsd78992f200021580262144"
with a request of 262144 mbufs
|netdev_dpdk|ERR|Failed to create memory pool for netdev dpdk-p0, with
MTU 1500 on socket 0: Invalid argument
|dpif_netdev|ERR|Failed to set interface dpdk-p0 new configuration

Вот эта ошибка очень плохо гуглится, и рецептов исправления я не видел.
Не совсем понятно, то ли это особенность нашей сборки, но почему-то не
может создаться memory pool. тестовые утилиты (dpdk-test-bbdev) начали
работать только после указания какую библиотеку использовать (-d
/usr/lib64/librte_mempool_ring.so.1). Этот же параметр надо передать и
для работы в openvswitch:
# ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-extra=" -d
/usr/lib64/librte_mempool_ring.so.1"

После этого все успешно работает.
# ovs-vsctl show
a513afa7-32b1-476f-b42f-ccc797dd11d3
    Bridge "vmbr0"
        Port "dpdk-p0"
            Interface "dpdk-p0"
                type: dpdk
                options: {dpdk-devargs="0000:5e:00.1"}
        Port "vmbr0"
            Interface "vmbr0"
                type: internal
    ovs_version: "2.11.1"

# ovs-vsctl list Open_vSwitch .
_uuid               : a513afa7-32b1-476f-b42f-ccc797dd11d3
bridges             : [b86c798d-0249-4453-95bc-a6135fd4343a]
cur_cfg             : 13
datapath_types      : [netdev, system]
db_version          : "7.16.1"
dpdk_initialized    : true
dpdk_version        : "DPDK 18.11.1"
external_ids        : {hostname="xxxxxxxx",
rundir="/var/run/openvswitch",
system-id="254cce7e-4957-4ef7-a026-75361e6cca30"}
iface_types         : [dpdk, dpdkr, dpdkvhostuser,
dpdkvhostuserclient, erspan, geneve, gre, internal, "ip6erspan",
"ip6gre", lisp, patch, stt, system, tap, vxlan]
manager_options     : []
next_cfg            : 13
other_config        : {dpdk-extra=" -d
/usr/lib64/librte_mempool_ring.so.1", dpdk-init="true"}
ovs_version         : "2.11.1"
ssl                 : []
statistics          : {}
system_type         : altlinux
system_version      : "9.0"



-- 
Alexey Shabalin

                 reply	other threads:[~2020-01-13 14:09 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAEdvWkSSgFVFRjVHC3TE7j0XWn_COGi46PaD2DbZBj7M5+ZQRg@mail.gmail.com \
    --to=a.shabalin@gmail.com \
    --cc=shaba@altlinux.org \
    --cc=sysadmins@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux sysadmins discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \
		sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com
	public-inbox-index sysadmins

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sysadmins


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git