linux网卡性能优化,如何使用 ethtool 优化 Linux 虚拟机网卡性能

本文介绍了如何使用ethtool工具优化Linux虚拟机的网卡性能,特别是在高并发场景下,通过调整网卡的RX/TX Buffer size来减少丢包现象。详细步骤包括查看和修改RX/TX参数,并在rc.local中设置开机自动运行以保持配置生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何使用 ethtool 优化 Linux 虚拟机网卡性能

12/31/2018

本文内容

在高并发应用场景下,Linux 虚拟机可能会出现丢包现象,可以通过调整网卡的 Buffer size 来缓解此问题。

本文使用 ethtool 来查看和修改 RX/TX 值来获取更好性能,以下为参考示例:

在 ethtool 配置文件中可以看到,RX/TX 值的单位是 section size:

#define NETVSC_SEND_SECTION_SIZE 6144

#define NETVSC_RECV_SECTION_SIZE 1728

查看当前网卡 RX/TX 参数:

[root@centos75 ~]# ethtool -g eth0

Ring parameters for eth0:

Pre-set maximums:

RX: 18811

RX Mini: 0

RX Jumbo: 0

TX: 2560

Current hardware settings:

RX: 10486

RX Mini: 0

RX Jumbo: 0

TX: 192

重要

Pre-set maximums 中的 RX/TX 值为该网卡的 Buffer size 最大值;

Current hardware settings 中 RX/TX 值代表该网卡当前的 Buffer size 大小。

所以,设置的 Current hardware settings 的 RX/TX 值必须在 Pre-set maximums 的限制之内。

调整 RX/TX 参数:

[root@centos75 ~]# ethtool -G eth0 rx 18000 tx 2500

查看调整后的 RX/TX 参数:

