当前位置: 首页 > web >正文

优化篇 | 网络时延优化有哪些项

本文主要内容生成自deepseek,作者对内容和格式做了编排、整理和裁剪。重要提醒:文章中的命令请读者谨慎对待,先测试验证无异后方可生产部署。

图片

正文如下:

计算机系统中的时延(Latency)是衡量系统性能的关键指标之一,涉及硬件、软件和网络等多个层面。时延层级关系大致如下:
硬件时延(纳秒级)--OS/软件时延(微秒级us--网络时延(毫秒级) --应用时延(毫秒-秒级)

本文讲主要阐述网络延迟这一内容。

计算机中网卡延迟(NIC Latency) 通常处于微秒(μs)到毫秒(ms)级,具体取决于工作模式和场景。以下是详细分类及典型值:

一、网卡延迟的层级与典型范围

1. 物理层硬件延迟(最低延迟)

环节

延迟范围

单位

说明

信号处理延迟

0.1~0.5 μs

μs

网卡芯片处理电信号/光信号的物理时间

串行化延迟

< 0.1 μs

μs

数据比特流转换的时间(与带宽相关)

硬件队列缓冲延迟

1~10 μs

μs

网卡内置缓存队列的等待时间

总计(理想情况)

1~10 μs

μs

仅网卡自身硬件处理时间

示例:25G/100G 高速网卡在轻载下可达 1-5 μs 的端到端硬件延迟。

2. 驱动与内核协议栈延迟(主要瓶颈)

环节

延迟范围

单位

说明

中断处理延迟

5~50 μs

μs

硬件中断到CPU响应的时间

数据拷贝延迟

10~100 μs

μs

内核态→用户态内存拷贝(传统模式)

协议栈处理延迟

20~200 μs

μs

TCP/IP 包头解析、校验和计算等

总计(传统模式)

50~500 μs

μs

驱动和内核协议栈成为主要延迟源

关键问题:传统内核协议栈中,一次数据包处理可能经历 200+ μs 延迟。

3. 高负载与虚拟化场景延迟

场景

延迟范围

单位

原因

队列拥塞延迟

100 μs~10 ms

μs~ms

高流量下网卡或软件队列积压

虚拟化额外开销

50~500 μs

μs

vSwitch处理(如OVS)、VM-Exit事件

PCIe 传输延迟

1~5 μs

μs

数据在主机与网卡间通过PCIe总线传输

总计(复杂场景)

0.1~10 ms

ms

高负载或云环境中延迟显著上升

示例:虚拟机通过OVS转发时,延迟可能从物理机的 50 μs 恶化到 500 μs。

二、不同工作模式对延迟的影响

优化技术对比

工作模式

延迟水平

适用场景

代表技术

传统内核协议栈

高(>100 μs)

通用服务器

Linux Kernel Networking

零拷贝优化

中(20~50 μs)

高频交易、流媒体

SO_ZEROCOPY, sendfile()

用户态协议栈

极低(5~20 μs)

超低延迟应用

DPDK, FD.io, XDP

硬件卸载

最低(1~5 μs)

高性能计算、RDMA网络

RoCE, iWARP, TCP Offload Engine

DPDK/XDP:绕过内核直接将数据包送入用户态,延迟可降至 10 μs 以内。

三、延迟测试方法

精准测量工具

工具

测量目标

精度

使用示例

ping

端到端ICMP延迟(含网络)

毫秒级

ping -c 100 <IP> 统计平均RTT

hwstamp_ctl

网卡硬件时间戳

纳秒级

配合PTP协议校准本地时钟

dpdk-testpmd

用户态网卡延迟

微秒级

测试DPDK收发包环回延迟

XDP程序

内核eBPF层处理延迟

微秒级

注入eBPF代码测量处理时间

Wireshark

抓包分析协议栈各层延迟

微秒级

过滤TCP包计算SYN→SYN-ACK时间

测试命令示例(DPDK环回测试): 

dpdk-testpmd --vdev=net_af_packet0 -- -i --total-num-mbufs=65536

set fwd macswap

start

输出结果中将包含avg_latency(平均延迟) 和 max_latency(最大延迟)。

四、关键结论

1. 物理网卡硬件延迟:1~10 μs(高速网卡自身处理极快) 

2. 实际应用延迟主要来源: 

        - 内核协议栈处理(50~200 μs)  

        - 数据拷贝(10~100 μs)  

        - 虚拟化开销(50~500 μs)  

3. 优化后可达到的延迟: 

        - DPDK用户态模式:5~20 μs  

        - RDMA(RoCEv2):1~5 μs(绕过操作系统)  

   

注意:日常所说的“网卡延迟”通常包含驱动和协议栈开销,而非仅硬件延迟。10G/25G网卡在优化后可持续稳定低于 20 μs,但未经优化的普通环境可能达到数百微秒甚至毫秒级。

有了以上优化的定位和主要思路,接下来再说说如何进行优化。

针对网卡延迟的优化主要围绕四个层面展开:硬件选型与配置、驱动与内核协议栈优化、用户态协议栈技术、以及应用层协议栈优化。以下是具体优化措施及对应命令示例:

一、硬件与驱动层优化

1. 启用高性能模式

禁用节能模式(防止CPU降频)

sudo cpupower frequency-set --governor performance

关闭ASPM电源管理(减少PCIe唤醒延迟)

echo "performance" | sudo tee /sys/module/pcie_aspm/parameters/policy

2. 优化网卡队列配置

查看当前队列配置

ethtool -g eth0

增大RX/TX环形队列长度(减少丢包)

sudo ethtool -G eth0 rx 4096 tx 4096

启用多队列RSS(分散CPU负载)

sudo ethtool -L eth0 combined 8 启用8个队列

3. 中断绑定与优化

将中断绑定到特定CPU核(避免核间切换)

echo 0f | sudo tee /proc/irq/$(grep eth0 /proc/interrupts | awk -F: '{print $1}')/smp_affinity

启用NAPI GRO(减少中断次数)

sudo ethtool -K eth0 gro on

二、内核协议栈优化

1. 减少数据拷贝

启用零拷贝(需要应用支持)

sudo sysctl -w net.core.optmem_max=4194304

sudo ethtool -K eth0 tx-udp_tnl-segmentation on

启用TCP直接缓存访问(DCA)

sudo setpci -v -s 00:1f.0 48.w=0x0443

2. 协议栈参数调优

优化TCP缓冲区

sudo sysctl -w net.core.rmem_max=16777216

sudo sysctl -w net.core.wmem_max=16777216

sudo sysctl -w net.ipv4.tcp_rmem='4096 87380 16777216'

sudo sysctl -w net.ipv4.tcp_wmem='4096 65536 16777216'

禁用TCP延迟确认

sudo sysctl -w net.ipv4.tcp_delack_min=0

3. 虚拟化优化(KVM场景)不涉及

启用巨页(减少TLB Miss)

sudo sysctl -w vm.nr_hugepages=1024

配置vCPU绑定

virsh vcpupin <VM_NAME> 0 2 将vCPU0绑定到物理CPU2

三、用户态加速方案

1. DPDK部署(完全绕过内核)

绑定网卡到uio驱动

sudo modprobe uio

sudo insmod dpdk/build/kmod/igb_uio.ko

sudo dpdk-devbind.py --bind=igb_uio 0000:01:00.0

启动testpmd测试工具

sudo dpdk-testpmd -l 0-3 -n 4 -- -i --forward-mode=macswap

查看延迟统计

testpmd> show port stats all

2. XDP加速(eBPF内核层处理)

加载XDP程序(示例:直接转发)

sudo ip link set dev eth0 xdp obj xdp_example.o sec xdp

监控XDP性能

sudo bpftool prog show

sudo bpftool prog dump xlated id <PROG_ID>

3. RDMA配置(超低延迟网络)

加载RDMA模块

sudo modprobe rdma_rxe

配置软RDMA设备

sudo rdma link add rxe_eth0 type rxe netdev eth0

测试RDMA延迟

ib_send_lat -d rxe0 -F 客户端

ib_send_lat -d rxe0 -F <SERVER_IP> 服务器端

四、高级队列管理

1. 流量整形(减少Bufferbloat)

使用fq_codel队列管理

sudo tc qdisc add dev eth0 root fq_codel

限制出口带宽(防止队列堆积)

sudo tc qdisc add dev eth0 root tbf rate 1gbit burst 32kbit latency 50ms

2. 优先级标记(QoS)

标记高优先级流量(DSCP 46)

sudo iptables -t mangle -A OUTPUT -p tcp --dport 5001 -j DSCP --set-dscp 46

配置硬件QoS

sudo mlnx_qos -i eth0 --trust dscp

五、延迟监控与诊断

1. 精准延迟测量

使用hwstamp获取纳秒级时间戳

sudo hwstamp_ctl -i eth0 -t 1 -r 1

DPDK延迟测试(环回模式)

sudo dpdk-testpmd --vdev=net_af_packet0 -- -i --forward-mode=macswap --latency-stats

Ping带时间戳(内核时间)

ping -D 192.168.1.1

2. 协议栈延迟分析

跟踪内核网络栈处理路径

sudo perf trace -e 'net:*' -p $(pgrep your_app)

监控软中断延迟

sudo perf stat -e 'irq:softirq_entry,irq:softirq_exit' -a

优化效果对比

优化级别

典型延迟

适用场景

关键命令示例

少中断次

100-500 μs

通用服务器

ethtool -K eth0 gro on

内核协议栈参数优化

50-100 μs

高频交易网关

sysctl -w net.ipv4.tcp_rmem=...

DPDK/XDP

10-30 μs

高频交易、NFV

DDoS防护、负载均衡

ip link set dev eth0 xdp obj...

RDMA硬件卸载

1-5 μs

HPC、分布式存储

ib_send_lat -d mlx5_0

优化思路:

> 1. 测量先行:用hwstamp_ctl或dpdk-testpmd建立基线 

> 2. 逐级优化:内核调优→ XDP → DPDK → RDMA  

> 3. 尾延迟优先:监控P99/P999而不仅是平均值 

> 4. 全栈协同:结合应用层(Zero-Copy)+OS+网卡优化 

场景优化:

> - 普通业务:内核调优 + 队列绑定 → 200μs → 100μs

> - 关键业务:DPDK/XDP → 100μs → 20μs

> - 极致场景:RDMA → 20μs → 1μs

再提醒:

文章中的命令请读者谨慎对待,先测试环境根据实际情况验证无异后方可再部署。

文章支持。

http://www.xdnf.cn/news/13302.html

相关文章:

  • ARM 单片机定义变量绝对地址方法
  • umask命令详解
  • 如何在Debian中提高phpstorm的稳定性
  • PostgreSQL 安装与配置全指南(适用于 Windows、macOS 与主流 Linux 发行版)
  • <6>-MySQL表的增删查改
  • Fastapi的swagger文档响应超时无法访问的解决办法
  • mybatisplus.BaseMapper#selectPage 使用方法
  • 服务器内存能不能用在台式机上
  • 模板语法中的插值语法详解
  • innodb 数据页结构
  • SpringBoot集成Tess4j :低成本解锁OCR 图片识别能力
  • 论文略读: CUT YOUR LOSSES IN LARGE-VOCABULARY LANGUAGE MODELS
  • YSYX学习记录(八)
  • 【51单片机】5. 矩阵键盘与矩阵键盘密码锁Demo
  • Debian系统简介
  • R7-4 统计单词的个数
  • 电影感户外柔和旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • C++ 智能指针
  • postgresql搭建与初始化
  • EtherCAT转CC-Link IE协议转换通讯助力库卡机器人与三菱PLC无缝对接
  • 【Linux篇】细品环境变量与地址空间
  • Qt Widget类解析与代码注释
  • day27/60
  • 可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
  • 前端技术 HTML iframe 详细解读
  • 每日算法 -【Swift 算法】删除链表的倒数第 N 个结点
  • 聊聊 Pulsar:Producer 源码解析
  • STL 6分配器
  • 智能文档结构化技术的应用,重塑合同管理模式
  • CSS Modules使用