端口扩展,用于创建硬件卸载端口¶
Launchpad bug: https://bugs.launchpad.net/neutron/+bug/2013228
RFE 的目标是创建一个新的端口扩展,以允许创建具有硬件卸载功能的端口。
问题描述¶
RFE [1] 引入了创建可以使用 Open vSwitch 中实现的硬件卸载支持的端口的功能 [2]。此功能在以下补丁集中实现(最初针对 ML2/OVS):[3]、[4] 和 [5]。
为了创建具有硬件卸载功能的端口,需要定义 VNIC 类型并在端口绑定配置文件中设置一个特定值
openstack port create --vnic-type direct \
--binding-profile '{"capabilities": ["switchdev"]}' port_hwol
这种创建端口的方法存在一些缺点
端口绑定配置文件字段默认情况下是仅管理员参数。此字段中包含的值可能引用主机的 PCI 地址,不应由非管理员用户修改。
实际上,此参数不应由 Neutron 写入,而应仅在端口绑定时由 Nova 写入。
提议的变更¶
此 RFE 建议创建一个新的端口扩展,名为“port-hardware-offload”,它将取代在创建端口时手动定义端口绑定配置文件信息的需要;请注意,这仅指端口创建过程。此 API 扩展由一个字符串参数组成,默认值为“None”。此字符串将是硬件卸载类型;OpenStack Neutron 和 Nova 当前仅支持“switchdev” [6]。API 允许的字符串将限制为一组定义的常量。
此新的字符串参数将与端口信息字典一起传递给 Nova。Nova 将使用此参数而不是端口绑定配置文件信息来命令 os-vif 创建相应的 Layer 1 端口(devlink 端口 [3] [7])。
由于这种 Nova-Neutron 通信,此 RFE 将分两个步骤实现
第一步将仅实现 Neutron 和 OSC(以及 OpenstackSDK 位)代码。传递给 Nova 的端口字典将包含此 RFE 添加的新参数以及端口绑定配置文件,当新参数不为“None”时,Neutron 会在内部添加端口绑定配置文件。
第二步涉及 Nova 的实现。此更改意味着 Nova 可以读取端口新参数并创建相应的端口。Neutron 传递的端口绑定配置文件信息将不再相关。
注意
如在 Neutron 驱动程序会议上展示此新功能时讨论的那样,此 RFE 的范围仅涉及第一步。Nova 代码更改将在其他 RFE 和规范中涵盖。
客户端影响¶
OSC 和 OpenstackSDK 项目将更新,以便能够使用此新扩展创建端口。端口创建示例
openstack port create --vnic-type direct \
--hardware-offload-type switchdev port_hwol
当显示端口资源时,新的字符串字段将可见。
此规范不涵盖 Nova 从读取端口绑定配置文件到使用端口定义中新参数提供程序的迁移。如第一节所述,只要在端口创建命令中提供了“hardware-offload-type”,Neutron 仍将填充端口绑定配置文件。为了阻止用户使用旧方法创建端口,OSC 将检查端口绑定配置文件中是否提供了“capabilities”键,并在命令行中打印警告,鼓励用户使用“hardware-offload-type”参数创建端口。
REST API 影响¶
拟议属性
RESOURCE_ATTRIBUTE_MAP = {
port.COLLECTION_NAME: {
"hardware_offload_type": {
'allow_post': True,
'allow_put': False,
'convert_to': converters.convert_to_string,
'default': None,
'is_visible': True,
'is_filter': True,
'validate': {
'type:values': constants.VALID_HWOL_TYPES}
}
}
}
示例 REST 调用
POST /v2.0/ports
{
"port": {
...
"hardware_offload_type": "switchdev"
}
Response:
{
"port": {
"id": "<id>",
...
"hardware_offload_type": "switchdev"
}
}
数据模型影响¶
此 RFE 建议在 ports 中创建一个子表,名为 port_hardware_offload。
属性 |
类型 |
CRUD |
描述 |
|---|---|---|---|
port_id |
uuid-str |
CR |
端口对象的唯一标识符 |
hardware_offload_type |
str |
CR |
指示硬件卸载类型的字符串 |
安全影响¶
默认情况下,此新字段将仅由管理员可写。但是,管理员可以考虑更改规则所有者,并允许任何项目用户创建定义此参数的端口
policy.DocumentedRuleDefault(
name='create_port:hardware_offload_type',
check_str=base.ADMIN,
scope_types=['project'],
operations=ACTION_POST
)
由于问题描述中提供的理由,完全不建议对规则“create_port:binding:profile”进行此规则更改。
性能影响¶
在构建端口 OVO 时,端口资源视图现在需要 ports 表和 ports_hardware_offload 表之间的新“JOIN”操作。但是,这两个表之间存在 1:1 的关系,并且从子表检索的数据最少(两列)。
其他影响¶
无。
实现¶
负责人¶
- 主要负责人
Rodolfo Alonso Hernandez <ralonsoh@redhat.com> (IRC: ralonsoh)
工作项¶
API 实现(neutron-lib 和 Neutron)。
数据库迁移(Neutron)
CLI 实现(OpenstackSDK 和 OSC)
文档。
测试和 CI 相关更改。
测试¶
单元/功能测试。
全栈 API 测试。
文档影响¶
用户文档¶
记录创建硬件卸载端口的新方法并弃用旧方法。