Linux内核网络性能问题的追踪(工具篇)

news2024/9/23 21:31:59

      在现代计算环境中,网络性能对于系统的整体性能至关重要。网络瓶颈不仅会影响数据传输速度,还会影响应用程序的响应时间,最终影响用户体验。为了有效地解决网络性能问题,了解和使用各种追踪工具至关重要。另外一方面,造成网络性能问题的原因有很多,而本文主要关注从Linux内核的角度对网络性能问题的追踪。本文将介绍三种在Linux下常用的性能追踪工具:LTTng、ftrace和内核打印输出,利用这三种工具,可以分别从Linux内核四层及以下协议栈实现代码以及Linux内核应用层协议实现代码入手,在主机上对网络性能问题进行跟踪。

2. Linux内核网络协议栈

      Linux内核网络协议栈是一个复杂且高效的系统实现,用于处理所有网络通信任务。它涵盖了从底层的硬件接口到高层的应用协议,负责数据包的接收、处理、转发和发送。理解Linux内核网络协议栈的结构和工作原理,对于优化网络性能、开发网络应用和排除网络故障非常重要。

Linux内核网络协议栈遵循OSI模型和TCP/IP模型的层次结构,主要包括以下几个层次:

  1. 物理层:负责实际的硬件传输,如网卡驱动程序。
  2. 数据链路层:包括以太网协议,负责数据帧的封装和解封装。
  3. 网络层:主要包括IP协议,负责数据包的路由和转发。
  4. 传输层:包括TCP和UDP协议,负责端到端的数据传输。
  5. 应用层:包括NFS等协议,直接服务于应用。

图1 Linux内核网络协议栈

      图1是Linux内核网络协议栈结构,摘自腾讯云开发者社区[1]。由图可见,在Linux系统中,网络报文的接收沿着Linux网络协议栈向上流转,而网络报文的发送沿着Linux网络协议栈向下流转。我们可以利用工具在Linux网络协议栈实现的各个部分进行追踪和分析,就能定位网络性能问题的根源。

3.  ftrace工具

      ftrace 是 Linux 内核提供的一种强大的跟踪框架,主要用于诊断和调试内核中的性能和功能问题。ftrace 允许开发人员和系统管理员跟踪内核函数的调用、系统事件和其他内核行为 [2]。

       ftrace 的基础是 trace 文件系统,它位于 /sys/kernel/debug/tracing 目录下。该文件系统包含许多文件和子目录,用于配置和查看跟踪数据。Ftrace 通过对这些文件进行读写操作来控制和获取跟踪信息。

ftrace 支持多种跟踪器(tracer),每种跟踪器提供不同的跟踪功能。主要的跟踪器包括:

  1. function tracer: 跟踪内核函数的调用和返回。
  2. function_graph tracer: 跟踪内核函数调用图,包括函数的调用关系和时间消耗。
  3. sched tracer: 跟踪调度事件。
  4. irq tracer: 跟踪中断处理事件。

      ftrace 使用内核中的跟踪点(tracepoints)来收集数据。跟踪点是内核代码中的特定位置,当代码执行到这些位置时,会触发一个事件记录。这些事件记录了各种信息,如时间戳、CPU ID、进程 ID 等。

     ftrace 使用内核的环形缓冲区(ring buffer)来存储跟踪数据。环形缓冲区的大小是可配置的,当缓冲区满时,新的跟踪数据会覆盖最旧的数据。用户可以从缓冲区读取跟踪数据进行分析。

图2 利用ftrace对Linux网络协议栈进行追踪

      图2是国科环宇利用ftrace对Linux网络协议栈进行追踪的结果,从上图可见,套接字在发送过程中,由于要处理外设中断,导致了网络发送性能下降。

4.  LTTng工具

      LTTng(Linux Trace Toolkit Next Generation)是一款功能强大的跟踪工具,用于捕获和分析Linux系统中的内核和用户空间事件。LTTng内核跟踪器通过内核模块实现,这些模块在内核空间中插入跟踪点,用于捕获内核事件。常见的内核模块包括 lttng-modules,这些模块提供了捕获系统调用、调度事件、中断处理等功能。LTTng设计了一套高效的事件处理机制,包括锁定最小化、CPU本地缓存和批量处理等,确保在高负载下的低开销和高性能。

      国科环宇将利用LTTng在高负载下的优良特性,对网络协议栈的性能问题进行追踪和排查。

