DTrace的变量类型

Solaris上使用DTrace进行动态跟踪 Solaris内置的Dynamic Tracing (DTrace) 功能提供一个动态的跟踪环境。 DTrace is a comprehensive dynamic tracing framework for the Solaris Operating System. DTrace provides a powerful infrastructure that permits administ 阅读详情


要想写好DTrace脚本,了解何时选用何种类型变量是非常重要的。在这里,小编推荐DTrace大神Brendan Gregg的文章《DTrace variable types》(http://dtrace.org/blogs/brendan/2011/11/25/dtrace-variable-types/)。文章很短,值得每个人一读。小编总结了一下,就是选用变量类型的优先级是:

aggregation > clause local > thread local > scalar > associative array。

也就是说,能用aggregation存储变量最好,不行就考虑clause local,再不行就考虑thread local......以此类推。另外要注意,scalar和associative array不是multi-CPU safe的。


此外,小编还要补充以下2点:

(1)clause local变量的有效期就在probe的一次触发过程内,如果这个probe有多个clause{},那么clause local变量在这些个clause{}内都可以被访问,而且这些个clause{}是顺序执行的。大家可以参考下面这个例子(http://dtrace.org/guide/chapter3.html):

int me;			/* an integer global variable */
this int foo;		/* an integer clause-local variable */

tick-1sec
{
	/*
	 * Set foo to be 10 if and only if this is the first clause executed.
	 */
	this->foo = (me % 3 == 0) ? 10 : this->foo;
	printf("Clause 1 is number %d; foo is %d\n", me++ % 3, this->foo++);
}

tick-1sec
{
	/*
	 * Set foo to be 20 if and only if this is the first clause executed. 
	 */
	this->foo = (me % 3 == 0) ? 20 : this->foo;
	printf("Clause 2 is number %d; foo is %d\n", me++ % 3, this->foo++);
}

tick-1sec
{
	/*
	 * Set foo to be 30 if and only if this is the first clause executed.
	 */
	this->foo = (me % 3 == 0) ? 30 : this->foo;
	printf("Clause 3 is number %d; foo is %d\n", me++ % 3, this->foo++);
}

此外,如果clause local变量没有被初始化,它的值是随机的,取决于当时clause local变量所在的内存的值。关于这一点可以参考一篇帖子:http://thr3ads.net/dtrace-discuss/2007/05/381363-Clause-local-Variables-and-two-different-probes-is-this-variable-shared。

(2)在多个CPU同时访问associative array同一个key/value元组时,associative array不是multi-CPU safe的,但是如果可以保证不会出现多个CPU同时访问associative array同一个key/value元组时,associative array是multi-CPU safe的。这一点得到DTrace作者Adam的确认:http://www.listbox.com/member/archive/184261/2014/04/sort/time_rev/page/1/entry/3:15/20140410014249:EB3CCA90-C072-11E3-8189-9F9034AA57AC/。


如果你对DTrace感兴趣,欢迎关注DTrace公众号(微信号:chinadtrace),介绍关于DTrace的使用技巧,经验分享,话题讨论等等。也非常欢迎你转发给其它对DTrace感兴趣的朋友。

强劲的Linux Trace工具:bpftrace (DTrace 2.0) for Linux 2018 Original:阿里 姜弋内核月谈译者:姜弋译者注:原作者是大名鼎鼎的性能分析专家:Brendan Gregg,现在工作在Netflix,之前工作在Sun,在Sun公... 阅读详情

相关推荐

PHP:使用 PHP 和 DTrace

PHP:使用 PHP 和 DTrace

希望我的博客,能帮上你解决学习中工作中所遇到的问题 501

Android画面显示流程分析

通过以上章节的了解,APP的画面要显示到屏幕上大致上要经过如下图所示系统组件的处理:首先App向SurfaceFlinger申请画布(通过dequeueBuffer接口),SurfaceFlinger内部有一个BufferQueue的管理实体,它会分配一个GraphicBuffer给到APP, App拿到buffer后调用图形库向这块buffer内绘画。

m0_61097519的博客 4473

深入理解Windows ETW与DTrace技术

本章深入探讨了Windows事件跟踪(ETW)技术的安全机制以及DTrace动态追踪工具的原理和应用。介绍了ETW会话的启动与停止是高权限操作的原因,并详细解释了ETW安全访问权限及其用途。同时,对DTrace的初始化过程、内部架构以及如何在Windows系统中启用和使用DTrace进行了说明。通过实验操作,展示了如何列出安装的DTrace提供者,以及如何使用DTrace进行动态追踪。

weixin_35749440的博客 816

Android在创建硬件层慢的原因分析

最近在项目上,发现很多应用在开始滑动的时候,都会卡顿一下,看了一下systrace文件,可以看到在buildLayer的时候耗时比较长:       可以看到是在glTexImage2D耗时比较多。进一步使用GL Trace分析,可以看到: glTexImage2D(target = GL_TEXTURE_2D, level = 0, interna

oujunli的专栏 3509

R语言TCGA数据下载避坑指南:biolinks包实战中的5个常见错误与解决方案

本文详细介绍了使用R语言的TCGAbiolinks包下载TCGA数据时常见的5个错误及其解决方案,包括安装与加载问题、查询构建参数设置、下载中断处理、数据加载格式不匹配以及版本兼容性问题。通过实战案例和代码示例,帮助生物信息学研究者高效获取TCGA数据,避免常见陷阱。

weixin_30892037的博客 84

revit二次开发环境搭建(2024版)(小白友好)

revit二次开发环境配置,SDK、addin manager和lookup新手友好安装教程

m0_56961251的博客 1420

Android性能优化工具方法总结

性能优化的文章很多,这里单纯记录优化点和优化方法的总结。UI优化Android UI的基础理论知识可以看这里UI性能分析HierarchyViewer什么是HierarchyViewer能够可视化的直观获得UI布局设计结构和各种属性信息,帮助我们优化布局,是Android自带的工具。如何开启支持使用HierarchyViewerAndroid系统出于安全考虑,Hierarchy Viewer只能连接

LymanYe的博客 3002

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

android 调试利器之 strace

strace 是linux下的调试利器;debug居家必备 strace可以跟踪所有的系统调用,打印系统调用的参数和返回值; strace还可以指定跟踪子线程/子进程,这是调试多线程程序必须的; andriod 使用了linux操作系统,strace当然是好用的; strace本身不依赖于系统,从一个机器拷贝到另一个机器直接能用;可以看到,strace 只依赖三个最基本的库:

sylin的专栏 1万+

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5737

DTrace简介

基本语法 probe / optional predicates / { optional action statements; } 其中: 1)       probe:探针,即所要探查的对象。 2)       optional predicates :DTrace脚本没有if语句,使用/ optional predicates /来替代。 3)       optio

