SysAK 应用抖动诊断篇—— eBPF又立功了 | 龙蜥技术

简介:且看 SysAK 是如何打造一款性能开销不大、安全可靠、且灵活的关中断检测工具。

文 / 系统运维 SIG

编者按:还记得曾经风靡一时的狄仁杰探案系列之《他抖任他抖,IO诊断在我手》、《netinfo:揭开网络抖动面纱的神器》、《coredump 瘦身风云》等带大家领略了青囊在网络、IO、内存等领域叱咤风云的魅力。如今,系统运维 SIG 组重磅归来,前面已介绍了 Kernel module 对付 IO 夯,今天继续分享 eBPF 硬扛系统中断,快随我一起来看看 SysAK 是如何打造一款性能开销不大、安全可靠、且灵活的关中断检测工具。

一、背景

日常业务运行时会经常受到各种各样的干扰而产生抖动、影响客户体验。其中的一种干扰源是关中断,当关中断过久时可能会导致业务进程调度不及时、数据收发延迟等,这种干扰已经伴随 Linux 内核存在很长时间了,因而 Linux 内核包括业界也有不少相关的关中断检测手段。这里列举几个比较典型方案:

1、内核最大关中断检查

内核自身在系统中所有的关/开中断路径中添加了 TRACE_IRQ_OFF 的 trace 点,以对系统中所有开/关中断进行监控。

优点:关中断检测精确且全面,同时课观测到关中断的时间、甚至堆栈。

缺点:依赖于 CONFIG_IRQSOFF_TRACER 内核配置,该配置在不少发行版不支持。插桩点太多而且是热路径,对性能影响较大。

2、watchdog/hardlock detecter

内核注册一个 PMU 硬件 event 定期检查自己注册的 watchdog hrtimer 中断是否有及时更新时间戳。

优点:周期性的检测,对性能影响小,适用于系统中关中断或者中断处理有 BUG 的情况。

缺点:监控的粒度太大,无法提供更细粒度级别的系统观察指标。对于一些无 PMU 硬件 event 的虚拟化环境该方案不生效。

3、trace_irq_handler_exit/trace_irq_handler_exit  &&  irq_enter/irq_exit

在所有中断处理函数的入口/出口安插 trace 以及时间记录。

优点:提供所有中断处理时长的原始数据。

缺点:只能够观察到中断处理的时间情况,对于其他关中断路径无法监控,没有 threshold 触发机制,需要人工事后分析。

4、其他开源检查工具

在 Github 上也有不少相关的关中断检查工具,它们以 .ko 模块方式提供,利用 hrtimer 定时器检查到期时间是否超过预期时间。

优点:周期采样系统开销不大,提供了毫秒级的监控粒度。

缺点:以第三方模块方式提供,稳定性无法保障。hrtimer 作为普通中断,需要等到关中断恢复后才能检测到,精确度无法保障。同时,对于中断函数延迟的情况会丢失掉前一个中断的信息。

上面的各个检测机制各有千秋,也有各自的缺陷和不满足的场景。且看 SysAK 是如何打造一款性能开销不大、安全可靠、且灵活的关中断检测工具。

二、技术选择

上面的工具选用的技术、实现手段和检测逻辑不同,导致了在不同场景中有着不同的场景中有着不同的优劣。而对于生产环境而言,监控工具的稳定性和工具的开销是比较重要的考虑因素。因而在内核热路径使用插桩以及使用内核模块的方式都不是太理想的选择:前者可能在某些场景下对性能产生较大影响,后者对于内核模块的编码安全性要求非常高,稍不注意容易引发系统宕机,对于批量部署的生产环境风险太大。

面对上面两个问题有没有方案或者技术手段能够解决呢?当然有。

针对内核模块的安全问题,eBPF 绝对是 Linux 业界当前最好的解决方案,不仅安全而且还提供了大量易用的库来提升编程体验。

而热路径插桩的性能问题,在关中断时间过长这个场景中,使用定时采样、检查的方式即可解决,而采样当首选的还是 perf 事件采样。

三、方案设计

针对前面的背景和应用场景分析初步完成了技术选型,此时关中断检测工具大致原理也基本有了原型:

如果系统支持 perf  硬件采样(HW)事件,首先使用 eBPF 启动一个内核定时器,定时器周期性产生中断并在中断处理函数中定时更新一个标志,然后 perf HW 事件再周期检查该标志是否按时更新,以此来判断时钟中断是否有按时产生或者延时发生的情况。

