首页 > 编程知识 正文

使用System Trace工具分析CPU线程调度和内存调度

时间:2023-05-05 17:23:57 阅读:180703 作者:4717

什么是系统跟踪系统跟踪? 作为instruments的安静功能出现了。 很多人可能不知道System Trace,但首先让我们看看苹果工程师为System Trace写的简历。

systemtraceresume 3358 www.Sina.com /提供了有关系统运行的全面信息。 显示线程的调度、系统线程转换和内存使用情况。 此模板可以在OS X或iOS上使用。

还是不知道? 什么? 什么?

简单来说,就是记录一个App运行中所有基础系统线程、内存的调度使用进程的工具。

在systemtraceininstruments8instruments 8中,苹果工程师system trace进行了优化,添加了新功能和细节优化。

记录时间xfdxn在打开记录模式后,将APP配置内核设置为特殊的跟踪模式。 这将记录所有线程调度活动、系统方法调用和虚拟内存使用情况。 随着时间的推移,它可能是大量的数据。

Intruments 8中的一个更改是将模板的默认模式设置为Windowed Mode。 这意味着系统跟踪只保留最后5秒左右的数据。 这将降低数据量,同时使关注点更集中,数据价值更高。

“interest time limit points of interest (重点)”介绍这是Instrument 8中系统跟踪的最大优化点。

在此之前,让我们看一下系统跟踪获取的数据的长度。

从System Trace Data Look Like中可以看到,这些使用痕迹非常密集。 而且很多都是徒劳的,是我们不关心的数据。 在instruments 8中,系统跟踪宣布了一个名为Points of Interest的功能,用于标记感兴趣的调用流程。

在Points Of Interest中,应注意此功能仅支持io S10/Macintosh Sierra/tvo S10/watch OS 3。

看完简介后,看看该怎么用这个大家伙。

kdebug将kdebug_signpost_start(code,arg1,arg2,arg3,arg4)添加到您关注的起点

在你关注的最后添加kdebug_signpost_end(code,arg1,arg2,arg3,arg4)

这里kdebug也支持异步处理。

在kdebug asynchronous中,系统跟踪会特别处理你标记的Interesting Point

在AsynchronousPoint中,这些参数是什么意思?

code是用于区分不同点的id。 arg1保留字段arg2保留字段arg3保留字段arg4用于区分意思是,0 Blue,1 Green,2 Purple,3 Orange,4 Red的颜色。 这样做是为了能够更好地标记感兴趣的点。 例如,如果要同时关注因特网请求的成功和失败。

在kdebug Color NSURLSession中,设置为颜色

颜色最后分配可以得到五颜六色的Interesting Point

AsychronousWithColor注意事项的大致用法如上,但请注意包括#import sys/kdebug_signpost.h

在数据分析中介绍了系统跟踪的使用,我们来看看如何分析获取的数据。 首先来看看某个线程的数据。

当运行Running On CUP xfdxn的程序运行时,实际上取决于CUP的执行。 那么,CUP竞争和日程的产生是不可避免的。 这依赖于操作系统的线程调用策略,进行线程的切换。 通过System Trace,可以清楚地看到每个线程的详细调用过程。

从runningstateblockedstaterunnablestate上的图中可以看到,线程通常有三种状态。 运行、阻止、运行。

Running表示线程当前拥有它

有CUP时间去处理数据。

Blocked 表示该线程的CUP时间到了,进去阻塞状态,CUP开始为其他线程服务。

Runnable 表示该线程重新对CUP获取到控制权。

More:
现在大多数操作系统都是如此(包括windows)。例如你有ABC三个事件要去处理,真正的CUP调度不会是按照ABC来处理。可能的调度过程是:ABABCBC。
实际的调度是靠计算机外部会有一个外部计时器,调度的工作全靠这个寄存器。按照一定频率和调度算法进行CUP调度,如果A线程用完了自己的CUP Time就会进入阻塞状态,等待唤起。

这里我们还可以看到所有调度所花费的时间。其中包含线程中断时存储状态的时间和线程抢占时切换线程的时间。

Time Of CUP User Interactive Load Average (用户交互负载记录器) 简介

这是Instruments 8的另外一个新亮点,简单好用。User Interactive Load Average,就是跟踪每10毫秒内CUP的交互负载,并绘制成图像。具体如下。

使用 System Load

从上面的图片可以看出,蓝色线表示一个时刻,下面数据对应的时间点。下面的图表表示,在这一时刻你有3个线程正在Running或者Runnable。还可以知道每一个线程运行在哪个CUP上。

当然这样可能不直观,不知道到底我们的app行不行,那么苹果还提供一个直观的图表方便我们查看。

Average Load

绿色部分表示,在这个时刻你的线程负载是CUP可以接受的。橙色部分表示,在这个时刻你的线程负载超出了CUP性能。

总结

在性能优化上,Time Profiler 能进行大部分的优化。System Trace作为Time Profiler的辅助工具出现,能够让开发人员更加了解和关心App底层的运行过程。通过这个工具了解到每一个时刻,App内部在发生些什么。

转载:https://www.jianshu.com/p/6629dff8a2dc

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。