一刀的后院 3618

Transformer 跨界物理建模:探索模拟动态物理系统方法与实践(PINN、流体力学、有限元)

是一个由 Nicholas Zabaras 团队开发的开源项目,托管于 GitHub,旨在将 Transformer 模型(最初在自然语言处理领域大获成功)应用于物理系统的建模与预测。该项目基于论文 ​*“Transformers for Modeling Physical Systems”*​(Neural Networks, 2022),探索了深度学习中的 Transformer 架构如何通过自注意力机制和 Koopman 嵌入来模拟动态物理系统。

源代码杀手的博客 1191

DTrace

很少有人听过 DTrace,它是隐藏在 OS 中的小宝藏。DTrace 是强大的 debug 工具 - 因为它拥有极其灵活的特性,并且因为与其它工具差异很大而可能相对不那么有名。 许多时候你的 app 的真正的用户或测试人员会看到一些意外的行为。DTrace 可以让你无需重启 app 就能够在生产版本上回答关于 app 的任何问题。 动态追踪 大概 10 年前,Sun Micro

fishmai的专栏 3337

Unity3D 加密 Assembly-CSharp.dll (Android平台) 防止反编译

0、加密的原理 Unity3D 是基于 Mono的,我们平时写的 C# 脚本都被编译到了 Assembly-CSharp.dll ,然后 再由 Mono 来加载、解析、然后执行。 Mono 加载 Assembly-CSharp.dll 的时候就是读取文件到内存中,和平时读取一个 游戏资源 文件没什么区别。 为了防止别人破解,我们会对游戏资源加密,简单点的 比如修改文件的一个字节 或者 位移一下

Circle 8720

【WRFDA运行第五期】运行 OBSGRID 客观分析

运行 OBSGRID 客观分析

WW、forever的博客 1048

DTrace语言详解