5.  内核打印输出

      对于实现在内核的应用层协议如果出现性能问题,很难用常规的方法对其进行定位,这时利用内核打印输出可以比较清晰地追踪到性能瓶颈的根源。

      例如sunrpc.nfs_debug 和 sunrpc.rpc_debug 是 Linux 内核中用于调试 NFS(Network File System)和 RPC(Remote Procedure Call)功能的调试选项。它们通常用于开发和调试阶段,以帮助诊断和解决与 NFS 和 RPC 相关的问题。

      sunrpc.nfs_debug用于启用 NFS 客户端和服务器端的调试信息输出。它允许开发人员和系统管理员跟踪和调查 NFS 文件系统的运行时行为。通过设置sunrpc.nfs_debug可以跟踪 NFS 操作,例如文件的读写请求。捕获 NFS 错误和超时情况。分析 NFS 客户端与服务器之间的通信问题。

      sunrpc.rpc_debug 用于启用 RPC(Remote Procedure Call)层的调试信息输出。RPC 是一个用于远程过程调用的协议,NFS 以及许多其他网络服务都使用 RPC 进行通信。通过设置sunrpc.rpc_debug,可以跟踪 RPC 消息的发送和接收。捕获 RPC 调用失败或超时情况。分析 RPC 协议层面的问题,如协议版本不匹配或消息格式错误。

      sunrpc.nfs_debug 和 sunrpc.rpc_debug的输出都是以内核打印的形式呈现的。

6. 结论

      在 Linux 系统调试和性能优化中,选择适当的工具取决于具体的需求和场景。LTTng 和 ftrace 提供了强大的跟踪能力和高级的数据分析功能,适合复杂的调试和性能分析任务;而内核打印输出则是一个简单但实用的调试工具,适合对实现在内核的应用层协议进行跟踪。根据实际情况灵活选择和组合使用这些工具,能够更有效地提升系统的可靠性和性能。

7. 参考文献

[1] Linux Networking Stack: Sending Data. kernel|network| Linux Networking Stack: Sending Data-腾讯云开发者社区-腾讯云

[2] ftrace - Function Tracer . https://www.kernel.org/doc/html/v4.17/trace/ftrace.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLServer用户们,你们摊上大事了!

最近一段时间,我们经常会收到了许多用户的咨询,问我们何时能纳管SQLServer?耐不住小伙伴们的猛烈催促及热切期待,本不想纳管SQLServer的研发团队也抓紧将这项需求提上日程。并在DBdoctor v3.2.2版本中成功实现了对SQLServer的纳管…

VS2019运行报错 应输入预处理器指令

根据错误提示,找到对应行,然后删除多余的#字符即可

小程序渗透测试的两种方法——burpsuite、yakit

首先呢主要是配置proxifier,找到小程序的流量,然后使用burpsuite或者yakit去抓包。 一、使用burpsuiteproxifier的抓包测试 1、先配置proxifier,开启http流量转发 勾选确定 2、配置burp对应代理端口,选择profile,点…

软件工具网站推荐

1.菜鸟工具 菜鸟工具 - 不止于工具菜鸟工具,为开发设计人员提供在线工具,网址导航,提供在线PHP、Python、 CSS、JS 调试,中文简繁体转换,进制转换等工具。致力于打造国内专业WEB开发工具,集成开发环境&…

手把手和你一起从0搭建一个vite+Vue3+element-plus的后台管理系统!

首选需要node环境。你可以参考:如何创建一个vue的新项目,用命令行的方式创建.下载node.js-CSDN博客 所需要的内容官网: https://vitejs.dev/ 安装 | Element Plus Vue Router | Vue.js 的官方路由 axios中文网|axios API 中文文档 | axio…

在国内允许交易伦敦金吗?有没有好的伦敦金交易策略

伦敦金,作为全球金融市场上的一种重要投资品种,以其独特的交易机制和价值稳定性吸引了无数投资者的目光。然而,对于国内投资者而言,是否可以合法参与伦敦金的交易,以及如何制定有效的交易策略,是他们普遍关…

主动算法交易!减持回购/套利/大单拆分/篮子交易/预埋单神器工具!

