数据平面开发工具包 (Data Plane Development Kit, DPDK) 包含一组库,用于提高数据平面应用程序中的数据包处理能力。
以下是 SE 数据路径的数据包处理:
服务器运行状况监控器
TCP/IP 栈 - 将 TCP 用于所有流
终止 SSL
解析协议标头
SIP/L4/L7 应用程序配置文件的服务器负载均衡
发送和接收数据包
SE 系统逻辑架构
以下是 SE 系统逻辑架构中的每个组件的功能:
- 工作流程
-
以下是服务引擎中的三个进程:
SE-DP
SE-Agent
SE-Log-Agent
SE-DP:该进程的角色可能是 proxy-alone、dispatcher-alone 或 proxy-dispatcher 组合。
proxy-alone:为每个应用程序/虚拟服务定义的完整 TCP/IP、L4/L7 处理和策略。
dispatcher-alone:
处理 vNIC 或网卡接收,并通过每个代理的无锁 RxQ 在代理服务之间分配流(根据每个代理服务的当前负载)。
调度程序管理通过网卡接收和发送数据包的过程。
轮询代理 TxQ 并与网卡进行交互。
proxy-dispatcher:它充当代理和调度程序,具体取决于可用的配置和资源。
SE-Agent:它充当控制器的配置和衡量指标代理。它可以在任何可用的内核上运行。
SE-Log-Agent:它维护日志队列。这将执行以下操作:
批处理来自所有 SE 进程的日志,并将它们发送到控制器中的日志管理器。
SE-Log-Agent 可以在任何可用内核上运行。
- 流表
-
这是一个存储流量的相关信息的表。它保留流量到代理服务的映射。
根据可用的资源,服务引擎配置最佳数量的调度程序。您可以使用服务引擎组属性以覆盖该设置。根据网卡 (Network Interface Card, NIC) 的所有权和使用情况,支持多种调度方案,例如:
一个调度程序进程拥有和访问所有网卡。
在配置的多个调度程序之间分配网卡所有权。
多队列配置,其中所有调度程序内核轮询一个或多个网卡队列对,但使用互斥的
se_dp
以处理队列对映射。
其余实例被视为代理。网卡和调度程序组合确定 SE 可以处理的每秒数据包数 (Packets per Second, PPS)。CPU 速度确定单个内核的最大数据平面性能(CPS/RPS/TPS/吞吐量),并随 SE 的内核数呈线性扩展。您可以动态增加 SE 的代理处理能力,而无需进行重新引导。一部分 se_dp
进程当前正在处理流量。不会选择其余 se_dp
进程以处理新的流量。所有调度程序内核也是从这组进程中选择的。
可以使用 SE 组属性 max_num_se_dps
以指定活动 se_dp
进程数。作为一个运行时属性,可以在不重新引导的情况下增加该属性。不过,如果减少数量,在重新引导 SE 后,该更改才会生效。
以下是配置示例:
[admin:ctr2]: serviceenginegroup> max_num_se_dps INTEGER 1-128 Configures the maximum number of se_dp processes that handles traffic. If not configured, defaults to the number of CPUs on the SE. [admin:aziz-tb1-ctr2]: serviceenginegroup> max_num_se_dps INTEGER 1-128 Configures the maximum number of se_dp processes that handles traffic. If not configured, defaults to the number of CPUs on the SE. [admin:ctr2]: serviceenginegroup> max_num_se_dps 2 [admin:ctr2]: serviceenginegroup> where | grep max_num | max_num_se_dps | 2 | [admin:ctr2]: serviceenginegroup>
跟踪 CPU 使用情况
在以下情况下,将大量使用 CPU 资源:
代理
SSL 终止
HTTP 策略
网络安全策略
WAF
调度程序
高 PPS
高吞吐量
小数据包(例如,DNS)
从 Hypervisor 到客户机虚拟机的数据包传输
- SR-IOV
-
单根 I/O 虚拟化 (Single Root I/O Virtualization, SR-IOV) 将一部分物理端口(PF - 平台功能)资源分配给客户机操作系统。虚拟功能 (Virtual Function, VF) 直接映射为客户机虚拟机的 vNIC,客户机虚拟机需要实施特定 VF 的驱动程序。
在 CSP 和 OpenStack 无权访问部署上支持 SR-IOV。
有关 SR-IOV 的更多信息,请参见《VMware NSX Advanced Load Balancer 安装指南》的在 OpenStack 中安装 NSX Advanced Load Balancer 主题中的在 DPDK 中集成了 VLAN 和 NSX Advanced Load Balancer(OpenStack 无权访问)的 SR-IOV 概览一节。
- 虚拟交换机
-
Hypervisor 中的虚拟交换机实施 L2 交换机功能,并将流量转发到每个客户机虚拟机的 vNIC。虚拟交换机将 VLAN 映射到 vNIC,或终止覆盖网络并将覆盖网络分段 ID 映射到 vNIC。
注:AWS/Azure 云在物理网卡中实施了完整虚拟交换机和覆盖网络终止,并且网络数据包绕过 Hypervisor。
在这些情况下,由于 VF 直接映射到客户机虚拟机的 vNIC,因此,客户机虚拟机需要实施特定 VF 的驱动程序。
VLAN 接口和 VRF
- VLAN
-
VLAN 是可以配置 IP 地址的逻辑物理接口。它充当父 vNIC 接口的子接口。可以在端口通道/绑定上创建 VLAN 接口。
- VRF 上下文
-
VRF 标识虚拟路由和转发域。每个 VRF 在 SE 中具有自己的路由表。与物理接口类似,可以将 VLAN 接口移动到 VRF 中。VLAN 接口的 IP 子网是 VRF 及其路由表的一部分。具有 VLAN 标记的数据包是在 VRF 上下文中处理的。两个不同 VRF 上下文中的接口可能具有重叠的 IP 地址。
运行状况监控器
运行状况监控器在代理中的数据路径上作为同步操作与数据包处理一起运行。运行状况监控器是在所有代理内核之间共享的,因此,随 SE 中的内核数呈线性扩展。
例如,10 个虚拟服务,每个虚拟服务在池中具有 5 个服务器,每个服务器具有一个运行状况监控器,则所有虚拟服务具有 50 个运行状况监控器。具有专用调度程序的 6 核 SE 将具有 5 个代理。每个代理运行 10 个 HM,并且所有 HM 状态保留在所有代理之间共享的内存中。
自定义外部运行状况监控器在 SE 中作为单独的进程运行,并且脚本向代理提供 HM 状态。
对于放置在同一 SE 组中的虚拟服务,无法使用一个虚拟服务对另一个虚拟服务进行运行状况检查。
数据路径接口上的 DHCP
在裸机/LSC 云中的数据路径接口(常规接口/绑定)上支持动态主机配置协议 (Dynamic Host Configuration Protocol, DHCP) 模式。不过,也可以从控制器 GUI 中启用该模式。
您可以使用以下命令从控制器中启用 DHCP:configure serviceengine <serviceengine-name>
您可以使用以下命令检查所需的 data_vnics index ( i )
:
data_vnics index <i> dhcp_enabled save save
这必须在所需的接口上启用 DHCP。
要在特定的 data_vnic
上停用 DHCP,您可以在上述命令序列中将 dhcp_enabled
替换为 no s
。
如果在未管理/未连接的接口上启用 DHCP,这可能会减慢 SE 停止序列,并且控制器可能会重新启动 SE。