
几个月前,在Oracle宣布DTrace之后,我在OEL上进行了一次宣传。结果是丑陋的;作为DTrace的作者之一,我承认我对这种努力的不足感到震惊。昨天,%的甲骨文放弃了一个更新的beta版本,所以我想看看在最初的错误开始后的4个多月里,他们已经走了多远。问题在哪里?十月份,有574个功能性探针(还有13个失效)。以下是今天针对OEL的DTrace的定量状态:[根@screven驾驶员]#dtrace-l.wc-l618可以。稳步提高。通过不公平的比较,以下是我的Mac OS X笔记本电脑的外观:记住/Users/ahl#dtrace-l.wc-l578044有什么新消息吗?早在10月份,我就尝试启用所有的系统调用探测(即所有的功能探测);结果是ssh开始神秘地失败。这严重违反了核心原则——DTrace对其运营的生产系统造成损害是不可接受的。很高兴看到神谕修复了它。以前,配置文件提供程序探测不起作用。配置文件探测已被删除-您不能执行基于计时器的任意分辨率分析-但简单的滴答探测存在:[根@screven驱动程序]#dtrace-l-n配置文件:::ID::PROVIDER::PROVIDER::MODULE::PROVIDER::PROVIDER::PROVIDER::PROVIDER::PROVIDER::PROVIDER::PROVIDER::PROVIDER612613614615616617…而且似乎有效:[根@screven~]#dtrace-n'tick-1{printf("%Y",walltimestamp);}'dtrace:描述"tick-1"与1个探测器匹配CPU ID功能:名称0°612°C°C°C°C°C°C:tick-1 2012年2月23日04:31:270°612°C°C°C°C°C°C:tick-1 2012年2月23日04:31:280°612°C°C°C°C°C°C:tick-1 2012年2月23日04:31:29他们还添加了一些难以理解的SDT(静态定义跟踪)探测器:[根@screven~]#dtrace-l-n sdt:::PID提供程序模块函数名597.sdt.vmlinux.handle_sysrq-handle_sysrq601-sdt-vmlinux-oom_kill峎进程oom_kill_进程602 sdt vmlinux vmlinux,check-hung-unu-task-check-hung-unu-task603-sdt-vmlinux-sys_init_module init_模块604-sdt-vmlinux-sys_delete_module删除_module611,sdt,vmlinux,vmlinux,信号故障信号更有用的是,beta版包含了一个部分实现的proc提供者;proc提供者跟踪高级流程活动(检查文档)。[根@screven~]#dtrace-l-n过程:::PID提供程序模块函数名598.proc.vmlinux.do\u execve\u common exec成功599.proc.vmlinux.do\u execve\u公共执行失败600.proc.vmlinux.do\u execve\u common exec605°proc°vmlinux°get_signal_to_传送信号句柄606°程序?vmlinux?vmlinux?发送°607,proc,vmlinux,vmlinux,do\u退出608-proc-vmlinux-vmlinux-exit609,proc,vmlinux,do\u fork create610,proc,vmlinux,vmlinux,do\u fork lwp create作为参考,以下是illumos的衍生产品DelphixOS的外观(当然包括DTrace):根@argos:~#dtrace-l-n过程:::PID提供程序模块函数名10589,proc,unix,lwp,rtt_初始lwp启动10629+proc+unix+lwp_rtt_初始启动10631,proc,unix,陷阱错误10761+proc+genunix+清除10762.过程genunix.psig信号手柄10763.genunix.sigtoproc信号丢弃。10764,proc,genunix,sigtoproc信号发送10831,proc,genunix,genunix,lwp,创建lwp10868,proc,genunix,cfork创建10870,proc,genunix,proc,退出10871,proc,genunix,genunix,lwp_出口lwp出口10872,proc,genunix,proc,lwp出口10873,proc,genunix,exec\u common exec成功10874°proc°GENNIX°exec常见exec故障10875,proc,genunix,exec\u common exec每个DTrace探测都有参数,这些参数传递有关导致探测器触发的活动的信息。例如,对于内核函数边界跟踪(fbt)提供程序(尚未在OEL中实现),函数入口探测的参数与传递给函数的参数相对应。对于像proc provider这样的静态提供者,参数包含有用的信息……但是我似乎永远记不住类型和顺序。幸运的是,DTrace允许您添加-v选项以获取有关探测器的更多信息。不幸的是,这并没有连接到Oracle的端口上(我确定这只是一个bug):[根@screven~]#dtrace-lv-n过程::信号发送PID提供程序模块函数名606°程序?vmlinux?vmlinux?发送°测试描述属性&添加主密钥标识符名称:Private语义数据:-私有依赖类:未知属性无法初始化邮件组件。语义学:进化依赖类:ISA参数类型参数[0]:(未知)参数[1]:(未知)参数[2]:(未知)参数[3]:(未知)参数[4]:(未知)参数[5]:(未知)参数[6]:(未知)参数[7]:(未知)参数[8]:(未知)参数[9]:(未知)参数[10]:(未知)参数[11]:(未知)参数[12]:(未知)参数[13]:(未知)参数[14]:(未知)参数[15]:(未知)参数[16]:(未知)参数[17]:(未知)参数[18]:(未知)参数[19]:(未知)参数[20]:(未知)参数[21]:(未知)参数[22]:(未知)参数[23]:(未知)参数[24]:(未知)参数[25]:(未知)参数[26]:(未知)参数[27]:(未知)参数[28]:(未知)参数[29]:(未知)参数[30]:(未知)参数[31]:(未知)以下是DelphixOS的外观:根@argos:~#dtrace-lv-n过程::信号发送PID提供程序模块函数名10764,proc,genunix,sigtoproc信号发送测试描述属性&添加主密钥标识符名称:Private语义数据:-私有未知依赖项:类属性无法初始化邮件组件。语义学:进化依赖类:ISA参数类型参数[0]:lwpsinfo\*args[1]:信息*参数[2]:整数即使没有连接类型系统,你也可以用这个beta做一些有用的工作。例如,我可以使用proc provider查看系统上正在执行的命令:[根@screven~]#dtrace-n过程::exec'{trace(stringof(arg0));}'dtrace:description"proc:::exec"匹配1个探测CPU ID功能:名称0°600°执行通用:exec/usr/bin/statprun0°600°执行通用:exec/usr/sbin/perf0°600°执行通用:exec/bin/uname0°600°执行通用:exec/usr/libexec/perf.2.6.39-101.0.1.el6uek.x86_64在他的博客中,Wim Coekaerts展示了一些proc提供者的使用示例,其中包括以下常见的习惯用法:过程:::创建{此->pid=*((int*)arg0+171);...很难知道171常量是从哪里来的,也很难知道用户是如何理解的。我认为这是因为OEL还没有合适的类型,它是某种结构的硬编码偏移量。以下是在已完成的DTrace实现上的情况:过程:::创建{此->;pid=args[0]->;pr_pid;...进展还有很长的路要走,但看起来甲骨文的人正在取得进展。看到这个更新的beta版附带的源代码会很有趣——在撰写本文时,git存储库还没有更新。就我个人而言,我很想看看用户土地跟踪在pid提供者和USDT的形式下是什么样子。按照苹果和FreeBSD等其他端口的传统,我邀请Oracle团队在即将到来的DTrace会议上介绍他们的工作,并且dtrace.conf[喘息声]