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

      在现代计算环境中,网络性能对于系统的整体性能至关重要。网络瓶颈不仅会影响数据传输速度,还会影响应用程序的响应时间,最终影响用户体验。为了有效地解决网络性能问题,了解和使用各种追踪工具至关重要。另外一方面,造成网络性能问题的原因有很多,而本文主要关注从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.mzph.cn/diannao/43626.shtml

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

相关文章

CTF-PWN-kernel-栈溢出(retuser rop pt_regs ret2dir)

文章目录 参考qwb2018 core检查逆向调试打包上传测试脚本retuserkernel ropinit_credcommit_creds( prepare_kernel_cred(0) )开启KPTI利用swapgs_restore_regs_and_return_to_usermode开启KPTI利用SIGSEGVrop设置CR3寄存器再按照没有KPTI返回 kernel rop ret2userpt_regs 构造…

2024年浙江省高考分数一分一段数据可视化

下图根据 2024 年浙江高考一分一段表绘制,可以看到,竞争最激烈的分数区间在620分到480分之间。 不过,浙江是考两次取最大,不是很有代表性。看看湖北的数据,580分到400分的区段都很卷。另外,从这个图也可以…

el-image放大图片功能

1.需求&#xff1a;点击图片后放大图片 html代码&#xff1a; <el-imagestyle"width: 100px; height: 100px":src"baseUrl item.id":zoom-rate"1.2":max-scale"7":min-scale"0.2":preview-src-list"srcList"…

Xilinx FPGA UltraScale SelectIO 接口逻辑资源

目录 1. 简介 2. Bank Overview 2.1 Diagram 2.2 IOB 2.3 Slice 2.4 Byte Group 2.5 I/O bank 示例 2.6 Pin Definition 2.7 数字控制阻抗(DCI) 2.8 SelectIO 管脚供电电压 2.8.1 VCCO 2.8.2 VREF 2.8.3 VCCAUX 2.8.4 VCCAUX_IO 2.8.5 VCCINT_IO 3. 总结 1. 简介…

【国潮】软件本土化探索

文章目录 一、国产-操作系统银河麒麟&#xff08;Kylin&#xff09;操作系统华为鸿蒙系统&#xff08;HarmonyOS&#xff09;统信UOS深度Deepin 二、国产-服务器华为鲲鹏&#xff1a;飞腾&#xff1a;海光&#xff1a;兆芯&#xff1a;龙芯&#xff1a;申威&#xff1a; 三、国…

Redis学习 - 基础篇

Redis学习 - 基础篇 一. 简介 Redis 是一个高性能的key-value数据库&#xff0c;常用的数据类型如下&#xff1a;string&#xff0c;list&#xff0c;set&#xff0c;zset&#xff0c;hash 二. 安装 Widows和Linux下如何安装Redis-CSDN博客 三. 常用命令 配置及数据库操作…

《信息技术与信息化 》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《信息技术与信息化 》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《信息技术与信息化 》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;山东省科学技术协会 主办单…

国内磁性器件核心企业『云路新能源』携手企企通正式启动SRM项目,供应链竞争力再上新台阶

近日&#xff0c;珠海黎明云路新能源科技有限公司&#xff08;以下简称“云路新能源”&#xff09;携手企企通启动SRM数字化采购供应链管理项目&#xff0c;双方相关负责人与项目组成员出席本次启动会。 本次采购数字化项目建设&#xff0c;企企通将助力云路新能源实现采购全场…

智能无人数字直播间 打造24小时的无人直播间源码系统 带网站的安装代码包以及搭建教程

系统概述 智能无人数字直播间系统是一种基于人工智能技术的软件工具&#xff0c;它结合了高精度扫描建模、自动化控制、多模态生成等多项先进技术&#xff0c;能够实现对真实人物的高度仿真&#xff0c;并自主执行各类直播任务。该系统不仅支持24小时不间断直播&#xff0c;还…

微信小程序引入自定义子组件报错,在 C:/Users/***/WeChatProjects/miniprogram-1/components/路径下***

