Switchdev¶
- 版權:
© 2023, NVIDIA CORPORATION 及其附屬公司。保留所有權利。
網橋解除安裝¶
mlx5 驅動程式實現了在 switchdev 模式下解除安裝網橋規則的支援。當 mlx5 switchdev 代理器連線到網橋時,Linux 網橋 FDB 會自動解除安裝。
將裝置更改為 switchdev 模式
$ devlink dev eswitch set pci/0000:06:00.0 mode switchdev
將 mlx5 switchdev 代理器 'enp8s0f0' 連線到網橋網路裝置 'bridge1'
$ ip link set enp8s0f0 master bridge1
VLAN¶
mlx5 支援以下網橋 VLAN 功能
VLAN 過濾(包括每個埠多個 VLAN)
$ ip link set bridge1 type bridge vlan_filtering 1 $ bridge vlan add dev enp8s0f0 vid 2-3
網橋入口處的 VLAN 推送
$ bridge vlan add dev enp8s0f0 vid 3 pvid
網橋出口處的 VLAN 彈出
$ bridge vlan add dev enp8s0f0 vid 3 untagged
子功能¶
透過 E-switch 生成的子功能僅透過 devlink 裝置建立,並且預設情況下所有 SF 輔助裝置均被停用。這將允許使用者在 SF 完全探測之前配置 SF,從而節省時間。
使用示例
建立 SF
$ devlink port add pci/0000:08:00.0 flavour pcisf pfnum 0 sfnum 11 $ devlink port function set pci/0000:08:00.0/32768 hw_addr 00:00:00:00:00:11 state active
啟用 ETH 輔助裝置
$ devlink dev param set auxiliary/mlx5_core.sf.1 name enable_eth value true cmode driverinit
現在,為了完全探測 SF,請使用 devlink reload
$ devlink dev reload auxiliary/mlx5_core.sf.1
mlx5 支援 ETH、rdma 和 vdpa (vnet) 輔助裝置的 devlink 引數(參見 Documentation/networking/devlink/devlink-params.rst)。
mlx5 支援使用 devlink 埠(參見 Documentation/networking/devlink/devlink-port.rst)介面進行子功能管理。
子功能擁有自己的功能能力和資源。這意味著子功能擁有自己專用的佇列(txq、rxq、cq、eq)。這些佇列既不與父 PCI 功能共享,也不從父 PCI 功能竊取。
當子功能支援 RDMA 時,它擁有自己的 QP1、GID 表和 RDMA 資源,這些資源既不與父 PCI 功能共享,也不從父 PCI 功能竊取。
子功能在 PCI BAR 空間中擁有一個專用視窗,該視窗不與其他子功能或父 PCI 功能共享。這確保了子功能的所有裝置(netdev、rdma、vdpa 等)僅訪問分配的 PCI BAR 空間。
子功能支援 eswitch 表示,透過它支援 tc 解除安裝。使用者配置 eswitch 以從/向子功能埠傳送/接收資料包。
子功能與其他子功能和/或其父 PCI 功能共享 PCI 級別資源,例如 PCI MSI-X IRQ。
mlx5 軟體、系統和裝置檢視示例
_______
| admin |
| user |----------
|_______| |
| |
____|____ __|______ _________________
| | | | | |
| devlink | | tc tool | | user |
| tool | |_________| | applications |
|_________| | |_________________|
| | | |
| | | | Userspace
+---------|-------------|-------------------|----------|--------------------+
| | +----------+ +----------+ Kernel
| | | netdev | | rdma dev |
| | +----------+ +----------+
(devlink port add/del | ^ ^
port function set) | | |
| | +---------------|
_____|___ | | _______|_______
| | | | | mlx5 class |
| devlink | +------------+ | | drivers |
| kernel | | rep netdev | | |(mlx5_core,ib) |
|_________| +------------+ | |_______________|
| | | ^
(devlink ops) | | (probe/remove)
_________|________ | | ____|________
| subfunction | | +---------------+ | subfunction |
| management driver|----- | subfunction |---| driver |
| (mlx5_core) | | auxiliary dev | | (mlx5_core) |
|__________________| +---------------+ |_____________|
| ^
(sf add/del, vhca events) |
| (device add/del)
_____|____ ____|________
| | | subfunction |
| PCI NIC |--- activate/deactivate events--->| host driver |
|__________| | (mlx5_core) |
|_____________|
子功能是使用 devlink 埠介面建立的。
將裝置更改為 switchdev 模式
$ devlink dev eswitch set pci/0000:06:00.0 mode switchdev
新增一個子功能型別的 devlink 埠
$ devlink port add pci/0000:06:00.0 flavour pcisf pfnum 0 sfnum 88 pci/0000:06:00.0/32768: type eth netdev eth6 flavour pcisf controller 0 pfnum 0 sfnum 88 external false splittable false function: hw_addr 00:00:00:00:00:00 state inactive opstate detached顯示子功能的 devlink 埠
$ devlink port show pci/0000:06:00.0/32768 pci/0000:06:00.0/32768: type eth netdev enp6s0pf0sf88 flavour pcisf pfnum 0 sfnum 88 function: hw_addr 00:00:00:00:00:00 state inactive opstate detached使用後刪除子功能的 devlink 埠
$ devlink port del pci/0000:06:00.0/32768
功能屬性¶
mlx5 驅動程式提供了一種統一的方式來為 SmartNIC 和非 SmartNIC 設定 PCI VF/SF 功能屬性。
僅當 eswitch 模式設定為 switchdev 時才支援此功能。PCI VF/SF 的埠功能配置透過 devlink eswitch 埠支援。
埠功能屬性應在驅動程式列舉 PCI VF/SF 之前設定。
MAC 地址設定¶
mlx5 驅動程式支援 devlink 埠功能屬性機制來設定 MAC 地址。(參考 Devlink 埠)
RoCE 能力設定¶
並非所有 mlx5 PCI 裝置/SF 都需要 RoCE 功能。
當 RoCE 功能停用時,每個 PCI 裝置/SF 可節省 1 MB 的系統記憶體。
mlx5 驅動程式支援 devlink 埠功能屬性機制來設定 RoCE 能力。(參考 Devlink 埠)
可遷移能力設定¶
希望 mlx5 PCI VF 能夠執行即時遷移的使用者需要顯式啟用 VF 可遷移能力。
mlx5 驅動程式支援 devlink 埠功能屬性機制來設定可遷移能力。(參考 Devlink 埠)
IPsec 加密能力設定¶
希望 mlx5 PCI VF 能夠執行 IPsec 加密解除安裝的使用者需要顯式啟用 VF 的 ipsec_crypto 能力。從 ConnectX6dx 裝置及更高版本開始支援為 VF 啟用 IPsec 能力。當 VF 啟用 IPsec 能力時,PF 上的任何 IPsec 解除安裝都將被阻止。
mlx5 驅動程式支援 devlink 埠功能屬性機制來設定 ipsec_crypto 能力。(參考 Devlink 埠)
IPsec 資料包能力設定¶
希望 mlx5 PCI VF 能夠執行 IPsec 資料包解除安裝的使用者需要顯式啟用 VF 的 ipsec_packet 能力。從 ConnectX6dx 裝置及更高版本開始支援為 VF 啟用 IPsec 能力。當 VF 啟用 IPsec 能力時,PF 上的任何 IPsec 解除安裝都將被阻止。
mlx5 驅動程式支援 devlink 埠功能屬性機制來設定 ipsec_packet 能力。(參考 Devlink 埠)
SF 狀態設定¶
要使用 SF,使用者必須使用 SF 功能狀態屬性啟用 SF。
獲取由其唯一 devlink 埠索引標識的 SF 狀態
$ devlink port show ens2f0npf0sf88 pci/0000:06:00.0/32768: type eth netdev ens2f0npf0sf88 flavour pcisf controller 0 pfnum 0 sfnum 88 external false splittable false function: hw_addr 00:00:00:00:88:88 state inactive opstate detached啟用功能並驗證其狀態為活動
$ devlink port function set ens2f0npf0sf88 state active $ devlink port show ens2f0npf0sf88 pci/0000:06:00.0/32768: type eth netdev ens2f0npf0sf88 flavour pcisf controller 0 pfnum 0 sfnum 88 external false splittable false function: hw_addr 00:00:00:00:88:88 state active opstate detached
功能啟用後,PF 驅動例項會從裝置收到特定 SF 已啟用的事件。這是將裝置置於匯流排、探測它併為其例項化 devlink 例項和特定類輔助裝置的訊號。
顯示子功能的輔助裝置和埠
$ devlink dev show devlink dev show auxiliary/mlx5_core.sf.4 $ devlink port show auxiliary/mlx5_core.sf.4/1 auxiliary/mlx5_core.sf.4/1: type eth netdev p0sf88 flavour virtual port 0 splittable false $ rdma link show mlx5_0/1 link mlx5_0/1 state ACTIVE physical_state LINK_UP netdev p0sf88 $ rdma dev show 8: rocep6s0f1: node_type ca fw 16.29.0550 node_guid 248a:0703:00b3:d113 sys_image_guid 248a:0703:00b3:d112 13: mlx5_0: node_type ca fw 16.29.0550 node_guid 0000:00ff:fe00:8888 sys_image_guid 248a:0703:00b3:d112
子功能輔助裝置和類裝置層次結構
mlx5_core.sf.4 (subfunction auxiliary device) /\ / \ / \ / \ / \ mlx5_core.eth.4 mlx5_core.rdma.4 (sf eth aux dev) (sf rdma aux dev) | | | | p0sf88 mlx5_0 (sf netdev) (sf rdma device)
此外,當驅動程式連線到子功能的輔助裝置時,SF 埠也會收到事件。這會導致功能的操作狀態發生變化。這為使用者提供了可見性,以便決定何時可以安全刪除 SF 埠以優雅地終止子功能。
顯示 SF 埠操作狀態
$ devlink port show ens2f0npf0sf88 pci/0000:06:00.0/32768: type eth netdev ens2f0npf0sf88 flavour pcisf controller 0 pfnum 0 sfnum 88 external false splittable false function: hw_addr 00:00:00:00:88:88 state active opstate attached