OVS /topics/dpdk命令总结

/topics/dpdk/bridge

添加一个使用DPDK的桥接器:ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev

配置桥接器以支持OpenFlow 1.4:ovs-vsctl set bridge br0 datapath_type=netdev protocols=OpenFlow10,OpenFlow11,OpenFlow12,OpenFlow13,OpenFlow14

检查桥接器表中的OpenFlow协议支持情况:ovsdb-client dump Bridge protocols

查询端口统计信息:ovs-ofctl -O OpenFlow14 dump-ports br0

获取接口的统计信息:ovs-vsctl get Interface <iface> statistics

设置Exact Match Cache (EMC)的插入概率:ovs-vsctl --no-wait set Open_vSwitch . other_config:emc-insert-inv-prob=N

启用或禁用接口的EMC:ovs-vsctl set interface <iface> other_config:emc-enable={true,false}

启用SMC缓存:ovs-vsctl --no-wait set Open_vSwitch . other_config:smc-enable=true

获取dpcls实现的信息:ovs-appctl dpif-netdev/subtable-lookup-info-get

设置dpcls查找函数的优先级:ovs-appctl dpif-netdev/subtable-lookup-prio-set avx512_gather 5

获取用户空间数据路径接口的实现信息:ovs-appctl dpif-netdev/dpif-impl-get

设置用户空间数据路径接口的实现:ovs-appctl dpif-netdev/dpif-impl-set dpif_avx512

设置用户空间数据路径接口的实现为默认实现:ovs-appctl dpif-netdev/dpif-impl-set dpif_scalar

获取优化后的miniflow提取实现的信息:ovs-appctl dpif-netdev/miniflow-parser-get

设置miniflow解析函数的实现:ovs-appctl dpif-netdev/miniflow-parser-set [-pmd core_id] name [study_cnt]

显示可用的Actions实现:ovs-appctl odp-execute/action-impl-show

设置Actions实现:ovs-appctl odp-execute/action-impl-set avx512

设置Actions实现为默认实现:ovs-appctl odp-execute/action-impl-set scalar

  /topics/dpdk/phy

添加一个使用DPDK的物理端口:ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:01:00.0

配置DPDK物理端口的流控支持:ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:01:00.0 options:tx-flow-ctrl=true

配置DPDK物理端口的流控支持:ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:01:00.0 options:rx-flow-ctrl=true

配置DPDK物理端口的流控支持为自动协商模式:ovs-vsctl add-port br0 dpdk-p0 -- set Interface dpdk-p0 type=dpdk options:dpdk-devargs=0000:01:00.0 options:flow-ctrl-autoneg=true

设置DPDK物理端口的Rx校验和卸载:ovs-vsctl set Interface dpdk-p0 options:rx-checksum-offload=true

热插拔端口:ovs-vsctl add-port br0 dpdkx -- set Interface dpdkx type=dpdk options:dpdk-devargs=0000:08:00.0

配置DPDK representors:ovs-vsctl add-port br0 dpdk-rep3 -- set Interface dpdk-rep3 type=dpdk options:dpdk-devargs=0000:08:00.0,representor=vf3

配置DPDK物理端口的LSC检测模式为中断模式:ovs-vsctl set interface <iface_name> options:dpdk-lsc-interrupt=true

配置DPDK物理端口的LSC检测模式为轮询模式:ovs-vsctl set interface <iface_name> options:dpdk-lsc-interrupt=false

  /topics/dpdk/vhost-user

添加vhost-user客户端端口到现有的名为br0的桥接设备:

$ ovs-vsctl add-port br0 dpdkvhostclient0 \

    -- set Interface dpdkvhostclient0 type=dpdkvhostuserclient \

      options:vhost-server-path=/tmp/dpdkvhostclient0

$ ovs-vsctl add-port br0 dpdkvhostclient1 \

    -- set Interface dpdkvhostclient1 type=dpdkvhostuserclient \

      options:vhost-server-path=/tmp/dpdkvhostclient1

创建vhost-user设备的socket路径:

$ ovs-vsctl add-port br0 vhost-user-1 -- set Interface vhost-user-1 \

    type=dpdkvhostuser

将vhost-user设备的socket附加到虚拟机:

-chardev socket,id=char1,path=/usr/local/var/run/openvswitch/vhost-user-1

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce

-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1

如果有多个vhost-user设备,需要为每个设备指定不同的chardev路径和id:

-chardev socket,id=char2,path=/usr/local/var/run/openvswitch/vhost-user-2

-netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce

-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2

启用多队列支持:

-chardev socket,id=char2,path=/usr/local/var/run/openvswitch/vhost-user-2

-netdev type=vhost-user,id=mynet2,chardev=char2,vhostforce,queues=$q

-device virtio-net-pci,mac=00:00:00:00:00:02,netdev=mynet2,mq=on,vectors=$v

其中,$q是队列的数量,$v是向量的数量($q * 2 + 2)。

添加vhost-user-client端口到交换机:

$ VHOST_USER_SOCKET_PATH=/path/to/socket

$ ovs-vsctl add-port br0 vhost-client-1 \

    -- set Interface vhost-client-1 type=dpdkvhostuserclient \

        options:vhost-server-path=$VHOST_USER_SOCKET_PATH

将vhost-user-client端口添加到虚拟机:

-chardev socket,id=char1,path=$VHOST_USER_SOCKET_PATH,server

-netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce

-device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1

启用vhost IOMMU支持:ovs-vsctl set Open_vSwitch . other_config:vhost-iommu-support=true