<think>我们正在讨论如何在Linux虚拟机中配置VF(Virtual Function)网卡。根据引用[1]和[2],VF是支持SR-IOV的物理网卡虚拟出的一个实例,每个VF有自己独立的PCI配置区域。在KVM虚拟机使用VF可以提升网络性能。 配置步骤大致如下: 1. 确保物理网卡支持SR-IOV,并启用SR-IOV功能,创建VF。 2. 将VF绑定到虚拟机(VM)。 详细步骤: 一、在宿主机上创建VF 1. 加载SR-IOV模块(如果尚未加载): ```bash modprobe <驱动模块名> # 例如,对于Intel网卡可能是ixgbe,mlx4_core(Mellanox)等 ``` 2. 启用SR-IOV功能,并创建VF。例如,对于网卡p4p2,创建2个VF: ```bash echo 2 > /sys/class/net/p4p2/device/sriov_numvfs ``` 3. 为VF设置MAC地址(可选,但建议设置以避免冲突): ```bash ip link set p4p2 vf 0 mac e4:11:22:33:44:50 ip link set p4p2 vf 1 mac e4:11:22:33:44:51 ``` 4. 查看VF状态: ```bash ip link show p4p2 ``` 二、将VF分配给虚拟机 1. 查看VF的PCI地址(例如:0000:42:01.2): ```bash lspci | grep Ethernet ``` 2. 创建XML文件(例如:vf-interface.xml)用于将VF设备附加到虚拟机。内容如下(根据实际情况修改): ```xml <interface type='hostdev' managed='yes'> <source> <address type='pci' domain='0x0000' bus='0x42' slot='0x01' function='0x2'/> </source> </interface> ``` 注意:这里的地址(domain, bus, slot, function)需要替换成上一步查到的实际VF的PCI地址。 3. 将VF设备附加到虚拟机(假设虚拟机名为myvm): ```bash virsh attach-device myvm vf-interface.xml --config ``` 其中`--config`表示永久添加(下次启动生效),如果希望立即生效且临时添加(虚拟机重启后失效),可以去掉`--config`。 三、启动虚拟机并配置网络 1. 启动虚拟机后,登录虚拟机,检查是否识别到新的网卡设备(例如使用`lspci`或`ip link`)。 2. 在虚拟机中配置该网卡(分配IP地址等)。 注意事项: - 在将VF分配给虚拟机之前,确保VF没有被宿主机使用(即未绑定驱动或绑定到vfio-pci驱动)。 - 如果VF被宿主机使用,需要先解绑宿主机驱动,然后绑定到vfio-pci驱动(以便虚拟机使用): ```bash echo <VF的PCI地址> > /sys/bus/pci/drivers/<当前驱动>/unbind echo vfio-pci > /sys/bus/pci/devices/<VF的PCI地址>/driver_override echo <VF的PCI地址> > /sys/bus/pci/drivers/vfio-pci/bind ``` - 对于KVM虚拟机,也可以使用`virsh nodedev-detach pci_0000_42_01_2`(使用VF的节点设备名)来将设备从宿主机分离。 引用[3]提到的问题(虚拟机网卡只能收包不能发包)可能是由于驱动问题或配置错误导致,配置VF时需注意。 以上步骤参考了引用[1][2][4]。</think>在Linux虚拟机中配置VF(Virtual Function)网卡需要结合SR-IOV技术,以下是详细步骤和注意事项: ### 一、配置前提 1. **硬件要求**: - 物理网卡必须支持SR-IOV(如Intel 82599/X710等) - BIOS/UEFI中启用VT-d/IOMMU功能 - 宿主机需使用KVM虚拟化平台[^2][^4] 2. **内核要求**: ```bash # 检查内核支持 grep -E "VT-d|IOMMU" /boot/config-$(uname -r) # 输出应包含CONFIG_INTEL_IOMMU=y或CONFIG_AMD_IOMMU=y ``` ### 二、配置步骤 #### 步骤1:启用SR-IOV并创建VF ```bash # 1. 加载驱动模块(以Intel网卡为例) modprobe ixgbe # 2. 启用SR-IOV(创建2个VF) echo 2 > /sys/class/net/enp4s0f0/device/sriov_numvfs # 3. 设置VF的MAC地址 ip link set enp4s0f0 vf 0 mac e4:11:22:33:44:50 ip link set enp4s0f0 vf 1 mac e4:11:22:33:44:51 # 4. 验证VF创建 ip link show enp4s0f0 ``` ![VF创建验证](https://img-blog.csdnimg.cn/20210306152613597.png)[^4] #### 步骤2:将VF分配给虚拟机 1. **获取VF的PCI地址**: ```bash lspci | grep Ethernet # 输出示例:42:01.0 Ethernet controller: Intel Corporation 82599ES ``` 2. **创建XML设备配置文件**: ```xml <!-- vf-interface.xml --> <interface type='hostdev' managed='yes'> <source> <address type='pci' domain='0x0000' bus='0x42' slot='0x01' function='0x0'/> </source> </interface> ``` ![XML配置示例](https://img-blog.csdnimg.cn/20210306153447826.png)[^4] 3. **将VF附加到虚拟机**: ```bash virsh attach-device vm_name vf-interface.xml --config ``` #### 步骤3:虚拟机内部配置 1. 启动虚拟机后检查网卡: ```bash lspci | grep Ethernet ip link show ``` 2. 配置网卡驱动(通常自动加载): ```bash modprobe ixgbevf # Intel VF驱动 ``` 3. 分配IP地址: ```bash ip addr add 192.168.1.10/24 dev ens10 ip link set ens10 up ``` ### 三、常见问题解决 1. **VF无法创建**: - 检查物理网卡SR-IOV支持:`lspci -vvv | grep -i SR-IOV` - 确保IOMMU启用:在GRUB添加`intel_iommu=on`(Intel)或`amd_iommu=on`(AMD) 2. **虚拟机只能收包不能发包**[^3]: ```bash # 检查VF绑定状态 ethtool -i ens10 | grep driver # 应显示vfio-pci或ixgbevf # 重置VF ip link set enp4s0f0 vf 0 trust on ``` 3. **性能优化**: ```bash # 启用巨帧 ip link set ens10 mtu 9000 # 禁用主机侧过滤 ip link set enp4s0f0 vf 0 spoofchk off ``` ### 四、关键注意事项 1. **VF资源限制**: - 每个PF(物理功能)最多支持256个VF - 实际数量受网卡硬件限制(通过`sriov_totalvfs`查看) 2. **安全特性**: ```bash # 启用MAC地址反欺骗保护 ip link set enp4s0f0 vf 0 spoofchk on # 设置带宽限制(单位Mbps) ip link set enp4s0f0 vf 0 max_tx_rate 1000 ``` 3. **热迁移限制**: - 使用VF的虚拟机**不支持**实时迁移 - 需改用软件定义网络(如OVS)迁移 > 配置完成后,VF网卡可提供接近物理网卡的吞吐量(延迟降低10倍,吞吐量提升2-5倍)[^1][^2] --- ### 相关问题 1. **性能优化** - 如何通过VF队列绑定优化网络性能- 巨帧(MTU 9000)配置对VF性能有何影响? 2. **故障排查** - 虚拟机使用VF后出现网络断连可能的原因? - 如何诊断VF的"只能收包不能发包"问题[^3]? 3. **高级配置** - 如何实现VF的QoS策略(带宽保障/限制)? - 在Kubernetes环境中如何透传VF给Pod使用? 4. **安全防护** - VF的MAC地址欺骗防护机制如何工作? - 如何防止VF耗尽物理网卡资源? [^1]: SR-IOV物理网卡VF特性 [^2]: KVM虚拟机添加SR-IOV VF [^3]: VF网卡收发异常排查 [^4]: VF创建与绑定实战
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值