原文:eLinux.org

翻译:@Lotte-Bai

校订:@lzufalcon

System Tap

本文是关于 System Tap 的信息,嵌入式开发者一定会很感兴趣的,因为追踪器在产品开发过程中对诊断问题是很有用的。

目录

简介

SystemTap 是一个灵活而且可扩展的系统,允许为运行中的 Linux 内核添加跟踪信息的收集和分析。

SystemTap 设计得非常灵活(允许插入任意的 C 代码),而且易用(大多数跟踪语句用一种简单的脚本语言编写,并且附带有数据收集和聚合的例程,这些例程基本上以库的形式呈现)。

SystemTap 的一个关键点是它意图允许大家创建一个跟踪集(一个 tapset),无须修改或者重新编译系统所需,就可以执行于运行中的 Linux 系统。为了达到该目的,它使用内核 Kprobes 接口和可加载的内核模块来动态地添加探针和新生成的代码到运行中的内核中。

开源项目/邮件列表

官方网站:
http://sourceware.org/systemtap/

SystemTap 的邮件列表归档:
http://sourceware.org/ml/systemtap/

一本教程,很好地概述了本系统:
http://sourceware.org/systemtap/tutorial/

杂记

探针类型

有几种类型的探针:

  • kprobe & kretprobe, for dynamically insterted probes(动态插入探针)
  • timers(定时器)
  • static instrumentation markers(静态检测标志)
  • performance counter events(性能计数事件)

在以后,可能是:

  • user-space probes,(用户空间探针)
  • user-space return probes, and(用户空间返回探针)
  • watchpoint probes (kernel & user) (监视点探针(内核空间 & 用户空间))
  • and more(更多)

参阅

请注意 Systemap 是 Linux 内核最主要的跟踪系统之一。

截至 2006 年春,有一项进行中的工作是尝试合作解决一些主要的跟踪项目之间存在的各类问题。参看 跟踪协作项目页面获取更多信息。

ARM 支持

可以从 这里 找到 ARM & OMAP 平台上使能 System Tap 的详细用法。

一些性能测量

Jian Gui 写道(2006 年 7 月在 System Tap 邮件列表):

  1. 嗨,我们在 ppc64 平台上使用一些测试基准来测试过 systemtap/LKET 的开销。
  2. 测试表明 systemtap/LKET 的开销一般情况下是可以接受的。但它在一些特殊行为的测试基准中也会导致很大的开销。例如 dbench. Dbench 在非常频繁地调用 kill() 来检测一个任务是否完成时,这样就会导致很大的开销。
  3. 在测试中,我们把事件钩子归类为五组:
  4. grp1 - syscall.entry, process
  5. grp2 - syscall.return, process
  6. grp3 - iosyscall, ioscheduler, scsi, aio, process
  7. grp4 - tskdispatch, pagefault, netdev, process
  8. grp5 - syscall.entry, syscall.return, process
  9. 所有的结果都是:(score1 - score2)/score2 * 100%,其中:
  10. score1:使用 systemtap 探测时的测试基准分数
  11. score2:未使用探测时的测试基准分数
  12. dbench (<3% is noise)
  13. --------------------
  14. grp1 -14.4%
  15. grp2 -33.1%
  16. grp3 -7.92%
  17. grp4 -13.6%
  18. grp5 -43.3%
  19. specjbb (<3% is noise)
  20. ---------------------
  21. grp 1 -0.87%
  22. grp 2 -0.67%
  23. grp 4 +0.47%
  24. grp 5 +0.05%
  25. tiobench (<3% is noise)
  26. ----------------------
  27. grp1 sequential reads +1.45%
  28. sequential writes -6.98%
  29. random reads +0.57%
  30. random writes -2.11%
  31. grp2 sequential reads +0.11%
  32. sequential writes -5.81%
  33. random reads +0.03%
  34. random writes -2.11%
  35. grp3 sequential reads +1.42%
  36. sequential writes -6.98%
  37. random reads +0.51%
  38. random writes -2.11%
  39. grp4 sequential reads +1.38%
  40. sequential writes -5.81%
  41. random reads +0.60%
  42. random writes -2.11%
  43. grp5 sequential reads +0.22%
  44. sequential writes -8.14%
  45. random reads -0.10%
  46. random writes -1.05%
  47. Rawiobench (<3% is noise)
  48. ------------------------
  49. grp1 sequential aioread() 0%
  50. sequential aiowrite() 0%
  51. random aioread() 0%
  52. random aiowrite() 0%
  53. grp2 sequential aioread() 0%
  54. sequential aiowrite() 0%
  55. random aioread() 0%
  56. random aiowrite() -0.82%
  57. grp3 sequential aioread() 0%
  58. sequential aiowrite() 0%
  59. random aioread() 0%
  60. random aiowrite() 0%
  61. grp4 sequential aioread() 0%
  62. sequential aiowrite() 0%
  63. random aioread() +0.79%
  64. random aiowrite() -0.82%
  65. grp5 sequential aioread() 0%
  66. sequential aiowrite() -6.41%
  67. random aioread() +0.79%
  68. random aiowrite() 0%
  69. 测试环境:
  70. 硬件: Open Power 720/ 8 cpus/ 2 cores/ 6GB RAM (tiobench use 1G)
  71. 软件: RHEL4-U3GA/ 2.6.17.2/ systemtap-20060718/ elfutils-0.122-0.4

链接

分类