VizTracer 0.2.0 正式支持Mac啦

在开发阶段版本号总是更新的飞快。在经历了几个micro版本变动之后,我决定直接把版本提升到0.2.0,因为之前想的0.2.0计划基本都实现了,还额外多了点东西。

从上次发文章到今天的0.2.0,主要发生了以下的变动:

Multi Threading!

多线程比想象的容易一些,主要还是得力于前端的强大的parse能力。整体架构几乎没太动的情况下就实现了。发个图展示一下吧。众所周知python的多线程由于有GIL的影响,计算上是没什么帮助的,这里特意在线程里sleep了一下,让它有点效果。

另外,VizTracer的多线程完全不需要任何额外的操作,一切正常运行就行。但是目前只支持python native的threading module,别的各种多线程库是不行滴。

MacOS Support!

昨天收到了VizTracer有史以来的第二个issue,说在Mac上安装有问题。其实VizTracer从来就没有正式支持过Mac,所有的开发都是在WSL上完成的。但是理论上说我的代码应该在Unix based的MacOS上完全能跑,于是我尝试了一下,在发现了一个本来就有的bug之后代码就神奇地跑起来了。

更加惊喜的是,github的action竟然支持MacOS虚拟机,也就是我完全可以在云端直接免费跑各个python版本+Mac的测试和发布。有这好资源,不用白不用,于是现在VizTracer就正式支持MacOS啦!用Mac的小伙伴也可以用VizTracer了。

Instant Event!

我在刚开始做VizTracer的时候,就想过这个feature,就是用户在trace的过程中,可以在任意一个时间点去log一个任意的数据结构,这样回头debug的时候可以看。它很类似于我们平时用的print debug,但是放到VizTracer里,你相当于可以看到这个print的时间,print时候的call stack。这个feature前端是chrome的instant event,所以我就直接叫instant了。

在前端的展现形式是一个event,一个小竖线在图上,点一下就能打开你记录的数据。当然了,由于输出是json格式,你的数据必须可以jsonify才行。

Parsing Optimization!

这是之前遗留的一个历史问题了。刚开始设计的时候,先在python端设计了数据结构,然后在做C的时候,为了不给程序带来太大的overhead,保存的基本是个metadata,为了接口的简便,又parse成了简单的python data。这来回来去相当于要把所有的数据parse三次——metadata -> C/Python interface -> Python internal -> Json。导致parse时间爆炸。

在决定了用Chrome Trace Event之后,我先优化掉了Python internal的步骤,让他直接变成json,这是上篇文章的内容。这次我把C的interface也重新弄了一下,让C返回给Python的data直接就是一个Chrome Trace Event数据,python拿到直接jsonify就行了。这也节省了不少时间。

C Function!

之前的VizTracer是只会记录python function的,所有的python call C的函数(包括大量的内置函数)都是不会记录的。其实倒也不是很麻烦,只是当时做的时候是决定先去处理python。现在程序比较成熟了,就决定把C函数也记录一下。所以现在builtin的各种函数的entry exit也会被记录了。当然了,也提供了--ignore_c_function 把这个feature关掉。


更新大概基本就是这样了。我现在脑海中想做的内容真的剩的越来越少了,现在就是缺乏比较大规模的测试来找程序的问题,这样才可以到production level。

当然了,想法还是有一些的,其中比较重要的是多进程的支持。但是目前来看,我的架构很难做到无缝支持多进程,未来的实现大概率是多进程自动产生多组数据,然后还需要运行一下程序把数据组合起来。

最后依然是老规矩,把项目链接放出来,欢迎大家提出宝贵的意见以及试用~

gaogaotiantian/viztracergithub.com图标

t

编辑于 08-16

文章被以下专栏收录