HarrisIce

HarrisIce

V2EX 第 566861 号会员,加入于 2021-12-26 19:15:44 +08:00
今日活跃度排名 2433
HarrisIce 最近回复了
6 小时 56 分钟前
回复了 HarrisIce 创建的主题 宽带症候群 要用 RouterOS,该买官方硬件还是 x86?
结合我另外一篇帖子中一个大佬的回复,测网卡的问题已经解决,在这里把数据共享给大家做参考。

**测试环境**

一台机器,同时装了 Intel X520-DA2 ( 10G 双口)、Mellanox MCX512A ( 25G 双口)两张网卡,32G 内存( 8G hugepage )。设置了 Linux 启动时禁止调度到 2-7 号核心,2-7 专门留给 VPP 、Pktgen 用(并且 worker 核心不重叠),保证测试数据准确。

CPU 如下。

```
Intel(R) Core(TM) i3-10105 CPU @ 3.70GHz
analyzing CPU 6:(所有核心统一设置)
driver: intel_pstate
CPUs which run at the same hardware frequency: 6
CPUs which need to have their frequency coordinated by software: 6
maximum transition latency: 4294.55 ms.
hardware limits: 800 MHz - 4.40 GHz
available cpufreq governors: performance, powersave
current policy: frequency should be within 3.20 GHz and 4.40 GHz.
The governor "performance" may decide which speed to use
within this range.
current CPU frequency is 4.20 GHz.

# lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ MHZ
0 0 0 0 0:0:0:0 yes 4400.0000 800.0000 4199.541
1 0 0 1 1:1:1:0 yes 4400.0000 800.0000 3700.000
2 0 0 2 2:2:2:0 yes 4400.0000 800.0000 3700.000
3 0 0 3 3:3:3:0 yes 4400.0000 800.0000 4199.999
4 0 0 0 0:0:0:0 yes 4400.0000 800.0000 4200.001
5 0 0 1 1:1:1:0 yes 4400.0000 800.0000 4200.000
6 0 0 2 2:2:2:0 yes 4400.0000 800.0000 4199.999
7 0 0 3 3:3:3:0 yes 4400.0000 800.0000 4200.000
```

系统和测试平台如下。

```
Operating System: Ubuntu 22.04.4 LTS
Kernel: Linux 5.15.0-105-generic
Architecture: x86-64
Hardware Vendor: HP
Hardware Model: HP EliteDesk 880 G6 Tower PC
```

**打流路径**

Pktgen 打流 -> Mellanox 1 号口 -> Intel 1 号口 -> VPP 用户态转发 -> Intel 2 号口 -> Mellanox 2 号口 -> Pktgen 接收统计

**测试数据**

pktgen 测试数据如下

```
\ Ports 0-1 of 2 <Main Page> Copyright(c) <2010-2023>, Intel Corporation
Port:Flags : 0:P------ Single 1:P------ Single
Link State : <UP-10000-FD> <UP-10000-FD> ---Total Rate---
Pkts/s Rx : 0 9,091,196 9,091,196
Tx : 14,911,104 0 14,911,104
MBits/s Rx/Tx : 0/9,543 5,818/0 5,818/9,543
Pkts/s Rx Max : 0 9,408,878 9,408,878
Tx Max : 15,058,304 0 15,058,304
Broadcast : 0 0
Multicast : 0 0
Sizes 64 : 0 575,707,178,176
65-127 : 0 0
128-255 : 0 0
256-511 : 0 0
512-1023 : 0 0
1024-1518 : 0 0
Runts/Jumbos : 0/0 0/0
ARP/ICMP Pkts : 0/0 0/0
Errors Rx/Tx : 0/0 0/0
Total Rx Pkts : 0 8,993,964,327
Tx Pkts : 14,541,116,160 0
Rx/Tx MBs : 0/9,306,314 5,756,137/0
TCP Flags : .A.... .A....
TCP Seq/Ack : 74616/74640 74616/74640
Pattern Type : abcd... abcd...
Tx Count/% Rate : Forever /100% Forever /100%
Pkt Size/Rx:Tx Burst: 64 / 64: 64 64 / 64: 64
TTL/Port Src/Dest : 64/ 1234/ 5678 64/ 1234/ 5678
Pkt Type:VLAN ID : IPv4 / UDP:0001 IPv4 / TCP:0001
802.1p CoS/DSCP/IPP : 0/ 0/ 0 0/ 0/ 0
VxLAN Flg/Grp/vid : 0000/ 0/ 0 0000/ 0/ 0
IP Destination : 1.1.1.1 192.168.0.1
Source : 192.168.1.2/24 192.168.2.2/24
MAC Destination : 94:94:26:00:00:01 ab:cd:ef:aa:bb:52
Source : ab:cd:ef:aa:bb:52 ab:cd:ef:aa:bb:53
NUMA/Vend:ID/PCI :-1/15b3:1017/0000:01:0-1/15b3:1017/0000:01:00.1
-- Pktgen 24.03.1 (DPDK 24.03.0) Powered by DPDK (pid:1690) -----------------
```