对于不支持 perf HW 的系统,我们无法利用 perf HW 事件了。退而求其次,我们同样通过 eBPF 需要启动内核定时器,定时器中断函数会检查本次定时器中断到期时间与预期时间是否有差异,以此来判断中断是否有延迟的情况。

四、技术实现

实际上要实现上面的功能,需要解决如下几个问题:

1) eBPF 如何安装定时器?

2) 如何把 perf 事件触发后我们的检查逻辑挂接到 perf 事件回调处理中?

3) 如何根据系统对于 perf 硬件采样事件的支持与否让 eBPF 选择不同的检查机制?

1、eBPF 安装定时器

在前面设计分析中,我们了解到要使用 eBPF 启动内核定时器来做一个中断样本。不过很不巧,eBPF 在 Linux-5.15 以下的内核版本不支持定时器创建。幸好条条道路通罗马,perf SW 事件中的 PERF_COUNT_SW_CPU_CLOCK 的事件其在 Linux 内核的底层就是通过高精度时钟实现的。因此只要巧妙的利用利用了这个原理,然后结合 eBPF 就能实现我们需要的 eBPF 定时器。

2、eBPF prog 处理函数关联到 perf HW/SW 事件 overflow 回调函数

虽然 perf 在用户态提供来 perf_event_open 系统调用和 ioctl 方式来创建 perf HW 和 perf SW 事件采样(如前面 PERF_COUNT_SW_CPU_CLOCK 事件,以及 perf 硬件事件 PERF_COUNT_HW_CPU_CYCLES,通过 man perf_event_open 查看更详细的信息),但是传统的用户态 perf 使用中并不能在这些事件触发后在内核去实施我们想要的 hack 动作,例如执行我们需要进行关中断检测的回调函数,只能够在内核代码或者内核模块中调用 perf_event_create_kernel_counter 函数注册我们需要的回调函数到 perf 事件的 overflow_handler 上达成我们的目的。

然而这个窘境随着 eBPF 的出现带来了变化。Perf event 为 ebpf 提供了专门的 ioctl 通道,以便为 ebpf 在内核中施展它的超能力(别忘了 eBPF 代码本质上还是在内核执行)。而 eBPF 与用户态又有着天然的"亲和力",这样用户态就可以非常方便的通过 ioctl 往 perf 事件挂接自己的回调处理逻辑。在代码层面上就是利用:

ioctl(PERF_EVENT_IOC_SET_BPF)

来将 eBPF prog 处理函数注册到 perf event 的 overflow_handler 回调处理中。

3、针对系统是否支持 perf HW 事件选择不同的检查策略

通过 perf_event_open 系统调用的返回值判断系统是否支持 perf HW 事件。

同时在 eBPF 中定义两组 prog,如果支持 perf HW 则 attach HW 事件检测的 prog,否则 attach SW 事件检测的 prog。

五、运行流程

本章主要对工具的实现做一个详细的分解。下图是工具运行的一个简单原理图:

整个流程如下:

1.首先进行参数解析,包括阈值、运行时间、日志记录文件指定等等参数对解析。

2.进行 eBPF 初始化,这一步主要是加载 eBPF 程序。

3.安装 eBPF 事件。首先创建 perf event,接着将 ebpf prog attach 关联到 perf event,最后创建一个poll event,并监听。于此同时 perf event 开始工作,perf event 触发后将调用 eBPF prog 程序运行。eBPF prog 程序检测到阈值事件后唤醒用户态到 poll 任务。

4.用户态 poll 被唤醒后将结果写到日志文件。

六、工具使用

安装 SysAK 后,使用如下命令:

sysak irqoff [--help] [-t THRESH(ms)] [-f LOGFILE] [duration(s)]

-t:关中断的门限值,单位是 ms。

-f:指定 irqoff 结果记录的文件。

duration:工具的运行时长,如果不指定默认会一直运行。

通过内核模块创建 worker 来构造了一个长时关中断的场景,下面是通过 irqoff 抓取的结果展示。

TIME(irqoff)          CPU       COMM            TID           LAT(us)
2022-05-05_11:45:19    3       kworker/3:0     379531        1000539
<0xffffffffc04e2072> owner_func
<0xffffffff890b1c5b> process_one_work
<0xffffffff890b1eb9> worker_thread
<0xffffffff890b7818> kthread
<0xffffffff89a001ff> ret_from_fork

