介绍一下SystemTap

很久以前听说的 SystemTap,自从 Mac 和 FreeBSD 先后从 Solaris 那里移植来 DTrace 后,Linux 就在系统性能调优方面,成为一个很受果粉和F粉鄙视的操作系统(老实说,其实我们三方一直在互相鄙视),偶们L粉这方面唯一可以拿来自慰的,就是 SystemTap 了。

听说归听说,但从来没有用过。直到这个星期某同事调查设备IO Wait极高的故障,我就建议他从 SystemTap 入手。既然给别人挖了一个坑,我也顺便试了试该功能:

  1. 从宽泛的层面看,DTrace/SystemTap更像是一个给系统管理员定位瓶颈的工具。程序员若要解决自己程序的问题,可能优先会去考虑profile工具。但有些情况,比如Daemon进程,要去profile这个不间断运行,不断fork的环境,估计力有未逮,DTrace/SystemTap这就能排上用场
  2. 使用SystemTap,本质上是写一段小小的脚本,SystemTap会将它处理为一个C程序,然后编译成一个内核模块(!!!),插入内核,在各个系统调用的进出点执行脚本里定义的计数等任务,并打印出来
  3. 没有用过DTrace,反正看评论是大家都说其比SystemTap好使。想要用好SystemTap,必须对syscall很熟悉才成。估计DTrace对各类系统任务封装的更好,可能不会 C 语言,不懂什么是 syscall 也能使用。
  4. SystemTap 脚本语言居然支持 hashtable 数据结构,这还真是一个挺高级的特性
  5. SystemTap从2.6.11才在标准内核里出现,RedHat从RHEL4(尽管是2.6.9)开始内置了这个特性——注意还得同时安装kernel-debuginfo
  6. 最后,我觉得任何一个在 Linux 下工作的程序员/管理员都应该关注这个东西,在这个互联网时代,找出服务的瓶颈并改进可能将是最重要的技能之一。
Topic: 技术