宋宝华:LEP ( Linux 易用剖析器) 是什么,为什么以及怎么办 ( 2 )

LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目,LEP项目组欢迎开源爱好者加入和参与。这是LEP文档《 LEP是什么,为什么,怎么办 》的第二部分。第一部分的链接为:

宋宝华:LEP( Linux 易用剖析器) 是什么,为什么以及怎么办(1)

LEP的下一步工作

6.1 架构改造

6.1.1 LEPV前后台分离

目前的体系架构是由浏览器触发LEPV与LEPD通信然后开始采集数据的,下一步我们要改造为,通过web的后台设置监控目标,我们通过web后台设置一个或者数个被监控的电路板/Linux服务器IP地址,即开始采集,而后浏览器只负责观看监控数据,如下图。

LEPV web服务器端,读取采集到的数据并分析与保存到数据库。而浏览器端,基于已经存在的数据,进行各种分析。

6.1.2 数据保存和恢复支持

在架构中的另外一个考虑是,增加数据库的支持,将采集到的数据,进行保存和恢复。以方便进行时空比对。

我们可以把某一时段的数据采样出来,通过浏览器打开了分析。这样,可以回顾场景或者对比各次场景。

6.1.3 自定义被监控的数据

目前,一旦LEP开启,进入浏览器就可以获得所有的数据。未来,我们应该提供勾选关注事件的能力,以便于LEP只监控它感兴趣的数据。比如,用户选择了只关注内存,那么别的界面就不要显示了。

6.2 功能增强

6.2.1 高平均负载预警

以不同的颜色,标识系统里面平均负载的高低。比如某段长期时间段里面CPU load average明显过高,我们标识一段红线区域。类似不同颜色的台风或暴雨预警。

点击预警的时间点时,可同步刷新当时的CPU利用率,IDLE,IRQ,SOFTIRQ等曲线。

6.2.2 负载不均衡预警

一旦检测到多核下,负载不均衡,以算法分析后,进行提示。负载的不均衡主要体现为2个方面:

  1. 进程+中断+软中断
  2. 中断+软中断

在出现中断与软中断负载不均衡的时候,提示进行中断affinity的设置,以及提示采用RPS(Receive Packet Steering)调控SoftIRQ。

6.2.3 内存大户提示与内存泄漏预警

分析高峰期的内存场景,比如在某个场景下,哪些进程在耗内存。对于内存大户,可以给出某个进程的内存使用历史曲线。

我们如果监控到某个进程的内存持续震荡向上,应提示内存泄漏预警。

可点选某一进程,显示它的pmap,类似:

b7453000     44K r-x-- libnss_files-2.19.so
b745e000      4K r---- libnss_files-2.19.so
b745f000      4K rw--- libnss_files-2.19.so
b7460000     40K r-x-- libnss_nis-2.19.so
b746a000      4K r---- libnss_nis-2.19.so
b746b000      4K rw--- libnss_nis-2.19.so
b746c000     84K r-x-- libnsl-2.19.so
b7481000      4K r---- libnsl-2.19.so
b7482000      4K rw--- libnsl-2.19.so

此处我们能否画一个柱状体:

同时,我们要增加剖析slab和vmalloc的能力,并提醒用户slab和vmalloc的泄漏。我们也可以显示slabtop的内容:

6.2.4 基于CGroup和用户自定义分群的分析

可视图显示Linux的不同的CGroups,显示每个group的CPU占用,内存占用。也可以对某个group的资源进行调配。

此外,也支持用户通过浏览器拖曳手段,依据应用场景建立自己的分群,把关注的进程,拖到自定义的分群中。最后显示这些自定义分群的CPU、内存和I/O占用情况。

6.2.5 I/O排队预警和调度策略控制

能够给出I/O排队情况的不同颜色的预警,提示硬盘的I/O访问的剧烈程度与排队等候情况。

增加各个磁盘I/O调度策略的显示和设置。读取此类节点

/sys/block/sda/queue$cat scheduler

通过选择框设置noop deadline cfq

在CFQ的情况下,点击一个进程,可选择设置它的prio和调度策略。

6.2.6 Perf集成

Perf的功能有很多,目前我们需要集成一些紧迫的功能。

可以平滑的绘制系统的CPU,I/O分布图

类似执行perf sched record sleep 10

perf timechart

在进程列表上面,加一个run窗口,这样可以自己手动启动一个进程;后面有一个单选框,决定是否进行cpu cycle和cache miss的perf跟踪。

此部分类似perf top里面进一步annotate一个函数的功能:

