Linux 上传入网络包的延迟 - 如何分析?

     2023-03-29     120

关键词:

【中文标题】Linux 上传入网络包的延迟 - 如何分析?【英文标题】:Delay of incoming network package on Linux - How to analyse? 【发布时间】:2021-10-26 14:46:57 【问题描述】:

问题是:有时 tcpdump 发现 UDP 数据包的接收被推迟到下一个传入的 UDP 数据包,尽管网络分流设备显示它通过电缆没有延迟。

场景:我在 Linux 上的 profinet 堆栈(位于用户空间)有一个循环连接,它每 4 毫秒(通过原始套接字)接收和发送 Profinet 协议数据包。根据该协议,大约每 30 毫秒它还会在 UDP 套接字上的另一个线程中接收 UDP 数据包并立即回复它们。大约 10% 的 CPU 负载。有时,接收到的 UDP 数据包似乎卡在网络驱动程序中。 2 秒后,下一个 UDP 数据包进来,丢失的 UDP 数据包和下一个都被接收。没有丢包。

我的测量:

    我使用tcpdump -i eth0 --time-stamp-precision=nano --time-stamp-type=adapter_unsynced -w /tmp/tcpdump.pcap 将UDP 流量记录到RAM 磁盘文件中。 同时我使用网络分流设备记录流量。

问题:

    如何找出延迟的来源(或者是已知的影响)? (2. 时间戳(tcpdump 为每个数据包设置的)告诉我什么?我的意思是,它指的是哪个 OSI 层,换句话说:它是什么时候使用的?)

拓扑:“带有 Linux 和 eth0 的嵌入式设备” tap-device PLC。程序“tcpdump”正在嵌入式设备上运行。 Tap 设备正在收听电缆。实际的 Profinet 连接是在 PLC 和嵌入式设备之间。一台 PC 连接在 Tap 设备上以记录它正在收听的内容。

Wireshark(通过 Tap 和 tcpdump):参见 here(tcpdump.pcap 中的数据包编号 3189)

【问题讨论】:

您似乎在描述一个“腐烂的数据包”问题,在轮询到中断模式之间转换时,一些实现 NAPI 的以太网设备驱动程序中存在这种问题。见***.com/questions/23574203/… 和elixir.bootlin.com/linux/v2.6.16.11/source/Documentation/… @sawdust 在那段时间里(当可能的“腐烂的 UDP 数据包”通过电缆到达,2 秒后下一个 UDP 数据包到达并解决它时)从原始套接字读取了很多 Profinet 数据包在并行线程中。所以我猜想以太网驱动程序实际上正在完成它的工作而没有睡太多(并且缺少东西)。 附加信息:使用 --time-stamp-precision=nano 记录 tcpdump 仍然显示有问题的 UDP 数据包有 2 秒的延迟(这是下一个 UDP 数据包进来的时间)跨度> 这是什么内核版本?什么驱动和设备? “在那段时间......读取了很多 Profinet 数据包” -- 不要依赖用户空间活动来猜测驱动程序何时处理中断!事实上,这可能是触发问题的数据包突发。此外,EMAC 硬件无法区分 UDP 和 Profinet 帧。由于 RX 在数据包突发后变为空闲,因此会发生腐烂数据包。尝试 ping 该主机以查看是否会影响 2 秒延迟。据我了解,Profinet 是基于 UDP 构建的,因此您不太可能看到 UDP 堆栈问题。 内核是“5.4.61-rt37-lf-5.4.y+g20de6d5a36a4”和“dmesg|grep net”输出:“001: audit: initializing netlink subsys (disabled), 003: libphy :fec_enet_mii_bus:已探测,000:fec 30be0000.ethernet eth0:已注册的 PHC 设备 0,000:fsl_dpa:FSL DPAA 以太网驱动程序,000:tsn 通用网络链接模块 v1 初始化...,001:Atheros 8031 以太网 30be0000.ethernet-1: 00: 附加 PHY 驱动程序 [Atheros 8031 以太网] (mii_bus:phy_addr=30be0000.ethernet-1:00, irq=POLL)" 【参考方案1】:

这是飞思卡尔快速以太网驱动程序 (fec_main.c) 中的一个错误,NXP 现在通过其强大的支持修复了它。

实际答案(对于“如何找出延迟从何而来?”的问题)是:必须构建一个启用内核跟踪的 Linux,使用内核跟踪修补驱动程序代码,然后使用开发者 Linux 工具 trace-cmd。这是一件非常复杂的事情,但我很高兴它现在得到了修复:

trace-cmd record -o /tmp/trace.dat -p function -l fec_enet_interrupt -l fec_enet_rx_napi -e 'fec:fec_rx_tp' tcpdump -i eth0 --time-stamp-precision=nano --time-stamp-type=adapter_unsynced -w /tmp/tcpdump.pcap

【讨论】:

网络延迟分析

网络延迟分析网络延迟分析框架(TCP)PS:  UDP的设计目标是快速但不可靠,所以它没有内置任何延迟检测并从中恢复的功能。相反,它依赖于应用层协议(和ICMP)来解决数据可靠传输的问题。    查看详情

