Linux 内核技术实战课
邵亚方
前蘑菇街技术专家,Linux Kernel 活跃贡献者
23704 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
Linux 内核技术实战课
15
15
1.0x
00:00/00:00
登录|注册

19 案例篇 | 网络吞吐高的业务是否需要开启网卡特性呢?

CPU利用率变化
RPS的作用和原理
ksoftirqd的作用和问题
使用eBPF功能进行观测
软中断执行频率和执行耗时的观测方式
使用ftrace的irqsoff功能
关中断时间过长引起的抖动案例
硬中断和软中断的查看方式
性能指标包括CPU、内存、I/O、网络指标
对比行为前后的性能数据
案例:开启RPS导致QPS明显下降
追踪网络数据包在内核缓冲区停留时间的方法
软中断和硬中断关闭时间过长的影响
RPS的本质和评估条件
硬中断、软中断、ksoftirqd的关系和影响
RPS的影响
软中断对业务的影响
分析中断类型和频率
中断与业务进程之间的相互干扰
usr利用率越高,说明CPU的效率越高
目标是让CPU的开销尽量用在执行用户代码上
课后作业
课堂总结
CPU在softirq上花费过多时间引起的业务性能下降问题
CPU利用率的细化
网络吞吐高的业务是否需要开启网卡特性呢?

该思维导图由 AI 生成,仅供参考

你好,我是邵亚方。
通过上一讲我们对 CPU 利用率的细化,相信你已经知道,对于应用而言,它的目标是让 CPU 的开销尽量用在执行用户代码上,而非其他方面。usr 利用率越高,说明 CPU 的效率越高。如果 usr 低,就说明 CPU 执行应用的效率不高。在第 18 讲里,我们还讲了 CPU 时间浪费在 sys 里的案例。那今天这一讲,我们一起来看看 CPU 在 softirq 上花费过多时间所引起的业务性能下降问题,这也是我们在生产环境中经常遇到的一类问题。接下来我会为你讲解相关案例,以及这类问题常用的观察方法。

中断与业务进程之间是如何相互干扰的?

这是我多年以前遇到的一个案例,当时业务反馈说为了提升 QPS(Query per Second),他们开启了 RPS(Receivce Packet Steering)来模拟网卡多队列,没想到开启 RPS 反而导致了 QPS 明显下降,不知道是什么原因。
其实,这类特定行为改变引起的性能下降问题相对好分析一些。最简单的方式就是去对比这个行为前后的性能数据。即使你不清楚 RPS 是什么,也不知道它背后的机制,你也可以采集需要的性能指标进行对比分析,然后判断问题可能出在哪里。这些性能指标包括 CPU 指标,内存指标,I/O 指标,网络指标等,我们可以使用 dstat 来观察它们的变化。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章通过分析CPU在softirq上花费过多时间所引起的业务性能下降问题,探讨了中断与业务进程之间的相互干扰。作者以开启RPS导致QPS下降的案例为例,说明了性能下降问题的分析方法。通过对比开启RPS前后的性能指标,发现CPU利用率升高、软中断利用率明显增加、网络吞吐数据下降,推断网络吞吐下降是中断增加导致的结果。进一步分析了硬中断和软中断的区别,以及如何观测软中断的执行频率和执行耗时。此外,还介绍了避免软中断过频繁导致进程被饿死的机制和观测ksoftirqd延迟的方法。文章深入浅出地解释了中断与业务性能的关系,为读者提供了一种分析和解决性能问题的思路。 总结:本文深入探讨了CPU在softirq上花费过多时间对业务性能的影响,以及开启RPS对网络吞吐性能的影响。通过分析开启RPS前后的性能指标,发现了软中断利用率增加导致网络吞吐下降的问题,并介绍了观测软中断执行频率和执行耗时的方法。文章还提到了避免软中断过频繁导致进程被饿死的机制和观测ksoftirqd延迟的方法。这篇文章对中断与业务性能的关系进行了深入剖析,为读者提供了解决性能问题的思路。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 内核技术实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 邵亚方
    置顶
    课后作业答案: - 请问如果软中断以及硬中断被关闭的时间太长,会发生什么事? 会产生softlockup和hardlockup,这可能会产生很严重的问题。 - 如果想要追踪网络数据包在内核缓冲区停留了多长时间才被应用读走,你觉得应该如何来追踪? 可以在tcp_rcv_establised和tcp_rcv_space_adjust这两个函数来打点,这两个函数的时间差就是数据包在内核缓冲区停留的时间。
    2020-10-11
    19
  • cuikt
    无意中发现了老师的博客。 http://laoar.github.io/

    作者回复: 很多年不写blog了:)

    2020-10-27
    3
  • 莫名
    触发 ksoftirqd 线程的条件目前更加精细了: if (pending) { if (time_before(jiffies, end) && !need_resched() && --max_restart) goto restart; wakeup_softirqd(); }

    作者回复: 👍

    2021-07-18
  • stackWarn
    问题1:时间过长,会影响其他包的处理,整体延时增大 问题2.可以通过stap进行跟踪,但是没想好具体的实现 个人收获: 1.rps是把网卡工作upload到cpu,整体会增加cpu的使用 2.了解了ksoftirqd的原理。 个人问题: 1.是否可以把ksoftirqd的nice调小一点来优化系统性能 2.除了cat slabinfo相关的命令,其他的关中断的命令能否做个总结,工作中会做监控,可能会踩坑,比如ss,top等命令是否也有这个逻辑呢? 祝老师中秋国庆快乐!
    2020-10-01
    2
    3
  • xiyu
    歪个楼 https://www.scylladb.com/2020/05/05/how-io_uring-and-ebpf-will-revolutionize-programming-in-linux/
    2020-11-29
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部