DPDK编程指南(翻译)( 十)

10.链路绑定PMD

除了用于物理和虚拟硬件的轮询模式驱动程序(PMD)之外,DPDK还包括一个纯软件库,可将多个物理PMD绑定在一起以创建单个逻辑PMD。

Figure 10 1 Bonded PMDs

Link Bonding PMD库(librte_pmd_bond)支持绑定相同速度和双工的rte_eth_dev端口组,以提供类似于Linux绑定驱动程序中的功能,以允许将多个(从属)NIC聚合到服务器和交换机中的单个逻辑接口。然后,新的聚合的PMD将根据指定的操作模式处理这些接口,以支持冗余链路,容错和/或负载均衡等功能。

librte_pmd_bond库导出一个C语言API,包括用于创建绑定设备的API,以及配置和管理绑定设备及其从属设备的API。

注意:链路绑定PMD库默认情况下在构建配置文件中启用,可以通过设置CONFIG_RTE_LIBRTE_PMD_BOND = n并重新编译DPDK来禁用该库。

10.1.链路绑定模式概述

目前,Link Bonding PMD库支持以下网卡绑定模式。

10.1.1.轮询(模式0)

Figure 10 2 Round-Robin (Mode 0)

轮询模式通过从第一个可用从设备到最后一个的顺序来传输数据包,以提供负载平衡和容错。数据包是从设备批量出队,然后以循环方式提供服务。这种模式不能保证接收到数据包仍然有序,下行流需要能够处理乱序数据包。

10.1.2.主动备份(模式1)

Figure 10 3 Active Backup (Mode 1)

在此模式下,在任何时间只有一个从设备处于活动状态,当且仅当当前活跃从设备发生故障时,不同的从设备才会激活,从而为故障设备提供容错。单个逻辑绑定接口的MAC地址只能在一个NIC(端口)上外部可见,以避免网络交换混淆。

10.1.3.平衡策略

Figure 10 4 Balance XOR (Mode 2)

此模式提供传输负载均衡(基于所选传输策略)和容错。默认策略(layer2)使用基于报文流的源和目标MAC地址的简单计算以及绑定设备可用活动从设备的数量,将数据包分类到特定从设备进行传输。额外支持的备用传输策略是L2 + L3,这将IP源和目标地址用于传输从端口的计算,最终需要支持的策略是L3 + L4层,这使用IP源和目标地址以及TCP / UDP源和目的端口进行计算。

注意:报文的着色差异用于识别由所选择的传输策略计算的不同流分类

10.1.4.广播策略

Figure 10 5 Broadcast (Mode 3)

这种模式通过在所有从设备端口上传输数据来实现容错。

10.1.5.链路聚合802.3AD

Figure 10 6 Link Aggregation 802.3AD (Mode 4)

此模式根据802.3ad规范提供了动态链路聚合。它使用所选择的均衡传输策略来协商和监视共享相同速度和双工设置的聚合组,以平衡出口流量。

这种模式的DPDK实现对应用程序提供了一些额外的要求。

  • 需要调用rte_eth_tx_burst和rte_eth_rx_burst,间隔时间小于100ms。
  • 对rte_eth_tx_burst的调用必须至少具有2xN的缓冲区大小,其中N是从设备数。这是LACP帧所需的空间。另外LACP数据包也包含在统计信息中,但不会返回给应用程序。

10.1.6.传输负载均衡策略

Figure 10 7 Transmit Load Balancing (Mode 5)

此模式提供自适应传输负载均衡。它根据计算的负载动态地更改发送从设备。以100ms的间隔收集统计数据,每10ms调度一次。

10.2.实现细节

librte_pmd_bond绑定设备与DPDK API参考中描述的以太网PMD导出的以太网设备API兼容。

链路绑定库支持在EAL初始化期间的应用程序启动时使用 –vdev 选项以及通过C语言 API接口 rte_eth_bond_create函数以编程方式创建绑定的设备。

绑定设备支持使用接口rte_eth_bond_slave_add / rte_eth_bond_slave_remove实现动态添加和移除。

在将从设备添加到绑定设备后,从设备使用rte_eth_dev_stop停止,然后使用rte_eth_dev_configure进行重新配置,也可以使用rte_eth_tx_queue_setup / rte_eth_rx_queue_setup重新配置RX和TX队列,并配置用于配置绑定设备的参数。如果启用绑定设备的RSS,则此模式也将在新从站上启用并进行配置。
设置用于将设备绑定到RSS的多队列模式,使其完全具有RSS功能,因此所有从设备都与其配置同步。此模式旨在提供用于客户端应用程序实现的从站上的RSS配置。

绑定设备存储其自己的RSS设置版本,即RETA,RSS散列函数和RSS密钥,用于设置其从设备。 这就是为了将绑定装置的RSS配置的含义定义为整个绑定(作为一个单元)的所需配置,而不指向任何从属内部。需要确保一致性并使其更具错误性。