使用原生小程序开发时候&#xff0c;会报下面的错误&#xff0c; [ pages/button/button.json 文件内容错误] pages/button/button.json: [“usingComponents”][“second-component”]: “…/…/components/second-child/index”&#xff0c;在 C:/Users/***/WeChatProjects/m…

Android约束布局的概念与属性(2)

目录 3&#xff0e;链式约束4&#xff0e;辅助线 3&#xff0e;链式约束 如果两个或以上控件通过下图的方式约束在一起&#xff0c;就可以认为是他们是一条链&#xff08;如图5为横向的链&#xff0c;纵向同理&#xff09;。 图5 链示意图 如图5所示&#xff0c;在预览图中选…

解读网络安全公司F5:助企业高效简化多云和应用部署

伴随企业加速数字化转型工作、扩展到新的基础设施环境并采用微服务架构&#xff0c;企业正拥抱混合和多云基础设施所带来的灵活性。Ernst & Young调查数据显示&#xff0c;84%的企业正处于向现有网络安全解决方案套件添加多种新技术的早期阶段。企业同样意识到&#xff0c;…

nftables(3)表达式(1)数据类型

简介 前面文章主要介绍的是nftables的基本原理和基础的配置&#xff0c;如nftables基本的表、链、规则的创建和管理。本篇文章主要介绍的是表达式EXPRESSIONS。 在网络安全和数据处理中&#xff0c;表达式&#xff08;Expressions&#xff09;扮演着非常重要的角色。它们用于…

二. Linux内核

一. Linux内核源码目录分析 arch 包含与体系结构相关的代码&#xff0c;用于支持不同硬件体系结构的实现。这个目录下会根据不同的架构&#xff08;如x86、arm、mips等&#xff09;进一步细分。 block 用于处理块设备的子系统&#xff0c;包含与块设备驱动和I/O调度相关的代码。…

Vue核心 — Vue2响应式原理和核心源码解析(核心中的核心)

一、前置知识 1、Vue 核心概念 Vue 是什么? Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 Vue 核心特点是什么? 响应式数据绑定:…

绝区捌--将GPT幻觉的发生率从20%以上降低到2%以下

总结&#xff1a;我们没有使用微调&#xff0c;而是结合使用提示链和预处理/后处理来将幻觉发生率降低一个数量级&#xff0c;但这确实需要对 OpenAI 进行 3-4 倍的调用。还有很大的改进空间&#xff01; 使用 GPT 等大型语言模型面临的最大挑战之一是它们倾向于捏造信息。 这…

使用Python绘制QQ图并分析数据

使用Python绘制QQ图并分析数据 在这篇博客中&#xff0c;我们将探讨如何使用Python中的pandas库和matplotlib库来绘制QQ图&#xff08;Quantile-Quantile Plot&#xff09;&#xff0c;并分析数据文件中的内容。QQ图是一种常用的统计图表&#xff0c;用于检查一组数据是否服从…

C# 下sendmessage和postmessage的区别详解与示例

文章目录 1、SendMessage2、PostMessage3、两者的区别&#xff1a; 总结 在C#中&#xff0c;SendMessage和PostMessage是两个用于Windows编程的API&#xff0c;它们用于向窗口发送消息。这两个方法都位于System.Windows.Forms命名空间中&#xff0c;通常用于自动化Windows应用程…

科普文:分布式系统的架构设计模式

一、分布式架构基本概念 分布式架构是一种计算机系统设计方法&#xff0c;它将一个复杂的系统划分为多个自治的组件或节点&#xff0c;并通过网络进行通信和协作。每个组件或节点在功能上可以相互独立&#xff0c;但又能够通过消息传递或共享数据来实现协同工作。分布式架构主要…

值传递与引用传递:深入理解Java中的变量赋值和参数传递机制

在Java中&#xff0c;理解值传递&#xff08;值拷贝&#xff09;与引用传递&#xff08;地址拷贝&#xff09;之间的区别对于正确处理数据结构和对象至关重要。本文将通过示例代码深入探讨这两种机制&#xff0c;并解释它们如何影响程序的行为。 值传递&#xff08;值拷贝&…