VPP 性能数据如下

```
Thread 1 vpp_wk_0 (lcore 3)
Time 4312.5, 10 sec internal node vector rate 0.00 loops/sec 6899106.25
vector rates in 8.2346e3, out 0.0000e0, drop 8.2346e3, punt 0.0000e0
Name State Calls Vectors Suspends Clocks Vectors/Call
abf-input-ip4 active 138720 35511313 0 1.24e2 255.99
dpdk-input polling 30192345449 35511318 0 2.86e5 0.00
drop active 138725 35511318 0 1.52e1 255.98
error-drop active 138725 35511318 0 6.71e0 255.98
ethernet-input active 138725 35511318 0 3.62e1 255.98
ip4-drop active 138720 35511313 0 6.85e0 255.99
ip4-input-no-checksum active 138720 35511313 0 4.15e1 255.99
ip4-lookup active 138720 35511313 0 3.07e1 255.99
ip6-input active 5 5 0 5.31e3 1.00
ip6-not-enabled active 5 5 0 1.99e3 1.00
unix-epoll-input polling 29455958 0 0 1.77e3 0.00
---------------
Thread 2 vpp_wk_1 (lcore 4)
Time 4312.5, 10 sec internal node vector rate 256.00 loops/sec 45554.75
vector rates in 9.6155e6, out 6.5761e6, drop 3.8843e5, punt 0.0000e0
Name State Calls Vectors Suspends Clocks Vectors/Call
TenGigabitEthernet3/0/1-output active 155558090 39791416116 0 4.95e0 255.79
TenGigabitEthernet3/0/1-tx active 155558090 28359013714 0 8.19e1 182.30
abf-input-ip4 active 176833510 41466399484 0 8.90e1 234.49
dpdk-input polling 13167973917 41466399488 0 9.99e1 3.15
drop active 21398772 1675106720 0 1.15e1 78.28
error-drop active 21398772 1675106720 0 7.87e0 78.28
ethernet-input active 176833513 41466399488 0 3.49e1 234.49
ip4-arp active 3708505 949377021 0 2.51e2 255.99
ip4-drop active 21398768 1675106716 0 5.87e0 78.28
ip4-input-no-checksum active 176833510 41466399484 0 2.48e1 234.49
ip4-load-balance active 159143247 40740669789 0 1.19e1 255.99
ip4-rewrite active 155434742 39791292768 0 2.10e1 255.99
ip6-input active 4 4 0 7.03e3 1.00
ip6-not-enabled active 4 4 0 1.95e3 1.00
unix-epoll-input polling 12846814 0 0 9.99e2 0.00
```

**测试内容**

没有拿上边的场景去做同等配置,只是做了几个简单配置了解一下转发率。
VPP 使用 DPDK 输入,配置了 6 条路由,3 条 ACL 规则,1 条 ABF (等同于 PBR 规则),此时发送打满了 10G 的线速,接收到了接近 6G 的速度,注意这是 64 字节的小包,大包没有太多参考意义。

**对比**

对比 CCR2004-16G-2S+的 8260.6kpps 转发率( routing fast path )(即 8.2Mpps )(数据来自官方),VPP 做到了 9Mpps 的转发率,这还是纯软件处理、只靠 2 个 CPU 核心、受到 hyperthreading 没关影响的数据,完全调整后应该还能再高一些(懒得弄了)。这台机器我手边随便拿的,正常买的话应该 1000 多块钱,加上全新的 X520-DA2 在 300 多块钱,你可以拥有比 CCR2004 更高的性能(仅限 L3 )。

**结论**

人生苦短,钱包不够,我选 RB5009 。
8 小时 49 分钟前
回复了 HarrisIce 创建的主题 Linux Mellanox 网卡跑 DPDK 一直发不出去包,求大佬解答
@faicker 多谢大佬,感谢!之前折腾了一天,多亏大佬一句话,找到问题了,就是 -m "0.0,1.1" 这个参数的问题。

我这台机器有 8 个逻辑核,一开始我把参数改成了 -m "6.0,7.1" ,启动就会得到下边的错误。

``
pktgen -l 6,7 -m 2048 -a 0000:01:00.0 -a 0000:01:00.1 -- -P -T -m "6.0,7.1"

*** Copyright(c) <2010-2023>, Intel Corporation. All rights reserved.
*** Pktgen created by: Keith Wiles -- >>> Powered by DPDK <<<

