为什么不是试试看神奇的Intel FM10K

前言

如果说闲言少叙那我总想多说点什么,第一次遇到FM10K是在cyberbus上面。有人搞了一块Intel FM10840的网卡 Silicom PE3100G2DQIRM

没错,看起来有点抽象。但这就是Intel的Multi-host Modular Server Platform

这个东西可以充当一个简易的交换机,一张网卡拆分多个端口可以被多台设备使用。

由于看着很神奇,所以手痒痒就想去折腾折腾看看这套神奇的东西。

只可惜FM10K已经是EOL的产品了,后续的软件折腾还是比较麻烦的事情。

网卡介绍

拿到这张卡实属捡漏,感谢商家

这次拿到的卡是Silicom的PE3100G2DQIR,基于Intel FM10420 芯片打造。

画了一个十分简陋的Block Diagram,但是至少比Mikrotik的要墙因为我是彩色的x

很简单的结构,两个QSFP28的口子,可以拆分成8个10/25G。或者是当两个40G(10G*4)来用

但是这张卡让我没想到的是需要接一个12V的供电 这东西最大才30W那需要外接供电这种东西。

配置 功耗 (W) 电流 (A @ 12V) 运行状态 类型
全端口装 100GBASE-SR4 模块 30.72 2.56 所有端口 100 Gb/s 运行 Typical
全端口装 100GBASE-LR4 模块 29.40 2.45 所有端口 100 Gb/s 运行 Typical
未安装 SFP+ 模块(No SFP+) 26.88 2.24 Typical

Intel对FM10K这个控制器的定义以太网与交换机的混合体。它的设计初衷是为了高密度服务器微服务器(Micro-server)高性能计算(HPC)场景。一个机箱内有多个 CPU 节点,FM10840 负责节点间的互联,并提供对外接口。

实际你完全可以把它看成是一个交换机的转发平面,把host当成一个控制平面。通过控制平面下发指令操作转发平面完成对数据的转发/丢弃/丢给host。

  • 4 MB shared memory
  • L2/L3/L4/OpenFlow forwarding
  • 32K 40-bit TCAM entries
  • 16K MAC and NextHop tables
  • NSH Service Function Classifier and Forwarder

这或许就是一个交换机芯片。有 16K的MAC表 32K的TCAM条目(感觉比某些螃蟹交换机配置都好)

食用指南

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# lspci -s 05:00.0 -vv | egrep 'LnkCap|LnkSta'
LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L1 <64us
LnkSta: Speed 8GT/s (ok), Width x8 (ok)
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ EqualizationPhase1+
# lspci -s 06:00.0 -vv | egrep 'LnkCap|LnkSta'
LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L1 <64us
LnkSta: Speed 8GT/s (ok), Width x4 (downgraded)
LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+ EqualizationPhase1+
LnkCap: Port #0, Speed 8GT/s, Width x8, ASPM L1, Exit Latency L0s <512ns, L1 <64us
LnkSta: Speed 8GT/s, Width x4, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete+, EqualizationPhase1+
第二个PCIE BUS 只有x4的速度 日志中同样有体现

[ 18.467950] fm10k 0000:05:00.0: 63.008 Gb/s available PCIe bandwidth (8 GT/s x8 link)
[ 18.483618] fm10k 0000:06:00.0: 31.504 Gb/s available PCIe bandwidth, limited by 8 GT/s x4 link at 0000:04:09.0 (capable of 63.008 Gb/s with 8 GT/s x8 link)

# ethtool -i enp5s0
driver: fm10k
version: 0.27.1-gs-patched #这个驱动并非原版 原版无法满足UIO通讯
firmware-version:
expansion-rom-version:
bus-info: 0000:05:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: yes


# modinfo fm10k
filename: /lib/modules/5.14.0-611.24.1.el9_7.x86_64/updates/drivers/net/ethernet/intel/fm10k/fm10k.ko
version: 0.27.1-gs-patched
license: GPL v2
description: Intel(R) Ethernet Switch Host Interface Driver
author: Intel Corporation, <linux.nics@intel.com>
rhelversion: 9.7
srcversion: 5D36FFA1EA2C3A089BA3D92
alias: pci:v00008086d000015A5sv*sd*bc*sc*i*
alias: pci:v00008086d000015D5sv*sd*bc*sc*i*
alias: pci:v00008086d000015D0sv*sd*bc*sc*i*
alias: pci:v00008086d000015A4sv*sd*bc*sc*i*
depends: uio
retpoline: Y
name: fm10k
vermagic: 5.14.0-611.24.1.el9_7.x86_64 SMP preempt mod_unload modversions
parm: FTAG:FTAG Interface Enable: 0 = Ethernet Interface (default), 1 = IES Interface (array of int)
parm: max_vfs:Number of Virtual Functions: 0 = disable (default), 1-64 = enable this many VFs (array of int)
parm: RSS:Number of Receive-Side Scaling Descriptor Queues: 0 = number of cpus (default), 1-128 = number of queues (array of int)

由于使用的是 Silicom 的方案,可使用其 RDIF控制工具(Silicom Linux RDI Control Utility)。该工具实现了大部分管理功能,可作为后台常驻的 daemon 运行。它通过 CLI方式向管理平面暴露 API,对下通常通过内核驱动(UIO)与数据平面交互。

注:不开启Rdif时,网口无法正常的启用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# rdif start

RDIF daemon version 6.0.10.7.30.1
Loading /etc/rdi/fm_platform_attributes.cfg
SILICOM bprd_ctl driver is not loaded
Connect to host driver using /dev/uio0
Found netdev ens9 (derived from uio device /dev/uio0)
Switch #0 inserted!

Port 0:2 module autodetected (XCVR_TYPE_100G_QSFP28_OPT)
ethMode: 100GBASE_LR4
29.9.2025 12:19:54 port event: unit 0 port 4 is up
29.9.2025 12:19:54 port event: unit 0 port 3 is up
29.9.2025 12:19:54 port event: unit 0 port 3 is up
29.9.2025 12:19:54 port event: unit 0 port 4 is up
Switch is UP, all ports are now enabled
29.9.2025 12:19:56 lport event: unit 0 port 4101 pepId 0 pepLogicalPort 3 portCreated 1
29.9.2025 12:19:56 lport event: unit 0 port 4293 pepId 2 pepLogicalPort 4 portCreated 1
29.9.2025 12:19:56 lport event: unit 0 port 4101 pepId 0 pepLogicalPort 3 portCreated 0
29.9.2025 12:19:56 lport event: unit 0 port 4101 pepId 0 pepLogicalPort 3 portCreated 1
29.9.2025 12:19:56 lport event: unit 0 port 4293 pepId 2 pepLogicalPort 4 portCreated 0
29.9.2025 12:19:56 lport event: unit 0 port 4293 pepId 2 pepLogicalPort 4 portCreated 1
29.9.2025 12:19:58 port event: unit 0 port 2 is up

lPort 3和lPort 4分别是两条PCIE暴露给Host端的端口,而Port 1 和Port 2才是实际的物理端口。


为什么不是试试看神奇的Intel FM10K
http://blog.lenxy.net/2025/08/07/Why-not-FM10K/
作者
lEnxY
发布于
2025年8月7日
许可协议