使用bpftrace分析网络包在内核协议栈各层的耗时

使用bpftrace分析网络包在内核协议栈各层的耗时,第1张

网络性能时分析抓包工具是一大利器,tcpdump/wireshark等抓包工具底层都是使用bpf提供的库,抓包位置在软中断从网卡队列(ring buffer)中读取数据后发送给协议栈时同时发给抓包程序一份,也就是只能知道同一seq数据包在网卡接口处一来一回的时间,比较难分析的延时问题都是偶尔的一次抖动(一天一次,几个小时一次这样),所以抖动的原因是发生在内核还是用户太就说不清了(在tcp各监控指标都看不出异常的情况下)。使用bpf可通过kprobe或者tracepoint在协议栈各层的关键函数中添加hook点,当数据包经过该函数时,打印出seq、network namespace、时间戳等关键信息,帮助我们快速定位或者缩小问题范围。

容器环境中,用户反馈在流量没有突增的情况下,请求redis p99时而发生抖动,频率大概是一天一次。排除redis服务端,以及容器的cpu、内存等问题。数据包在协议栈的耗时无法得知,所以决定完善tcp高级指标的监控。同时我们也需要一个工具,能够知道从网卡队列到tcp状态机之前的耗时。

大家可能看到发送过程没有4层的关键函数,因为调用ip_queue_xmit之前是没有填充完整的tcp协议头的,没办法在一个函数中获取到我们需要的完整系信息。

可以看到容器网卡发包后(__dev_queue_xmit)到veth收包(netif_rx),时间戳由608 ms 到了708 ms(为了直观,我们把时间戳由ns转化为了ms)。这样很快就能把问题缩小到网卡接口层。

>

srcSADDR指的是源节点短地址(Source node Short Address),dstSADDR指的是目的节点短地址(Destination node Short Address)。

源节点指的是数据发送发起者,目的节点指的是源节点发送的数据即将到达的节点

希望对你有帮助,欢迎继续追问!!!

1 需要写程序。

2 因为Ethernet是一种网络通信协议,它需要程序来实现数据的传输和控制。

程序包括底层的硬件驱动程序和高层的协议栈,需要专业的开发人员来完成。

3 如果你只是使用Ethernet进行网络通信而不是开发网络应用,你可以使用已有的库和工具,不需要自己写程序。

但是如果你是从事网络应用的开发工作,那么写程序是必不可少的。

根据错误信息,可能是计算机报名系统出现了一些问题,导致监听程序无法找到符合协议堆栈要求的可用处理。这可能是由于系统故障、网络问题、软件设置错误等原因导致的。以下是一些可能的解决方法:

检查网络连接:如果您的网络连接不稳定或者网络速度较慢,可能会导致数据传输失败。请检查您的网络连接,确保网络连接稳定,并尽量避免在网络繁忙的时段进行报名 *** 作。

重启计算机:有时候计算机出现问题可能会导致软件无法正常运行。尝试重启计算机,重新运行报名软件,看是否能够解决问题。

更新软件和驱动程序:如果您的报名软件或者计算机的驱动程序过期或者不兼容,也可能会导致出现问题。请尝试更新软件和驱动程序,确保它们是最新版本并且兼容您的计算机 *** 作系统。

与相关技术人员联系:如果上述方法都没有解决问题,可能需要联系计算机报名系统的技术人员,寻求他们的帮助。他们可能会为您提供更详细的解决方法或者修复系统故障。

分享

协议是个标准,是约定;

协议栈是协议的实现,可以理解为代码,函数库,供上层应用调用。

商业化的协议栈就是给你写好了底层的代码,符合协议标准,提供给你一个功能模块给你调用。

你需要关心的就是你的应用逻辑,数据从哪里到哪里,怎么存储,处理

还有系统里的设备之间的通信顺序什么的

当你的应用需要数据通信时,

调用组网函数给你组建你想要的网络;

当你想从一个设备发数据到另一个设备时,调用无线数据发送函数;当然,接收端就调用接收函数;

当你的设备没事干的时候,你就调用睡眠函数;要干活的时候就调用唤醒函数。

所以当你做具体应用时,不需要关心协议栈是怎么写的,里面的每条代码是什么意思。除非你要做协议研究。

每个厂商的协议栈有区别,也就是函数名称和参数可能有区别

这个要看具体的例子、说明文档

第 9 章 ZedBoard 入门