结果中有若干部分组成:

第一行是 log header。总共 5 列,从左到右依次是 时间戳(模块信息) 、关中断长的 CPU、关中断长的 current 线程 ID、总的关中断延时。

第二行对应 log header 的实际信息。

第三行及后面是抓取到关中断的现场堆栈信息,方便进行下一步对源码进行分析。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

性能提升 57% ,SMC-R 透明加速 TCP 实战解析 | 龙蜥技术

简介&#xff1a;SMC-R 是如何加速 TCP 应用&#xff1f; 编者按&#xff1a;TCP 协议作为当前使用最为广泛的网络协议&#xff0c;场景遍布移动通信、数据中心等。对于数据中心场景&#xff0c;通过弹性 RDMA 实现高性能网络协议 SMC-R&#xff0c;透明替换应用 TCP 协议&…

2022云管云网大会丨阿里云孙成浩:构建万物互联的智能云网络

简介&#xff1a;2022年5月19日&#xff0c;由中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;和中国通信标准化协会联合主办的“2022云管和云网大会”通过线上直播方式成功召开。大会以“新云管 新云网”为主题&#xff0c;工业和信息化部信息技术发展司信…

未来两年,阿里云20%新增算力将使用自研CPU

11月3日&#xff0c;阿里巴巴在2022云栖大会上宣布&#xff0c;自研CPU倚天710已大规模应用&#xff0c;阿里云未来两年20%的新增算力将使用自研CPU&#xff0c;这是阿里算力攻坚的重要突破。目前&#xff0c;倚天710已在阿里云数据中心大规模部署&#xff0c;并以云的形式服务…

PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能

简介&#xff1a;2022 年 5 月25日&#xff0c;阿里云开源 PolarDB-X 升级发布新版本&#xff01;PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统&#xff0c; 2015 年开始对外提供商业化服务&#xff0c;并于 2021 年10月正式开源。本次发布是开源后首个重大版本升级&am…

做ToB软件质量保障的这两年

简介&#xff1a;自己算是阿里的老兵了&#xff0c;从实习开始一直投身在 toB 业务的质量保障领域内&#xff0c;不能说是资深的专家&#xff0c;但所经历的、感受的业务特点和体会还是具有一定的代表性&#xff0c;希望能通过这篇文章&#xff0c;总结一下过往&#xff0c;并能…

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

简介&#xff1a;人们关注 wolai 独特的功能和舒适的用户的用户体验&#xff0c;更关注实现这些背后的技术架构。在一个晴朗下午&#xff0c;我们邀请了 wolai.com 的创始人马锐拉&#xff0c;跟我们聊聊 wolai 背后的 Serverless 架构。 作者&#xff1a;马锐拉 | wolai.com …

前端质量|基于业务驱动的前端性能有效实践案例

简介&#xff1a;前端的本质价值是什么&#xff1f;作者认为是给用户创造良好的交互体验和抵达率优化应该在转化率之前。那么本文就将和大家分享基于业务驱动的前端性能有效实践案例。 作者 | 钱文玲(悠酱) 来源 | 阿里开发者公众号 一、背景 1.1.前端性能优化的业务意义 前…

走进RDS|说说关系型数据库与Serverless

简介&#xff1a;看到如今Serverless在云计算行业喷薄欲出的态势&#xff0c;像极了《星星之火&#xff0c;可以燎原》中的描述&#xff1a;虽然不能预测未来的发展和变化&#xff0c;但对于云计算来说这是个相对确定的方向。本文将和大家说说关系型数据库与Serverless。 作者 …

六年团队Leader实战秘诀|程序员最重要的八种软技能

简介&#xff1a;笔者在带团队的六年中发现&#xff0c;程序员们在职场都有一个共同的困扰&#xff1a;“好像写代码都没什么问题了&#xff0c;日常工作基本上都是应付业务需求的开发&#xff0c;好像找不到其他的更大的附加价值了&#xff0c;我应该找一些什么样的发力点才能…

宜搭小技巧|学会这一招,数据收集收放自如

简介&#xff1a;应用的「启用」「停用」功能还可以这样用 >> 团建的日子眼看就要到了&#xff0c;为了掌握参加的人数&#xff0c;提前进行车票、房间、餐食的预定&#xff0c;宜小搭计划在周五下班前停止对报名信息的收集。 如何停止我们的应用进行数据收集呢&#x…

