WEB开发网
开发学院操作系统Linux/Unix Probevue - AIX 6 新的程序员工具 阅读

Probevue - AIX 6 新的程序员工具

 2008-09-06 08:21:57 来源:WEB开发网   
核心提示: 以下是用于运行此脚本的命令及其输出:# ps -ef | grep ncpuroot 299106 30725027 14:02:00pts/0 15:16 ./ncpu -p1 -z 90root 315596 307250 0 16:48:47pts/00:00 grep ncpu#.

以下是用于运行此脚本的命令及其输出:# ps -ef | grep ncpu
  root 299106 307250 27 14:02:00 pts/0 15:16 ./ncpu -p1 -z 90
  root 315596 307250  0 16:48:47 pts/0 0:00 grep ncpu
# ./engine  299106
PID=299106 TID=630919 PPID=307250 PGID=299106 UID=0 GID=0 InKernel=0
ProgName=ncpu errno=0
---
0x100001dc
0x10000964
0x100010e8
0xd02fd66c
0x20000c80
0x10001160
+++
.__start+0x8c
.main+0x60c
.work+0x1b4
.random+0x2c

第四个示例检查用户程序函数的参数

接下来让我们研究一下名为 engine() 的函数。该函数接受两个参数,第一个是随机生成的 1 到 1,000,000 之间的数字——但我们不确定具体是不是在此范围内。我们将随机数放入四个“桶”中。我们要确定各个桶中的随机数的数量是否大体相等——不是完全相等,但至少相近:#!/usr/bin/probevue
double engine(int p1, int p2);
int b1, b2, b3, b4;
@@uft:$1:*:engine:entry
{
    tmp = __arg1;
    if( tmp < 250000 ) b1++;
    if( 250000 <= tmp && tmp < 500000 ) b2++;
    if( 500000 <= tmp && tmp < 750000 ) b3++;
    if( tmp >750000 ) b4++;
}
@@END
{
printf("nFour bucket results are: %d %d %d %dn",b1,b2,b3,b4);
}

以下是上述脚本的对应命令和输出:ps -ef | grep ncpu
  root 299106 307250 27 14:02:00 pts/0 15:16 ./ncpu -p1 -z 90
  root 315596 307250  0 16:48:47 pts/0 0:00 grep ncpu
# # ./random 299106
[[[Wait 30 seconds here]]]
^C
Four bucket results are: 101524 101262 101454 120657

噢,最后一个桶里中的数量更多一些,但这不是 probevue 的问题!这是我代码中的一个错误。我后来通过一个更为详细的 probevue 脚本发现,有些值大于 1,000,000!Probevue 将实际值添加到“生产”工作负载,而没有中断应用程序,也不对程序进行重新编码/重新编译/重新启动。我想不出其他能够做到这一点的方法。

关于 probevue 的这个早期测试版的最后一点看法

我并没有讨论更为高级的功能,如:

试验性捕获——缓存结果,并稍后在找到要研究的点后提交/丢弃数字

从用户程序读取数据

线程处理

用于更改缺省行为的 probevctrl 命令

对于 AIX 6.1,这是初始版本,我还得知可能会提供扩展用户指南——将是当前手册页的改进。

第一个 AIX6 版本有以下方面值得我们注意:

内核变量仅限于内存中驻留的变量

用户 C 代码函数入口需要符号表

没有 C 预处理器支持

WPAR 限制——使用 probevue 时,您的 WPAR 不具有移动性(不能重新加载)。停止 probevue 后,WPAR 就可再次移动了。另外, syscall tuple 必须具有 PID,可从 WPAR 查看 PID(不允许使用“*”)

不支持线程局部字符串

计划在 2008 版中推出更多功能。

上一页  1 2 3 4 5 

Tags:Probevue AIX 程序员

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接