如何使用 curl 自动上传和签入文件到共享点?

】如何使用curl自动上传和签入文件到共享点?【英文标题】:Howtoautouploadandcheckinthefilestosharepointusingcurl?【发布时间】:2012-11-0616:56:30【问题描述】:我正在尝试使用我的共享点登录凭据将文件从linux上传到共享点。我使用cURL实... 查看详情

关于linux网络抓包的一些笔记整理(代码片段)

...世界作为表象初论)tcpdump简单介绍在Linux中常常使用tcpdump网络抓包工具来进行抓包,排查一些网络问题,需要安装的工具包┌──[root@vms82.liruilongs.github.io]-[~]└─$rpm-qltcpdump||yum-yinstalltcpdumptcpdump抓包命令基本用法tcpdump[选项... 查看详情

linux网络抓包分析工具(tcpdumpwireshark)

...k合用总结一、tcpdump1、作用 行tcpdump指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的“头 查看详情

如何在linux下使用tc优雅的实现网络限流

1.Linux下的流量控制原理通过对包的排队,我们可以控制数据包的发送方式。这种控制,称之为数据整形,shapethedata,包括对数据的以下操作:增加延时丢包重新排列重复、损坏速率控制在qdisc-class-filter结构下,对流量进行控制需... 查看详情

linux抓包工具tcpdump(代码片段)

...tcpdump,就是:dumpthetrafficonanetwork,根据使用者的定义对网络上的数据包进行截获的包分析工具。?tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and... 查看详情

rk3399平台开发系列讲解(网络篇)5.21如何提升网络数据包的接收性能

平台内核版本安卓版本RK3399Linux4.4Android7.1 查看详情

linux服务器被攻击如何进行抓包来进行分析

...途tcpdump简义:dumpthetrafficonanetwork,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提... 查看详情

ns3网络仿真:数据包分析

快乐虾http://blog.csdn.net/lights_joy/欢迎转载,但请保留作者信息在我们生成的xml文件里。是不包括生成的数据包的数据的,在我们的脚本中加入以下的语句:pointToPoint.EnablePcapAll("first")再执行first.py。能够发如今项目路径下多了两个... 查看详情

tcpdump抓包怎么查看抓的包的内容

...数据即可。参考技术ATCPdump抓包命令tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。tcpdump提供了源代码,公开了接口... 查看详情

linux学习笔记网络配置进程管理rpm包的管理和yum介绍(代码片段)

...以收藏起来,以后要用时,随用随查。文章目录1.网络配置1.1查看网络IP和网关(ifconfig)1.2Linux网络环境配置1.3设置主机名和hosts映射1.4主机名解析过程分析(Hosts、DNS)2.进程管理2.1介绍2.2显示系统执行的... 查看详情

网络诊断三部曲

title:网络诊断三部曲date:2017-11-0122:03:40tags:IT技术查信号强度网络现场勘察和延迟分析现场勘查,获取平面图;获取网络类型,确定是零漫游、AP+AP还是AC+AP,这两点是基础信息获取;在Windows命令行或终端中ping任意一台设备,延迟... 查看详情

openvswitch原理与代码分析:网络包的处理过程

?在上一节提到,Openvswitch的内核模块openvswitch.ko会在网卡上注册一个函数netdev_frame_hook,每当有网络包到达网卡的时候,这个函数就会被调用。?static structsk_buff*netdev_frame_hook(structsk_buff*skb){???if(unlikely(skb->pkt_type==PACKET_L 查看详情

如何通过路由器抓包提取手机数据

...由器有控制权的人都能操作。2、利用别人的设备,比如网络探针之类的设备进行操作。3,如是家庭的普通路由器,顶多只能抓取本身连接的数据包,或者与手机通信的数据包。这种情况除非会分析数据包,否则就算抓到也没有... 查看详情

测试linux服务器带宽

测试准备1. 计划考量参数 TCP上传数据带宽 TCP下载数据带宽 UDP上传带宽 UDP下载带宽 多并发支持 稳定性 Tcp通讯网络延迟(小包:32、中包1k、大包1M) UDP通讯网络延迟(小包:32、中包1k、大包1M... 查看详情

如何分析 R 包的加载

】如何分析R包的加载【英文标题】:HowtoprofiletheloadingofanRpackage【发布时间】:2019-07-1609:27:52【问题描述】:我编写了这个R包,它需要很长时间(>10秒,有时长达20-30秒!)才能加载。每次包加载,比如在步骤"**testingifinsta... 查看详情

如何查看gateway转发情况

...和遵守。然后,可以使用特定工具来分析网关服务器上的网络流量,以确定每个网络包的来源和目标地址,以及报文其他信息以及其在网关的处理情况。这些线索可以提供有用的信息,以判断网关的报文处理效果如何。此外,使... 查看详情

shshell:用于显示网络带宽或每秒数据包的快速linux脚本(代码片段)

查看详情