6.2.7 杂项:查缺补漏和交互控制

可以给出系统里面谁在耗电,历史上CPU、外设处在各种状态的时间比例。

每秒中断、每秒软中断、每秒上下文切换、swapin、swapout等残缺数据的采集和显示。频繁swap的场景提示匿名页交换过于频繁的不同颜色的预警。

Linux运行起来后,有很多的sysctl是通过/proc/来控制,很多sysctl的含义,用户根本不懂。我们可以在浏览器上,直接展开目标的sysctl,然后把一些关键的设置的含义,告诉用户。让用户知道自己的目标是什么情况。

比如:

overcommit_memory = 1, 暗示你的Linux总是假装系统有足够多的内存 [点击阅读文档…]
…

在进程的CPU利用率图上,我们可以点击右键,展开它的线程,甚或进一步控制线程的调度策略、优先级或者NICE值。

凡此种种,可以想到很多,不再一一列举。在LEP的开发过程中,小点逐步完善。

6.3 CI和测试

在git提交后,催生自动编译和测试。测试环节要求可以覆盖到ARM32位、ARM64位、X86 32位和X86 64位的目标机。覆盖到的内核版本包括

  • Linux 2.6.38
  • Linux 3.18
  • Linux 4.13

编写测试案例,以覆盖到LEPD的每个JSONRPC,并自动覆盖到LEPV的RESTful API,保证高强度下,LEPD和LEPV的稳定。

6.4 文档

每个模块在设计和开发过程中,书写详细的文档;

文档在Linuxer、Linux内核之旅、CSDN投放;

书写文档,投放到lwn.net;

上传教学使用视频到youku、Youtube(英文版);

更新和完善www.linuxep.com网站

LEP人员与分工

7.1总体参与人员

研发与测试由陈莉君教授组和LEP co-founder组共同负责,张国强负责总后勤与联络。

7.2 LEPV架构改为前后台以及监控数据可配置

7.3 数据存储与读取、比对

7.4 基于CGroup和用户自定义分群的分析

7.5 LEP持续集成

一旦有人提交代码,即激活自动编译和测试。

7.6 LEP自动测试与案例

增加必要的测试case,保证LEP在各平台,各内核版本的持续稳定。

7.7 残缺功能添加和预警分析功能

中断、软中断、上下文切换、swapin、swapout、slab、vmalloc、Power等残缺的数据采集,负载预警,负载不均衡,内存泄漏预警,I/O过载预警等。

7.8 perf集成

目前LEPD端依赖于perf工具的安装,我们希望能将perf的核心功能从perf工具移植出来,直接集成到LEPD,这样避免对平台的依赖。

来自微信公众号 Linuxer (ID:linuxdev)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

分层安全用于通用客户端设备(uCPE)部署的准则

1535
来自专栏chafezhou

小说python操作PLC

PLC(Programmable Logic Controller)可编程逻辑控制器,可以理解为一个微型计算机,广泛应用于工业控制中,如楼宇智控、精密机床、汽车...

2K2
来自专栏游戏杂谈

移动APP的IM后台架构浅析

IM(InstantMessaging 即时通讯)作为一项基础功能,很多APP都有,比如:手机QQ、微信、易信、钉钉、飞信、旺旺、咚咚、陌陌等。而IM如同我们日...

4482
来自专栏达摩兵的技术空间

bug常识入门

1392
来自专栏SDNLAB

SDN中的Segment Routing

作者简介:晏志文,原就职于中兴通讯,目前供职于安徽皖通邮电股份有限公司。数通测试专家,本领域从业深耕多年,熟悉传统网络技术及行业解决方案,密切关注新兴网络,IC...

2524
来自专栏MoeLove

高效 Bash 使用技巧

我们在日常使用中,难免会使用到一些历史命令或者有时需要对历史命令进行更正,那么如何更加高效的来完成这些操作呢?

952
来自专栏编程一生

架构必会的性能指标及分析策略

1222
来自专栏带你撸出一手好代码

发现了一个vscode的bug

被一个BUG折磨了3个小时。我知道引起这个BUG的原因,是因为项目中某些配置文件中配置的程序包引用路径出错了,要解决这个问题很简单,只需要将这些配置文件中错误的...

661
来自专栏zingpLiu

海量日志实时收集系统架构设计与go语言实现

日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求、运维成本低、稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的。然而这时理...

1322
来自专栏聊聊技术

原 《Linux内核分析》小节

4026

扫码关注云+社区

领取腾讯云代金券