Linux-性能分析,测试与调优工具(2) - STEMHA's Blog

Linux-性能分析,测试与调优工具(2)

常用工具

top、vmstat、iostat和sar

top命令用于显示处理器的活动状况。在缺省情况下,显示占用CPU最多的任务,并且每隔5s做一次刷新;
vmstat命令用于报告关于内核线程、虚拟内存、磁盘、陷阱和CPU活动的统计信息;
iostat命令用于分析各个磁盘的传输闲忙状况;
sar用于收集、报告或者保存系统活动信息,其中,sar用于显示数据,sar1和sar2用于收集和保存数据。

sysctl

sysctl是一个接口,可用于改变正在运行中的Linux系统。用sysctl可以读取几百个以上的系统变量,例如用sysctl –a可读取所有变量。

sysctl的实现原理是:

  • 所有的内核参数在/proc/sys中形成一个树状结构
  • sysctl系统调用的内核函数是:sys_sysctl,匹配项目后,最后的读写在do_sysctl_strategy中完成

比如:

1
echo "1" > /proc/sys/net/ipv4/ip_forward

就等价于:

1
sysctl –w net.ipv4.ip_forward ="1"

高级分析手段

OProfile

OProfile作用

  • 可以帮助用户识别诸如模块的占用时间、循环的展开、高速缓存的使用率低、低效的类型转换和冗余操作、错误预测转移等问题。
  • 它收集有关处理器事件的信息,其中包括TLB的故障、停机、存储器访问以及缓存命中和未命中的指令的攫取数量。

OProfile支持两种采样方式:

  • 基于事件的采样(Event Based):
    • NMI模式
    • OProfile只记录特定事件(比如L2缓存未命中)的发生次数,当达到用户设定的定值时Oprofile就记录一下(采一个样)。
    • 这种方式需要CPU内部有性能计数器(Performace Counter)
  • 基于时间的采样(Time Based):
    • Timer Interrupt模式
    • OProfile借助OS时钟中断的机制,在每个时钟中断,OProfile都会记录一次(采一次样)。
    • 引入它的目的在于,提供对没有性能计数器的CPU的支持,其精度相对于基于事件的采样要低,因为要借助OS时钟中断的支持,对于禁用中断的代码,OProfile不能对其进行分析。

OProfile在Linux上分两部分:

  • 内核模块(oprofile.ko)
    • 负责访问性能计数器或者注册基于时间采样的函数,并将采样值置于内核的缓冲区内。
  • 用户空间的守护进程(oprofiled)
    • 后者在后台运行,负责从内核空间收集数据,写入文件。

控制oprofile需要用到opcontrol。要打开oprofile,需要用start选项来调用opconrol,当第一次调用opcontrol时,必须告诉它想统计内核还是用户空间数据.
其运行步骤如下。
1)初始化opcontrol –init
2)配置opcontrol –setup –event=…
3)启动opcontrol –start
4)运行待分析的程序xxx
5)取出数据
opcontrol –dump
opcontrol –stop
6)分析结果 opreport -l./xxx

具体的看一下这篇文章吧,《Linux调优工具oprofile的演示分析》

gprof

GNU gprof作用:

  • 可以打印出程序运行中各个函数消耗的时间,以帮助程序员找出众多函数中耗时最多的函数
  • 可产生程序运行时的函数调用关系,包括调用次数,以帮助程序员分析程序的运行流程。

GNU gprof的实现原理:

  • 在编译和链接程序的时候(使用-pg编译和链接选项)
    • gcc在应用程序的每个函数中都加入名为mcount(_mcount或__mcount,依赖于编译器或操作系统)的函数。
  • 也就是说应用程序里的每一个函数都会调用mcount,而mcount会在内存中保存一张函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址。
    • 这张调用图也保存了所有与函数相关的调用时间、调用次数等的所有信息。

GNU gprof的基本用法如下。
1)使用-pg编译和链接应用程序。
2)执行应用程序并使它生成供gprof分析的数据。
3)使用gprof程序分析应用程序生成的数据。

内核跟踪

LTTng

LTTng(Linux Trace Toolkit-next generation, Linux 跟踪工具包下一代)是一个用于跟踪系统详细运行状态和流程的工具

  • 它可以跟踪记录系统中的特定事件。
  • 这些事件包括:
    • 系统调用的进入和退出;
    • 陷阱/中断(Trap/Irq)的进入和退出;
    • 进程调度事件;内核定时器
    • 文件系统相关事件——open/read/write/seek/ioctl等;
    • 内存管理相关事件——内存分配/释放等;
    • 其他IPC/套接字/网络等事件。

而对于这些记录,我们可以通过图形的方式经由lttv-gui查看

参考资料

《Linux设备驱动开发详解:基于最新的Linux4.0内核》

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×