用于绑定设备的RSS散列函数集,是所有绑定从站支持的RSS哈希函数的最大集合。RETA大小是其所有RETA大小的GCD,因此即使从属RETA的大小不同,它也可以轻松地用作提供预期行为的模式。如果没有为绑定设备设置RSS键,则在从站上不更改,并且使用设备的默认密钥。

所有设置都通过绑定端口API进行管理,并始终沿一个方向传播(从绑定到从站)。

10.2.1.链路状态改变中断与轮询

链路绑定设备支持链路状态更改回调的注册,使用rte_eth_dev_callback_register接口,当绑定设备的状态发生更改时,将调用此函数进行处理。例如,在具有3个从设备的绑定设备中,当所有从设备变为不活跃时,链路状态变为DOWN,当一个从设备变为活动状态时,链路状态将变为UP。当单个从设备更改状态并且不满足先前的条件时,没有回调通知。如果用户希望监视单个从设备,则它们必须直接向该从设备注册回调。

链路绑定库还支持不实现链路状态改变中断处理的设备,这是通过使用接口rte_eth_bond_link_monitoring_set设置的周期轮询设备链路状态来实现的,默认轮询间隔为10ms。当设备作为从设备添加到绑定设备时,使用RTE_PCI_DRV_INTR_LSC标志确定设备是支持中断还是通过轮询来监视链路状态。

10.2.2.要求与限制

目前的实现只支持相同速度和双工的设备作为从设备提供给同一个绑定设备。绑定设备从添加到绑定设备的第一个活动从设备上继承这些属性,然后添加到绑定设备的所有其他从设备必须支持这些参数。

绑定设备本身启动之前,必须至少一个从设备。

为了有效地使用绑定设备动态RSS配置功能,还需要所有的从设备都应该是具有RSS能力和支持的,至少有一个通用的散列函数可用于它们。只有当所有从设备支持相同的密钥大小时才可以更改RSS密钥。

为了防止从设备对于如何处理数据包产生矛盾,一旦将设备添加到绑定设备,RSS配置应通过绑定设备API进行管理,而不是直接在从设备上进行管理。

像所有其他PMD一样,PMD导出的所有功能都是无锁功能,假定不会在不同逻辑核心上并行调用以操作同一目标对象。

还应该注意的是,PMD接收功能在它们已经到达绑定设备之后不应该直接在从设备上被调用,因为直接从从设备读取的数据包将不再可用于绑定设备读取。

10.2.3.配置

链路绑定设备使用rte_eth_bond_create API创建,该API需要传入唯一的设备名称,绑定模式和套接字ID来分配绑定设备的资源。绑定设备的其他可配置参数是其从设备,主从,用户定义的MAC地址,如果设备处于平衡XOR模式还需要定义要使用的传输策略。

10.2.3.1.从设备

绑定设备支持相同速度和双工的设备,最大数目为RTE_MAX_ETHPORTS。每个以太网设备可以作为从设备添加到最多一个绑定设备上。从设备在被加入绑定设备时被重新配置为绑定设备的配置。

绑定还保证将从设备的MAC地址返回到其原始值。

10.2.3.2.主从

主从关系用于定义绑定设备处于主动备份模式(模式1)时使用的默认端口。当且仅当当前主端口关闭时,才会使用不同的端口。如果用户没有指定主端口,则默认为添加到绑定设备的第一个端口。

10.2.3.3.MAC地址

绑定设备可以配置用户指定的MAC地址,该地址将由某些或所有从设备根据操作模式继承。如果设备处于主动备份模式,则只有主设备具有用户指定的MAC,所有其他从设备将保留其原始MAC地址。在模式0,2,3,4中,所有从站设备都配置了绑定设备的MAC地址。

如果未定义用户定义的MAC地址,则绑定设备将默认使用主从站MAC地址。

10.2.3.4.均衡XOR模式传输策略

对于在均衡XOR模式下运行的绑定设备,有3种支持的传输策略。层2,层2 + 3,层3 + 4。

  • Layer 2:默认的传输策略是以太网基于MAC地址的均衡策略。它对包的源MAC地址和目的MAC地址使用简单的XOR计算,然后计算该值的模数,以计算需要输出数据包的从设备。
  • Layer2+3:以太网MAC地址和基于IP地址的均衡策略使用源/目的MAC地址和数据包的源/目的IP地址组合来决定数据包将被传输的从设备端口。
  • Layer3+4:IP地址和UDP基于端口的均衡策略使用源/目的IP地址和数据包的数据包的源/目的UDP端口的组合来决定数据包将被传输的从设备端口。

所有这些策略都支持802.1Q VLAN以太网报文,还支持IPv4,IPv6和UDP协议进行负载分担。

10.3.使用链路绑定设备

librte_pmd_bond库支持两种设备创建模式,库导出完整的C API或使用EAL命令行在应用程序启动时静态配置链路绑定设备。使用EAL选项,可以透明地使用链接绑定功能,而不需要库API的具体知识,例如,可以使用这种功能来将绑定功能(如主动备份)添加到不了解链接的现有应用程序上。