DTrace是一种强大的动态追踪框架,由Sun Microsystems开发,现归属于Oracle。它通过非侵入式方式让管理员和开发者深入了解系统及应用程序行为,无需修改代码或重启系统。DTrace的核心在于动态插桩技术,可在操作系统内核和用户空间几乎任何位置收集详细数据,用于性能分析、问题诊断和安全审计。其专用D语言提供了灵活的脚本编写能力,支持探针、提供者、动作等核心概念,实现低开销的系统观测。虽然主要应用于类Unix系统,但DTrace的设计理念对现代追踪工具产生了深远影响,成为解决复杂系统问题的强大

bulita great world 993

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

dtrace linux_将DTrace探针添加到您的应用程序

Solaris(包括OpenSolaris),FreeBSD和Mac OS X内置的动态跟踪(DTrace)功能为动态跟踪应用程序提供了简单的环境。 与调试不同,DTrace可以随意打开或关闭,并且您无需提供特殊的应用程序构建即可利用跟踪功能。 以上所有平台均支持使用标准DTrace探针。 涵盖了操作系统在代码内不同功能边界上公开的内容。 这些探针(称为功能边界跟踪(FBT))使您可以识别...

cusi77914的博客 1124

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

DTrace Tools

目录 Operating Systems Linux Guide Using DTrace scripts Writing DTrace scripts DTraceToolkit DTrace One Liners Scripts Troubleshooting Examples DTraceTazTool DExplorer Links The following are open source tools and examples that use DTrace, an im

RToax 583

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

dtrace的使用

之前利用dtrace脚本检测用户进程的函数调用,一直说找不到函数符号,现在突然反应过来,C++ 的符号不是函数名,而是一个畸形的名称: libcommon.so

hnhbdss的专栏 2222

Solaris10中新的Dtrace工具

DTrace即动态跟踪Dynamic Tracing,是Solaris 10的一个新功能,透过此一新功能,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。 1997年,供职于Sun而现已是Solaris内核开发部高级工程师的Bryan Cantrill 与他的工作组在紧张地研究一个性能问题,它出现在刚刚提及的Sun E

ZCatLinux --资讯与技术社区--Open Source World----Linux/Shell/DevOPS-- 1万+

DTrace使用简易教程

DTrace是一种系统跟踪工具,它可以帮助您了解系统的运行情况和性能瓶颈。下面是使用DTrace的简单教程。

夏洛的克 1746

Demo'ing DTrace

With my explanation of a demo gone wrong, several people have asked me the more general question: how does one demo DTrace? This question doesnt have a single answer, especially given that DTrace is

silvbb的专栏 1337

《性能之巅》学习笔记之Dtrace good

前言: 《性能之巅》这本书,从推荐序开始,就不停的给Dtrace打广告,按照书中的描述,这是一个非常高级的调试工具,可以用于排查难以定位的线上问题。 看到cpu这章,讲了一个应用场景。如果一个进程pidstat显示sys的CPU使用率很高,可以通过dtrace -n 'profile-997 / pid == xxx / {@[stack()] = count();}'打印进程的内核栈信息,看cpu都消耗在了什么方法上。 于是我就在我的Centos虚拟机上执行了一下这个命令,结果居然返回'invali

eydwyz的专栏 1万+

DTrace on Windows 使用教程

DTrace 是一种动态跟踪框架,它允许管理员或开发人员实时查看系统在用户模式或内核模式下的运行情况。DTrace 拥有类似 C 的高级编程语言,能够动态地插入跟踪点。利用这些跟踪点,用户可以根据条件或错误进行过滤,编写代码以分析锁模式、检测死锁等。与 ETW 相比,DTrace 提供了在运行时程序化插入跟踪点的灵活性。 Microsoft 的 DTrace on Windows 项目是基于 O

gitblog_00788的博客 748

用dTrace捕捉内存分配于释放

Posted on七月 1, 2008byarrowpig1979<br />dTrace是Solaris 10中一个非常强大的工具,有了它,不需要更改代码,就可以“打入”程序内部“探听”我所要知道的一切。其中一个非常重要的就是记录内存分配与释放,然后方便我进一步的分析。 <br /> <br />我们所要做的就是写一个很简单的dtrace的脚本,比如叫memlog.d <br /> <br />上王道: <br /> <br />pid$1:libc:malloc:entry    //->当ma

arrow_pig的专栏 1476
上一篇: An experience of fixing a memory-corruption bug (2)
下一篇: An experience of fixing a memory-corruption bug (3)
一个手艺人
博客等级 码龄16年 20粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值