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

18 案例篇 | 业务是否需要使用透明大页:水可载舟,亦可覆舟?

us, sy, ni, id, wa, hi, si, st的具体含义
在测试环境中评估THP对性能的影响
在生产环境中关闭THP
通过内核源码分析发现THP触发了direct compaction
编写脚本实时监控sys利用率并抓取现场
通过sysrq工具追踪系统瞬时状态
使用top命令查看细化的利用率指标
THP的使用建议
sysrq的使用
细化CPU利用率监控
THP的性能优化实例
评估业务的数据局部性
THP的优势与目的
关闭THP解决稳定性问题
THP导致sys利用率飙高
抓取sys利用率飙高现场
需要细化CPU利用率监控
设计程序的代码段使用hugetlbfs的方案
compaction时可迁移的页与不可迁移的页
观察系统中分配了多少THP
要点回顾
THP的优势与适用场景
THP引发的稳定性问题
CPU利用率异常飙高
课后作业
课堂总结
THP的适用性评估
透明大页分析
CPU利用率飙高问题分析
业务是否需要使用透明大页:水可载舟,亦可覆舟?

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

你好,我是邵亚方。
我们这节课的案例来自于我在多年以前帮助业务团队分析的一个稳定性问题。当时,业务团队反映说他们有一些服务器的 CPU 利用率会异常飙高,然后很快就能恢复,并且持续的时间不长,大概几秒到几分钟,从监控图上可以看到它像一些毛刺。
因为这类问题是普遍存在的,所以我就把该问题的定位分析过程分享给你,希望你以后遇到 CPU 利用率飙高的问题时,知道该如何一步步地分析。
CPU 利用率是一个很笼统的概念,在遇到 CPU 利用率飙高的问题时,我们需要看看 CPU 到底在忙哪类事情,比如说 CPU 是在忙着处理中断、等待 I/O、执行内核函数?还是在执行用户函数?这个时候就需要我们细化 CPU 利用率的监控,因为监控这些细化的指标对我们分析问题很有帮助。

细化 CPU 利用率监控

这里我们以常用的 top 命令为例,来看看 CPU 更加细化的利用率指标(不同版本的 top 命令显示可能会略有不同):
%Cpu(s): 12.5 us, 0.0 sy, 0.0 ni, 87.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
top 命令显示了 us、sy、ni、id、wa、hi、si 和 st 这几个指标,这几个指标之和为 100。那你可能会有疑问,细化 CPU 利用率指标的监控会不会带来明显的额外开销?答案是不会的,因为 CPU 利用率监控通常是去解析 /proc/stat 文件,而这些文件中就包含了这些细化的指标。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了CPU利用率飙高的常见稳定性问题,并提供了细化CPU利用率监控的方法。通过使用top命令查看更加细化的利用率指标,如us、sy、ni、id、wa、hi、si和st,读者可以定位问题。针对sys利用率飙高的问题,作者建议采集内核函数的方法来抓取现场,比如使用perf工具查看CPU的热点和调用栈信息,以及使用sysrq工具保存当前任务快照。此外,文章还提供了一个简单的脚本示例,用于检测sys利用率高于15%同时usr较低的情况,并在出现问题时运行sysrq来保存当前任务快照。这些方法可以帮助读者快速了解如何分析CPU利用率飙高的问题,为解决类似稳定性问题提供了实用的技术指导。此外,文章还讨论了透明大页对业务性能和稳定性的影响,以及对THP的使用给出了建议。整体而言,本文提供了丰富的技术内容,适合需要解决CPU利用率飙高和透明大页相关问题的读者阅读学习。

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

全部留言(7)

  • 最新
  • 精选
  • 邵亚方
    置顶
    课后作业答案: - 请问如何来观察系统中分配了多少 THP? 评论区里有同学回答的很好。 “如何来观察系统中分配了多少 THP? ``` grep -i HugePages /proc/meminfo AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB ```” - 请问在进行 compaction 时,哪些页可以被迁移?哪些不可以被迁移? unmovable pages是不可以被迁移的,比如slab等kmem都不可以被迁移,因为内核里面对这些内存很多情况下是通过指针来访问的,而不是通过页表,如果迁移的话,就会导致原来的指针访问出错。 - 假设现在让你来设计让程序的代码段也可以使用 hugetlbfs,那你觉得应该要做什么? 需要修改加载ELF文件的地方,然后将ELF文件给映射到hugetlbfs。
    2020-10-11
    1
    11
  • 我能走多远
    想开源软件DPDK 完全是依赖大页来提高tlb cacheline的命中率,就是将业务的热点数据聚合在一起,然后将这些热点数据(rte_mbuf 收包缓存)分配到大页上。

    作者回复: 嗯 是的 热点数据聚合是很重要的

    2020-10-19
    10
  • KennyQ
    碰到过一个由于开了THP导致REDIS内存使用率飙升的问题,一开始一直没有查到原因,最后灵感一瞬间想到了redis中优化的有一条,THP。于是把这个给关了解决的。

    作者回复: 嗯 thp比较容易引起稳定性问题。

    2020-10-01
    9
  • 那时刻
    请问老师top命令里wa指标说的是cpu阻塞在IO的时间,这个应该包含网络IO吧? 另外,si指标包含网络收发包,写文件落盘。请问在调用写文件函数的时候,在磁盘IO阻塞的时候,wa指标会升高,如果伴随着文件落盘,si指标是否也会随即升高呢? 不知我的理解是否有误,烦请老师指正。

    作者回复: wa会包含网络I/O. 在文件落盘时,会有BLOCK_SOFTIRQ软中断产生,所以si指标可能会升高。

    2020-09-29
    6
  • 我来也
    课后思考题: 如何来观察系统中分配了多少 THP? ``` grep -i HugePages /proc/meminfo AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB ```

    作者回复: 对的!

    2020-09-29
    5
    4
  • xingzhi0606
    idle 和 wait 的主要区别是,idle 是 CPU 无事可做,而 wait 则是 CPU 想做事却做不了。 这个wait表示cpu做不了其他事?既然wait也是cpu空闲的,那cpu为啥做不了其他事?

    作者回复: wait表示该cpu上至少有一个线程在等待IO,同时又没有其他线程运行。只有其他线程IO完成后,等待IO的线程才会被唤醒继续去执行。也就是说这些处于wait的线程需要等待io完成,cpu才能去执行这些线程,这是我想要表达的意思。

    2020-10-27
    2
  • 我是一只小小鸟
    老师好,请问,top里面的st比较高,10%以上,是否说明kvm虚拟机需要调参优化
    2020-09-30
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部