10.3.1.程序中使用轮询模式驱动

使用librte_pmd_bond库API,可以在任何应用程序内动态创建和管理链路绑定设备。链路绑定设备使用rte_eth_bond_create API创建,该API需要唯一的设备名称,用于初始化设备的链路绑定模式,以及最后将要分配设备资源的套接字ID。在成功创建绑定设备之后,必须使用通用的以太网设备配置API rte_eth_dev_configure来配置,然后使用rte_eth_tx_queue_setup/rte_eth_rx_queue_setup将要使用的RX和TX队列进行设置。

可以使用rte_eth_bond_slave_add/rte_eth_bond_slave_remove API对链路绑定设备动态添加和删除从设备,但在使用rte_eth_dev_start启动链路绑定设备之前,必须至少添加一个从设备。

绑定设备的链路状态由其从设备的链路状态决定,如果所有从设备链路状态都关闭,或者所有从设备都从链路绑定设备中删除,则绑定设备的链路状态为DOWN。

还可以使用提供的rte_eth_bond_mode_set/get,rte_eth_bond_primary_set/get,rte_eth_bond_mac_set/reset和rte_eth_bond_xmit_policy_set/get来配置/查询绑定设备的控制参数的配置。

10.3.2.在EAL命令行中使用链路绑定设备

链路绑定设备可以在应用程序启动时使用--vdev EAL命令行选项创建。 设备名称必须以net_bonding前缀开头,后跟数字或字母。每个设备的名称必须是唯一的。每个设备可以有多个选项,以逗号分隔列表排列。可以多次调用--vdev选项来安排多个设备定义。

设备名称和绑定选项必须用逗号分隔,如下所示:

$RTE_TARGET/app/testpmd -l 0-3 -n 4 --vdev 'net_bonding0,bond_opt0=..,bond opt1=..'--vdev 'net_bonding1,bond _opt0=..,bond_opt1=..'

10.3.2.1.链路绑定EAL选项

只要遵守以下两个规则,可以对多种定义方式组合使用:

  • 提供了一种独特的设备名称,格式为net_bondingX,其中X可以是数字和/或字母的任意组合,名称不大于32个字符。
  • 为每个绑定设备定义提供至少一个从设备。
  • 提供了所创建的绑定设备的操作模式。

不同的选项包括:

  • 模式:定义设备的绑定模式的整数值。目前支持模式0,1,2,3,4,5(循环,主动备份,平衡,广播,链路聚合,传输负载均衡)。
  • 从设备:定义将作为从设备添加到绑定设备的PMD设备。可以多次选择此选项,每个设备要作为从设备添加。物理设备应使用其PCI地址指定,格式为 domain:bus:devid.function。
  • 主设备:定义主从端口的可选参数用于主动备份模式,以便在数据TX / RX可用时选择主从机。 当主端口未被用户定义时,主端口也用于选择要使用的MAC地址。如果未指定该设备,则默认为添加到设备的第一个从设备。主设备必须是绑定设备的从设备。
  • Socket_id:可选参数,用于选择NUMA设备上将分配绑定设备资源的哪个套接字。
  • Mac:可选参数,选择链路绑定设备的MAC地址,这将覆盖主设备的值。
  • xmit_policy:绑定设备处于均衡模式时定义传输策略的可选参数。如果没有用户指定,则默认为l2(第2层)转发,其他可用的传输策略为l23(第2层+3层)和l34层(3 + 4层)。
  • lsc_poll_period_ms:可选参数,用于定义不支持lsc中断的设备以毫秒为单位的轮询间隔,检查设备链路状态的变化。
  • ups delay:可选参数,增加了设备链路状态传播的延迟(以毫秒为单位),默认情况下该参数为零。
  • down_delay:可选参数,以毫秒为单位,将设备链路状态DOWN的传播延迟,默认情况下,该参数为零。

10.3.2.2.使用实例

以轮询模式创建一个绑定设备,两个从设备由其PCI地址指定:

$RTE_TARGET/app/testpmd -l 0-3 -n 4 --vdev 'net_bonding0,mode=0,
slave=0000:00a:00.01,slave=0000:004:00.00' -- --port-topology=chained

以轮询模式创建一个绑定设备,其中两个从站由其PCI地址和覆盖MAC地址指定:

$RTE_TARGET/app/testpmd -l 0-3 -n 4 --vdev 'net_bonding0,mode=0,
slave=0000:00a:00.01,slave=0000:004:00.00,mac=00:1e:67:1d:fd:1d' -- --port-topology=chained

在平衡模式下创建一个绑定设备,其中两个从站由其PCI地址指定,第3 + 4层传输策略:

$RTE_TARGET/app/testpmd -l 0-3 -n 4 --vdev 'net_bonding0,mode=2,
slave=0000:00a:00.01,slave=0000:004:00.00,xmit_policy=l34' -- --port-topology=chained

原文链接:http://www.jianshu.com/p/a808f11675e2

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

推荐阅读更多精彩内容