启用vhost-user-client Post-copy Live Migration支持:ovs-vsctl set Open_vSwitch . other_config:vhost-postcopy-support=true

配置vhost-user-client的tx重试次数:ovs-vsctl set Interface vhost-client-1 options:tx-retries-max=0

设置vhost-user接口的XML配置示例:

<interface type='vhostuser'>

  <mac address='00:00:00:00:00:01'/>

  <source type='unix' path='/usr/local/var/run/openvswitch/dpdkvhostuser0' mode='client'/>

  <model type='virtio'/>

  <driver queues='2'>

    <host mrg_rxbuf='on'/>

  </driver>

</interface>

配置vhost-user-client接口的XML配置示例:

<interface type='vhostuser'>

  <mac address='00:00:00:00:00:02'/>

  <source type='unix' path='/usr/local/var/run/openvswitch/dpdkvhostuser1' mode='client'/>

  <model type='virtio'/>

  <driver queues='2'>

    <host mrg_rxbuf='on'/>

  </driver>

</interface>

  /topics/dpdk/vdev

添加一个使用null DPDK PMD驱动的dpdk端口:ovs-vsctl add-port br0 null0 -- set Interface null0 type=dpdk options:dpdk-devargs=eth_null0

添加一个使用af_packet DPDK PMD驱动的dpdk端口:ovs-vsctl add-port br0 myeth0 -- set Interface myeth0 type=dpdk options:dpdk-devargs=eth_af_packet0,iface=eth0

  /topics/dpdk/pmd

显示当前PMD线程统计信息:ovs-appctl dpif-netdev/pmd-stats-show

显示PMD线程的详细性能指标:ovs-appctl dpif-netdev/pmd-perf-show

启用PMD线程的详细性能指标:ovs-vsctl set Open_vSwitch . other_config:pmd-perf-metrics=true

清除先前的PMD线程统计信息:ovs-appctl dpif-netdev/pmd-stats-clear

显示PMD核心周期的端口/Rx队列分配和使用历史记录:ovs-appctl dpif-netdev/pmd-rxq-show

显示端口/Rx队列分配和最近5秒的使用历史记录:ovs-appctl dpif-netdev/pmd-rxq-show -secs 5

触发Rx队列到PMD的分配:ovs-appctl dpif-netdev/pmd-rxq-rebalance

手动将Rx队列固定到核心:ovs-vsctl set Interface <iface> other_config:pmd-rxq-affinity=<rxq-affinity-list>

启用具有固定Rx队列的非隔离PMD线程:ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-isolate=false

设置自动将Rx队列分配给PMD的算法:ovs-vsctl set Open_vSwitch . other_config:pmd-rxq-assign=<assignment>

启用PMD的自动负载均衡:ovs-vsctl set open_vswitch . other_config:pmd-auto-lb="true"

设置PMD自动负载均衡的负载阈值:ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-load-threshold="70"

设置PMD自动负载均衡的方差改进阈值:ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-improvement-threshold="40"

设置PMD自动负载均衡迭代之间的最小时间间隔:ovs-vsctl set open_vswitch . other_config:pmd-auto-lb-rebal-interval="<interval>"

启用基于PMD负载的睡眠:ovs-vsctl set open_vswitch . other_config:pmd-sleep-max=50

显示当前PMD基于负载的睡眠配置:ovs-appctl dpif-netdev/pmd-sleep-show

显示PMD线程的睡眠时间统计信息:ovs-appctl dpif-netdev/pmd-stats-clear && sleep 10 && ovs-appctl dpif-netdev/pmd-perf-show

请注意,上述代码中的<iface>和<rxq-affinity-list>是需要替换为实际的接口名称和Rx队列亲和性列表的占位符。

  /topics/dpdk/qos

 设置端口的出口限速(QoS):ovs-vsctl set port vhost-user0 qos=@newqos -- \

    --id=@newqos create qos type=egress-policer other-config:cir=46000000 \

    other-config:cbs=2048

查看端口的QoS配置:ovs-appctl -t ovs-vswitchd qos/show vhost-user0

清除端口和ovsdb中的QoS配置:ovs-vsctl destroy QoS vhost-user0 -- clear Port vhost-user0 qos

设置端口的入口限速(Rate Limiting):ovs-vsctl set interface vhost-user0 ingress_policing_rate=368000 \ ingress_policing_burst=1000

查看端口的入口限速配置:ovs-vsctl list interface vhost-user0

清除端口的入口限速配置:ovs-vsctl set interface vhost-user0 ingress_policing_rate=0

  /topics/dpdk/jumbo-frames

添加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

设置vHost User端口的可合并缓冲区:

示例中的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 Frames。注意,'MTU'仅指IP数据包的长度,而不是整个帧的长度。

计算标准IPv4帧的确切MTU时,从最大支持的帧大小中减去L2头和CRC长度(即18B)。因此,要设置9018B Jumbo Frame的MTU:ip link set eth1 mtu 9000

启用Jumbo Frames后,DPDK端口的mbuf段的大小会增加,以便在单个mbuf段中容纳特定大小的完整Jumbo Frame。Jumbo Frame支持已针对使用DPDK i40e驱动程序的Fortville NIC支持的最大帧大小9728B进行验证,但可能还支持更大的帧和其他DPDK NIC驱动程序。这些情况通常适用于仅涉及东西向流量的用例。

  /topics/dpdk/memory

设置全局配置值:ovs-vsctl set Open_vSwitch . other_config:per-port-memory=true

设置共享内存配置:ovs-vsctl ovs-vsctl --no-wait set Open_vSwitch . \

  other_config:shared-mempool-config=9000,1500:1,6000:1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容