使用 ftrace 跟踪内核丢包问题定位的实践

天翼云开发者社区
• 阅读 0

本文分享自天翼云开发者社区《使用 ftrace 跟踪内核丢包问题定位的实践》,作者:f****n

数据包的丢失可能会导致性能下降或服务中断。为了诊断内核中是否有丢包问题,我们可以使用 ftrace 工具进行内核级别的跟踪,定位导致数据包丢失的原因。下面通过一个实际的例子,来展示如何使用 ftrace 来跟踪网络丢包的问题。

一、背景 在一个高流量的网络环境中,可能会发生数据包丢失。这种丢包可能是由于内核中的调度延迟、网络驱动问题或资源争用等原因导致的。通过分析内核的网络栈,可以帮助我们定位丢包的具体原因。

二、启用 ftrace 并开始跟踪 首先,确保你的系统已经启用了 ftrace。你可以通过以下命令检查系统是否支持 ftrace:ls /sys/kernel/debug/tracing如果返回了相关的文件和目录,说明系统支持 ftrace。 接下来,我们将使用 ftrace 跟踪内核中与网络相关的函数调用,查看是否有异常的情况发生。

三、跟踪 tcp 发送和接收 丢包通常与 TCP 发送和接收有关,因此我们首先从 tcp_sendmsg 和 tcp_recvmsg 函数入手。可以通过以下步骤开启 ftrace 跟踪:

选择跟踪点: 我们将跟踪 tcp_sendmsg 和 tcp_recvmsg 这两个函数,它们分别处理数据包的发送和接收。 打开 ftrace 调试接口:echo function > /sys/kernel/debug/tracing/current_tracer 启用 tcp_sendmsg 和 tcp_recvmsg 跟踪: 在 ftrace 中,我们可以选择对特定的内核函数进行跟踪。我们将追踪 TCP 发送和接收相关的函数: echo tcp_sendmsg > /sys/kernel/debug/tracing/set_ftrace_filter echo tcp_recvmsg > /sys/kernel/debug/tracing/set_ftrace_filter

开始跟踪: 启动 ftrace 来记录内核函数的调用。 echo 1 > /sys/kernel/debug/tracing/tracing_on

查看跟踪结果: 通过查看 /sys/kernel/debug/tracing/trace 文件,我们可以看到 tcp_sendmsg 和 tcp_recvmsg 函数的调用情况。 cat /sys/kernel/debug/tracing/trace 这时,ftrace 会输出类似如下的内容: <...>-1234 [000] .... 10938.567892: tcp_sendmsg: skb=0x1234, len=1500, dest=192.168.1.10 <...>-1234 [000] .... 10938.567895: tcp_sendmsg: skb=0x1235, len=1500, dest=192.168.1.10 <...>-1234 [000] .... 10938.568002: tcp_recvmsg: skb=0x1236, len=1500, src=192.168.1.10 每一条记录都包含了发送和接收数据包的具体信息,例如数据包的长度、源/目标ip等。

四、分析丢包现象 假设在跟踪结果中,我们注意到 tcp_sendmsg 和 tcp_recvmsg 的日志显示有发送的数据包,但接收端并没有相应的接收记录。通过分析这些日志,我们可以判断出以下几种可能性:

网络层丢包: 如果发送的数据包数量大于接收的数据包数量,可能是由于网络层的丢包。此时,可以查看其他网络设备的日志,如交换机、路由器等,确认是否存在网络丢包。

内核队列拥塞: 如果发送的数据包都显示成功发送,但由于内核网络栈中存在队列拥塞,接收端可能无法及时接收数据包。在 ftrace 中,我们还可以查看 tcp_retransmit_skb 函数的调用情况。如果这个函数被频繁调用,说明存在数据包重传,可能是由于网络拥塞或内核的调度延迟导致的。

可以通过以下命令启用 tcp_retransmit_skb 跟踪: echo tcp_retransmit_skb > /sys/kernel/debug/tracing/set_ftrace_filter 查看跟踪结果时,如果出现大量的重传记录,这就说明丢包发生的原因可能是网络拥塞或系统资源不足。

硬件问题: 如果数据包在网络接口上确实被成功发送,但没有到达接收端,可能是由于硬件问题(如网卡驱动故障或硬件故障)。此时可以通过查看 netif_receive_skb 和网卡驱动的 net_device 函数来分析是否存在硬件故障或驱动问题。 echo netif_receive_skb > /sys/kernel/debug/tracing/set_ftrace_filter

五、禁用跟踪和清理 完成分析后,记得停止跟踪并清理 ftrace 配置,以较少对系统性能产生影响。 停止跟踪:echo 0 > /sys/kernel/debug/tracing/tracing_on 清理过滤器:echo > /sys/kernel/debug/tracing/set_ftrace_filter