前面大家已经对 ZYNQ 架构以及相应的开发工具有一定的认识,接下来我们将带领大家来一起 体验 ZYNQ,体验软硬件协同设计的魅力。由于时间的关系,下面的一些实验(本章及后续章节的实验) 可能有不完善的地方,欢迎读者向我们反馈。 91 跑马灯 本实验将指导大家使用 Vivado 集成设计环境创建本书的第一个 Zynq 设计。这里,我们使用跑马灯 这个入门实验来向大家介绍 Vivado IDE 的 IP Integrator 环境,并在 Zedboard 上实现这个简单的 Zynq 嵌 入式系统。之后,我们将会使用 SDK 创建一个简单的软件应用程序,并下载到 Zynq 的 ARM 处理器中, 对在 PL 端实现的硬件进行控制。本实验分为三个小节来向大家进行介绍: 第一节我们将使用 Vivado IDE 创建一个工程。 在第一节的基础上,第二节我们将继续构建一个 Zynq 嵌入式处理系统,并将完成后的硬件导入 到 SDK 中进行软件设计。 最后一节我们将使用 SDK 编写 ARM 测试应用程序, 并下载到 ZedBoard 上进行调试。 实验环境:Windows 7 x64 *** 作系统, Vivado20134,SDK 20134

911 Vivado 工程创建

1) 双击桌面 Vivado 快捷方式 ,或者浏览 Start > All Programes > Xilinx Design Tools > Vivado

20134 > Vivado 20134 来启动 Vivado 2) 当 Vivado 启动后,可以看到图 9-1 的 Getting Started 页面。

图 9- 1 Vivado 开始界面

3) 选择 Create New Project 选项,图 9-2 所示的 New Project 向导将会打开,点击 Next。

图 9- 2 New Project 对话框 4) 在 Project Name 对话框中,输入 first_zynq_design 作为 Project name, 选择 C:/XUP/Zed 作为 Project location,确保 Create project subdirectory 被勾选上,如图 9-3,点击 Next。

图 9- 3 Project Name 对话框 5) 在 Project Type 对话框中,选择 RTL Project,确保 Do not specify sources at this time 选项没有 被勾选,如图 9-4,点击 Next。

图 9- 4 Project Type 对话框 6) 在 Add Source 对话框中, 选择 Verilog 作为目标语言,如果你对 VHDL 熟悉的话, 你也可以 选择 VHDL,如果这里你忘记了选择,在工程创建完成后,也可以在工程设置中选择你熟悉的 HDL 语言。如果你已经有了源文件,在这里就可以选择 Add file 或者 Add directory 进行添加, 由于我们没有任何的源文件, 所以这里我们直接点击 Next 即可,如图 9-5。

图 9- 5 添加源文件 7) 在 Add Existing IP 对话框中,点击 Next。 8) 在 Add Constraints 对话框中,点击 Next。 9) 在 Default Part 对话框中,在 Specify 框中选择 Boards 选项,在下面的 Board 列表中选择 ZedBoard Zynq Evaluation and Development Kit,点击 Next,如图 9-6。

图 9- 6 芯片选择 10) 在 New Project Summary 对话框中,点解 Finish 完成工程创建,至此,我们已经使用 Vivado 创建了一个 Zynq 设计的工程框架,图 9-7 为 Vivado 的工程界面,在第四章我们已经对该界面 进行过介绍,如果还不熟悉的读者再回到前面复习一下。下面我将使用 Flow Navigator 的 IP Integrator 功能完成第二节的嵌入式系统设计。

图 9- 7 Vivado 工程界面

912 在 Vivado 中创建 Zynq 嵌入式系统 这一节我们将创建一个简单的 Zynq 嵌入式系统,该系统使用 Zynq PL 部分实现一个通用 I/O 控制 器 (GPIO),控制器同 ZedBoard 上的 8 个 LED 相连接,并且通过 AXI 总线连接到 PS 端,这样我们就可 以通过将要在第三小节中实现的 ARM 应用程序来对 LED 进行控制。系统结构图如图 9-8 所示。

以上就是关于使用bpftrace分析网络包在内核协议栈各层的耗时全部的内容,包括:使用bpftrace分析网络包在内核协议栈各层的耗时、WebRTC简介及其与SIP互通、ZigBee协议栈程序中,定义的srcSADDR和dstSADDR指的是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9462467.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存