阿里云总裁张建锋:“未来不懂低代码就像二十年前不会用word”

11月3日&#xff0c;阿里云智能总裁张建锋在2022云栖大会公布&#xff0c;钉钉上的低代码应用数突破500万&#xff0c;低代码开发者超过380万。张建锋表示&#xff0c;未来80%的应用会由业务人员通过低代码开发。 张建锋提到&#xff0c;一线业务人员通过低代码的方式&#xf…

平行云CEO 李岩:CloudXR ,开启通往元宇宙的通道

简介&#xff1a;一端是算力无穷的云&#xff0c;这也是 CloudXR 的精髓所在。 图&#xff1a;2022阿里云视觉计算私享会现场 5月11日&#xff0c;在“2022阿里云视觉计算私享会”上&#xff0c;平行云CEO李岩为大家带来了题为《CloudXR&#xff0c;开启通往元宇宙的通道》的主…

阿里10年沉淀|那些技术实战中的架构设计方法

简介&#xff1a;上周我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注&#xff0c;好多读者的评论“以写代想、以想促真、以讲验真”&#xff0c;大家的感受很深刻&#xff0c;基于上次的文章&#xff0c;这篇文章我其实更想跟大家聊聊一些常用的思考方法&#xf…

阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践

简介&#xff1a;MaxCompute作为企业级SaaS模式云数据仓库&#xff0c;正在为客户业务及其数据提供持续的安全保护。 MaxCompute 近期对产品的安全能力进行了全面升级 &#xff0c;结合数据生命周期&#xff0c;针对数据误用、数据滥用、数据泄露、数据丢失等典型数据风险场景&…

阿里平头哥发布RISC-V高能效处理器玄铁C908,打造端云一体生态

11月3日&#xff0c;在2022云栖大会上&#xff0c;阿里平头哥发布全新RISC-V高能效处理器玄铁C908。玄铁C908计算能效全球领先&#xff0c;较业界同性能处理器能效提升超20%&#xff0c;更能满足低碳时代的算力需求&#xff0c;可广泛用于智能交互、多媒体终端、AR/VR、无线通讯…

MaxCompute 公共云多租户设计的技术要点详解及产品实现特色

简介&#xff1a;公共云大数据平台在多租户的设计和实现方式上有所差异。本文主要介绍在公共云大数据平台的多租实现方案中需要考虑的问题和挑战&#xff0c;重点介绍了MaxCompute在计算和存储多租实现上的特点。期望通过这些介绍来让大家了解大数据云平台多租方案需要关注的技…

技术解读 | 智能开放搜索CTR预估模型

简介&#xff1a;本文介绍开放搜索CTR预估模型在个性化排序中的应用与实践 如何评价搜索排序效果&#xff1f; 搜索是用户触达信息最简单直接的方式&#xff0c;是APP、网页必备的功能。如何评价并提升搜索效果一直是搜索领域的常见问题。 一方面&#xff0c;可以基于用户体…

阿里云能耗宝助力华聚公司实现产品绿色升级

客户公司&#xff1a;杭州华聚复合材料有限公司 公司类型&#xff1a;制造业 案例简介&#xff1a;能耗宝“碳足迹在线服务”助力华聚公司产品绿色升级&#xff0c;能耗管理助力厂区实现年度节电17万度&#xff0c;约等于减碳排量120多吨。 2020年9月&#xff0c;国家提出了2…

无影云应用核心技术解读

简介&#xff1a;本文整理自阿里云无影高级技术专家付志超&#xff0c;在阿里云EMR StarRocks无影云应用线上发布会的分享。本篇内容主要分为三个部分&#xff1a; 1. 无影云应用产品简介 2. 无影云应用技术架构 3. 总结&展望 了解更多无影云内容&#xff1a;无影云应用重…

计算就是创造力!阿里云与FIRST影展设立“无影创作奖”

11月3日在云栖大会技术主论坛上&#xff0c;阿里巴巴集团首席市场官董本洪与FIRST影展创始人宋文共同发起了“无影创作奖”。云计算从支持大制作渲染&#xff0c;走向了更多类型片的创作领域。 按计划&#xff0c;无影创作奖将在FIRST惊喜影展上揭晓&#xff0c;为类型片创作者…