六、总结 通过使用 ftrace 工具跟踪内核中的网络函数调用,我们可以非常方便地分析网络丢包的问题。在本例中,我们通过跟踪 tcp_sendmsg 和 tcp_recvmsg 函数,结合 tcp_retransmit_skb 和 netif_receive_skb 等内核函数的日志,能够帮助我们快速定位丢包的原因。无论是网络拥塞、内核调度问题,还是硬件故障,ftrace 提供了一个非常强大的工具来诊断内核中的各类问题。

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
systemtap使用:获取ssh登录的用户密码
一、Systemtap概述:        SystemTap是一个诊断Linux系统性能或功能问题的开源软件,对用户级和内核级代码提供了静态和动态跟踪的功能。Systemtap采用其他的内核框架做源:静态探针用tracepoints、动态探针用kprobes、用户级别的探针用uprobes。这些源也为perf、LTTng所用
Stella981 Stella981
3年前
Scapy 从入门到放弃
0x00前言最近闲的没事,抽空了解下地表最强的嗅探和收发包的工具:scapy。scapy是一个python模块,使用简单,并且能灵活地构造各种数据包,是进行网络安全审计的好帮手。0x01安装因为2020年python官方便不再支持python2,所以使用python3安装。!(https://oscimg.oschina.net/os
Stella981 Stella981
3年前
Centos 7 使用最新内核并使用BBR 加速
我们知道,在国外的一些VPS上,网络丢包一直是造成服务器访问缓慢的主要因素,一旦丢包,就需要再次发包,而再次发的包也存在丢包情况,所以丢包和网络情况的好坏几乎是指数相关的关系。而谷歌为我们带来了干货新的TCP拥塞控制算法BBR(BottleneckBandwidthandRTT),已经在linux4.9的内核中集成了该算法,windo
Easter79 Easter79
3年前
SystemTap使用技巧
1.简介SystemTap是一个Linux非常有用的调试(跟踪/探测)工具,常用于Linux内核或者应用程序的信息采集,比如:获取一个函数里面运行时的变量、调用堆栈,甚至可以直接修改变量的值,对诊断性能或功能问题非常有帮助。SystemTap提供非常简单的命令行接口和很简洁的脚本语
Stella981 Stella981
3年前
Dubbo 整合 Pinpoint 做分布式服务请求跟踪
在使用Dubbo进行服务化或者整合应用后,假设某个服务后台日志显示有异常,这个服务又被多个应用调用的情况下,我们通常很难判断是哪个应用调用的,问题的起因是什么,因此我们需要一套分布式跟踪系统来快速定位问题,Pinpoint可以帮助我们快速定位问题(当然,解决方案也不止这一种)。什么是Pinpoint摘自Pinpoint学习笔记
Stella981 Stella981
3年前
Linux 网络包接收过程的监控与调优
Linux内核对网络包的接收过程大致可以分为接收到RingBuffer、硬中断处理、ksoftirqd软中断处理几个过程。其中在ksoftirqd软中断处理中,把数据包从RingBuffer中摘下来,送到协议栈的处理,再之后送到用户进程socket的接收队列中。!Linux教程(https://oscimg.oschina.net/oscnet/up
京东云开发者 京东云开发者
2星期前
大促数据库压力激增,如何一眼定位 SQL 执行来源?
作者;京东科技王奕龙你是否曾经遇到过这样的情况:在大促活动期间,用户访问量骤增,数据库的压力陡然加大,导致响应变慢甚至服务中断?更让人头疼的是,当你试图快速定位问题所在时,却发现难以确定究竟是哪个业务逻辑中的SQL语句成为了性能瓶颈。面对这样的困境,本篇文
胖大海 胖大海
2年前
Linux centos7 删除多余内核
Linux下可能会存在有多个内核的情况,通过某一内核启动会出现无法登录的情况,这时我们就要选择可以正常登录的内核,成功进入系统后,将多余的内核删除。检查系统中的内核 使用yumremove或rpme删除无用内核 然后可以继续搜索验证一下这样多余的内核就删除了,千万一定要注意删错了系统就打不开了,如果大家缺乏机器练手的话可以去3A服务器看看!
视频卡顿受哪些因素影响?
卡顿指通过接收的视频帧的时间间隔来判定,帧间距超过时间600ms为卡,上限为6000ms。卡顿受到以下因素的影响:发送端上行网络差丢包高如果发送端用户的网络较差,会导致视频发送丢包高,发送码率下降,接收端视频体验卡顿。发送端的视频采集帧率不稳定,接收端看到
NetTrace 工具介绍
NetTrace是一个用于网络诊断的工具,旨在帮助用户追踪数据包在网络中的传输路径,并分析网络延迟、丢包率等信息。通过可视化的方式,NetTrace提供了网络连接的详细视图,使用户能够快速定位网络问题并进行故障排除。
天翼云开发者社区
天翼云开发者社区
Lv1
天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
文章
859
粉丝
16
获赞
40