Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228050
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: LINUX

2015-01-09 15:51:27

这几天在看 systemtap的东西,这个东东语法比较简单,我感觉学习语言最快的方法就是写起来,所以先看几个例子程序,照着抄一下。
alias_suffixes.stp:

点击(此处)折叠或打开

  1. #!/usr/bin/stap
  2. # alias_suffixes.stp
  3. # Uses alias suffixes to track time intervals for a subset of kernel
  4. # functions. Based on func_time_stats.stp.

  5. global start, intervals                #define two global

  6. # We can apply a suffix to multiple probe points designated by one alias:
  7. probe miscellany = syscall.open, syscall.close, syscall.read, syscall.write { }

  8. probe miscellany {
  9.       start[name, tid()] = gettimeofday_us()
  10. }

  11. # The 'return' suffix is passed on to each of the underlying probe points:
    probe miscellany.return {
          t = gettimeofday_us(); old_t = start[name, tid()]
          if (old_t) intervals[name] <<< t - old_t  #  ‘<<<’ 这个符号看后面的代码应该是 追加,
                                                    # 《systemtap begining》中的解释: 操作符<<<用于将t -old_t
                                                                  # 返回的值存放在intervals数组中name相关的值中,即一个键值关联多个相关值。
                                                                  # 感觉象二维数组
          delete start[name, tid()]
    }
    probe begin {
          printf("Collecting data... press Ctrl-C to stop.\n")
    }
    probe end {
          foreach (name in intervals) {
                  printf("intervals for %s -- min:%dus avg:%dus max:%dus count:%d\n",
                         name, @min(intervals[name]), @avg(intervals[name]),
                         @max(intervals[name]), @count(intervals[name]))    #这里分别调用了一组函数计算最大、最小、平均值和数量
                  print(@hist_log(intervals[name]))
          }
    }
上面是systemtap的第一个例子,应该比较有代表性
.stap -v alias_suffixes.stp
执行效果如下

点击(此处)折叠或打开

  1. Pass 1: parsed user script and 105 library script(s) using 213988virt/31640res/3024shr/29100data kb, in 100usr/40sys/278real ms.
  2. Pass 2: analyzed script: 12 probe(s), 3 function(s), 27 embed(s), 2 global(s) using 393356virt/66564res/4304shr/62640data kb, in 550usr/980sys/1964real ms.
  3. Pass 3: using cached /root/.systemtap/cache/f1/stap_f19b5b1aa2bdf527c26182f05e56d4b0_19485.c
  4. Pass 4: using cached /root/.systemtap/cache/f1/stap_f19b5b1aa2bdf527c26182f05e56d4b0_19485.ko
  5. Pass 5: starting run.
  6. Collecting data... press Ctrl-C to stop.
  7. ^Cintervals for write -- min:1us avg:14us max:13546us count:46401
  8. value |-------------------------------------------------- count
  9.     0 | 0
  10.     1 | 185
  11.     2 |@@@@@ 2492
  12.     4 |@@@@@@@@@@@@@@@@@@ 8110
  13.     8 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 21974
  14.    16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 12388
  15.    32 |@@ 1239
  16.    64 | 10
  17.   128 | 1
  18.   256 | 1
  19.   512 | 0
  20.  1024 | 0
  21.  2048 | 0
  22.  4096 | 0
  23.  8192 | 1
  24. 16384 | 0
  25. 32768 | 0

  26. intervals for read -- min:1us avg:140us max:1960us count:44239
  27. value |-------------------------------------------------- count
  28.     0 | 0
  29.     1 | 58
  30.     2 |@@@@ 2517
  31.     4 |@@@@@@@@@@@@@ 7463
  32.     8 |@@@ 1972
  33.    16 | 548
  34.    32 | 18
  35.    64 | 9
  36.   128 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 27711
  37.   256 |@@@@@@ 3865
  38.   512 | 75
  39.  1024 | 3
  40.  2048 | 0
  41.  4096 | 0

  42. intervals for close -- min:2us avg:3us max:14us count:29
  43. value |-------------------------------------------------- count
  44.     0 | 0
  45.     1 | 0
  46.     2 |@@@@@@@@@@@@@@@@@@@ 19
  47.     4 |@@@@@@@@@ 9
  48.     8 |@ 1
  49.    16 | 0
  50.    32 | 0

  51. intervals for open -- min:18us avg:142us max:419us count:7
  52. value |-------------------------------------------------- count
  53.     4 | 0
  54.     8 | 0
  55.    16 |@ 1
  56.    32 |@@@ 3
  57.    64 |@ 1
  58.   128 | 0
  59.   256 |@@ 2
  60.   512 | 0
  61.  1024 | 0

  62. Pass 5: run completed in 0usr/250sys/12869real ms.
@hist_log函数 类似以进度条形式打印数据,
以open为例,总共执行了7回,有一回花费了1us,一回花费了64us,有3回花费了32us,2回256us

阅读(1188) | 评论(0) | 转发(0) |
0

上一篇:google镜像网站

下一篇:网络思维导图

给主人留下些什么吧!~~