Skip to content

Commit e60ed49

Browse files
committed
new post: 514
1 parent c4cb139 commit e60ed49

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

source/_posts/514.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
title: Proxmox VE SR-IOV 开启流量统计
3+
date: 2025-11-19 00:00:00
4+
updated: 2025-11-19 00:00:00
5+
categories: 教程
6+
tags:
7+
- Linux
8+
- PVE
9+
- 虚拟机
10+
- 网卡
11+
- SR-IOV
12+
thumbnailImage: https://lfs.libmbr.com/assets/2025/11/19/2b947baf-34a8-4a04-9d3a-118a9f7e5325.webp
13+
---
14+
默认配置下,网卡开启 SR-IOV 后需要将虚拟机的网卡类型改为 PCIe 直通,修改为直通后 Proxmox VE 无法正常读取统计信息。提供一个不太优雅的解决方法。
15+
16+
<!-- more -->
17+
18+
## 前提条件
19+
需要使用到 [VF Representors 接口](https://docs.kernel.org/networking/representors.html)(下文简称 Reps)。网卡必须支持并开启 SwitchDev 特性。
20+
21+
- mlx5 网卡开启 E-Switch 分载、SwitchDev 特性可以阅读[这篇文章](/archives/508/#配置-E-Switch-分载)
22+
23+
## Reps 接口命名
24+
Proxmox VE 9 及更新版本中,Reps 接口的系统默认命名规则是 ``PFNAMErVFID``
25+
26+
如果使用老版本,Reps 接口命名规则由网卡驱动决定,以 NVIDIA/Mellanox 网卡为例,命名规则为 ``PFNAMEpfXvfY``,X 为 PF 接口号,Y 为 VF 接口号。
27+
28+
## 修改前检查
29+
SR-IOV 接口有网络活动时,宿主机上的 VF Representors 接口统计数据会正常更新。
30+
31+
```
32+
$ ifconfig ens0f0h1
33+
ens0f0h1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
34+
inet6 fe80::1c70:19ff:fefe:56fb prefixlen 64 scopeid 0x20<link>
35+
ether 1e:70:19:fe:56:fb txqueuelen 1000 (Ethernet)
36+
RX packets 307679053 bytes 212674010217 (198.0 GiB)
37+
RX errors 0 dropped 0 overruns 0 frame 0
38+
TX packets 246924012 bytes 159490311908 (148.5 GiB)
39+
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
40+
```
41+
确认接口数据正常后即可修改 PVE 代码。
42+
43+
## 操作步骤
44+
1. 先找到 SR-IOV VF 对应的 Representor 接口。
45+
46+
2. 修改 ``/usr/share/perl5/PVE/ProcFSTools.pm``
47+
找到 ``read_proc_net_dev`` 函数,大概位置在第 375 行。
48+
``return`` 前加入下面代码:
49+
50+
```perl
51+
if (!exists $res->{'TAP-DEV'} && exists $res->{'VF-REP-DEV'}) {
52+
$res->{'TAP-DEV'} = {
53+
%{$res->{'VF-REP-DEV'}}
54+
};
55+
}
56+
```
57+
- ``TAP-DEV`` 修改为 ``tapXXXiY````XXX`` 为 VMID,``Y``为网卡序号(任意非负整数,且不与已存在的序号重复)
58+
- ``VF-REP-DEV`` 修改为 Representor 接口名。
59+
60+
3. 如果存在多个接口、多个 VM,则为每个接口、每个 VM 重复上面的步骤。
61+
62+
4. 重启 pvestatd :
63+
``systemctl restart pvestatd``
64+
65+
操作完成后即可看到 WebUI 正常显示流量统计:
66+
![Proxmox VE WebUI Network Stats](https://lfs.libmbr.com/assets/2025/11/19/52f7f5aa-1b39-4907-b4a9-9192e14aa0b2.webp)
67+
68+
## 关闭更新
69+
{% alert info %}
70+
此步骤是可选的。
71+
{% endalert %}
72+
73+
系统更新可能会覆盖上述更改。
74+
75+
使用下面的命令阻止更新:
76+
```perl
77+
apt-mark hold libpve-common-perl
78+
```
79+
80+
使用下面的命令恢复更新:
81+
```perl
82+
apt-mark unhold libpve-common-perl
83+
```

0 commit comments

Comments
 (0)