主动算法致力于服务机构投资者,为其提供以成交为目的的自动化交易执行。 在有限容量内,充分追求客户个性化需求,保证执行效率、降低冲击成本、减少人力成本、保护交易意图、 捕捉交易机会、 符合监管要求和获取交易环节的ALpha收益。 能够帮…

初阶C++(二)

初阶C(二) 1. 重载函数(一)对于重载函数的理解(二)重载函数分类2.引用(一) 引⽤的概念和定义(二)引用的使用(三)const引用 1. 重载函数…

EI期刊目录为何还没更新?预警、On Hold、镇压多重bug,神仙难救Top能逃此劫吗?

本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用&#xff09…

*AI大模型热潮下的冷静思考:谁在守护模型安全?

随着2023年4月的到来,AI大模型领域仿佛迎来了春天,各类产品如雨后春笋般涌现,成为科技界乃至社会各界的热议焦点。从阿里巴巴的“通义千问”到华为的“盘古大模型”,再到商汤科技的“商量SenseChat”,以及即将亮相的“…

一文清晰了解CSS

一、基本概念 1.定义 CSS(Cascading Style Sheets,层叠样式表),前面说了CSS是一种用于描述网页内容外观和样式的标记语言。 具体地,它通过选择器将样式规则应用到HTML元素上,控制网页的布局、颜色、字体等…

linux中top、htop监控工具命令详解

文章目录 top 命令概述如何使用 top 命令top 命令输出解释各部分解释系统信息任务信息CPU 使用信息内存使用信息进程信息 top 命令的常用交互操作top 命令的常用选项查看每个CPU使用情况示例说明默认视图按下 1 键后的视图 如何使用 htop和top之间比较用户界面和可用性功能和特…

服务器信息获取工具

功能介绍 SSH连接到远程服务器: 用户可以输入目标服务器的IP地址、用户名、密码以及SSH端口(默认22)。 工具会尝试连接到远程服务器,并在连接失败时显示错误信息。 运行命令并返回输出: 工具可以在远程服务器上运…

游戏AI的创造思路-技术基础-决策树(1)

决策树,是每个游戏人必须要掌握的游戏AI构建技术,难度小,速度快,结果直观,本篇将对决策树进行小小解读~~~~ 目录 1. 定义 2. 发展历史 3. 决策树的算法公式和函数 3.1. 信息增益(Information Gain&…

枚举对象序列化规则(将Java枚举转换为JSON字符串的步骤)

文章目录 引言I 案例分析1.1 接口签名计算1.2 请求对象1.3 枚举对象序列化II 在JSON中以枚举的code值来表示枚举的实现方式2.1 自定义toString方法返回code引言 在Java中,每个对象都有一个toString方法,用于返回该对象的字符串表示。默认情况下,Enum类的toString方法返回的…

dbeaver连接postgresql报错��������: �û� “root“ Password ��֤ʧ��

文章目录 问题描述解决办法 问题描述 新安装完成的postgresql通过dbeaver连接访问报错��������: �� “root” Password ��֤ʧ&#…

绝区柒--LLM简史

这是一系列LLM介绍的可成,分以下五个不分 序言:大型语言模型LLM简史第一部分:代币化——完整指南第 2 部分:使用 Python 中的 Scratch 从零开始使用 word2vec 进行词嵌入第 3 部分:用代码解释自注意力机制第 4 部分&a…

揭秘“消费即赚”的循环购模式

大家好,我是吴军,今天我将带您深入探索一种颠覆传统的新型商业模式——循环购模式。在这个模式中,消费者不仅能享受到购物的乐趣,还能通过消费获得实实在在的回报,甚至实现“边消费边赚钱”的奇妙体验。您是否好奇&…

Floyd算法简单理解:不断加中转点更新最短路,实现多对多最短路径

目录 Floyd算法 简单理解 简单例子 Floyd算法简单理解:不断加中转点更新最短路,实现多对多最短路径 Floyd算法 又称为Floyd-Warshall算法,是一种用于求解带权有向图中任意两顶点间的最短路径的算法。该算法利用动态规划的思想,通过不断更新顶点对之间的最短路径来实现。…

Games101——光珊化——深度缓存——shading着色 1

深度缓存 如何解决远近的问题,能正确的覆盖 按照画作来说,先画出远处的物体,再画出近处的物体,近处会将其覆盖,这种算法叫做画家算法 但事实上,排序不仅要花更多的时间,而且排序并不容易&…