EAL: Detected CPU lcores: 8
EAL: Detected NUMA nodes: 1
EAL: Detected shared linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'VA'
EAL: VFIO support initialized
EAL: Probe PCI driver: mlx5_pci (15b3:1017) device: 0000:01:00.0 (socket -1)
EAL: Probe PCI driver: mlx5_pci (15b3:1017) device: 0000:01:00.1 (socket -1)
TELEMETRY: No legacy callbacks, legacy socket not created
*** Error can not use initial lcore for a port
The initial lcore is 6
```

问了 GPT4 ,告诉我说要留一个核心 reserved for management ,然后我把命令改成了`pktgen -l 5-7 -m 2048 -a 0000:01:00.0 -a 0000:01:00.1 -- -P -T -m "6.0,7.1"`,再启动就能正常打流了。
@faicker 晚点我再试试,多谢大佬
@yanpj1992 驱动确认装了,meson 的时候看到 mlx5 已经 enabled 了
应用层的比网络层的优先,系统代理始终会更早一步。

举几个例子,如果你开了系统代理,代理服务器 IP 是你的 VPN 内网里的某个 IP ,用到代理的时候,浏览器会发起代理连接,这个连接的数据包会路由到你的 VPN 里,最后发到你内网里处理,这个过程里它先走了系统代理然后会走路由甚至还走了你 VPN 的路由。如果你浏览器打开你 VPN 内网的 IP ,这个 IP 如果不在浏览器设置的代理排除列表,就会走代理服务器,如果刚好你的代理服务器是本地( 127.0.0.1 )的 xxx 软件,刚好你本地的代理服务器代理发起连接时认为这不是个需要加速的 IP ,它代理出来的流量仍然会走你的 VPN (因为它发起了连接 IP 是你内网的 IP ,就路由到你的 VPN 虚拟网卡了),你就可以访问内网成功,但是如果被认为是个需要加速的 IP ,就加密发到 xxx 软件的服务器去了,最后你这个访问内网就不通了。

详细的说,这两个概念不同。系统代理是个应用层的玩意,就一个实现 SOCK5 、HTTP 之类的前置代理协议的服务而已,VPN 用的那个路由表是个网络层( L3 )的概念,两个东西不一样。

[系统代理] 需要你的浏览器等软件支持代理协议,你才可以走这个代理。在你浏览器配置了系统代理时,会填写一个代理服务器地址(例如 127.0.0.1:1080 ,或者 PAC 文件,但是最后还是解析出代理服务器地址)。当你打开网页的时候,浏览器就会连接这个代理服务器,传输代理协议头和你网页的请求,这个连接过程就会创建一个 TCP 连接,会查路由表发到代理服务器(如果代理服务器是 127.0.0.1 ,就路由到本地,如果是外部 IP ,就路由出去),代理服务器收到之后再自己再代理请求。

[VPN] VPN 客户端在你系统上路由表上安装了控制端下发的几条路由,把你的 IP 数据包直接路由到它的虚拟网卡里,软件中能接到虚拟网卡来的包,软件处理把你的 IP 数据包打封装发到 VPN 服务器,然后 VPN 服务器解封装,就在它的网络里发走了。
@Dzsss 主要是没有相似场景参考单流实际转发速度能到多少,想保底选 VPP 的方案,但是 DPDK 测 Mellanox CX5 网卡的时候一直有问题,不想折腾了。想问问大佬,你那个配置,RB5009 单流(就是单核处理,不是多流同时的总和速度)能到 1Gbps 吗?能到我就冲了,不纠结了
以及这里补充一下,手边正好有一台 i226 网卡的工控,装完 CHR v7 版本的,开机直接内核 fault ,console 只打出来了最后十几行,看不到前边的 stack trace 信息,暂时也不知道是哪里的问题,看起来 x86 装 ROS 这条路确实不太好走,兼容性和稳定性不太好确定。
@FlintyLemming 了解,多谢大佬
@kenneth104 我这里 BGP 条目很少,也就几百条,ROS 的 BGP 我之前参加 MUM 的时候有人说了,就是前缀多的时候接起来特别慢。

x86 确实容易超过 5009 ,我找了 fd.io VPP 的 performance tuning ,发现 x520 的网卡+1 个 cpu 核心,三层转发就可以到 10Mpps 以上,四层 abr 也能有 6Mpps 多,确实直接秒 5009 。手边正好有几台空的机架服务器和几张 mellanox 、intel 的网卡,在考虑要不要自己做网关了。
@Ipsum 大概跑到多少速度来的?以及有 pps 参考不
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3420 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 10:56 · PVG 18:56 · LAX 03:56 · JFK 06:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.