go 运行时/跟踪,命令/跟踪:提供每个M的视图,

ux6nzvsh  于 5个月前  发布在  Go
关注(0)|答案(5)|浏览(47)

Go执行跟踪器目前提供了每个P的视图(默认,通过/trace)或每个G的视图(通过/goroutines)。
当我调查调度器的问题时,我经常发现自己想要一个每个M的视图,因为这是调度器真正操作的级别。这使得更容易看到当Ps在Ms之间切换时,当Ms停止等。
对于#43997,我认为需求足够强烈,我在http://golang.org/cl/286972中为它构建了一个一次性CL。那个CL向(几乎)每个跟踪类型添加了一个参数,所以我认为它作为通用解决方案还不够可接受,但如果有一个更完整的版本我们可以实际包含就更好了。
cc @mknyszek@aclements@hyangah

avkwfej4

avkwfej41#

https://golang.org/cl/286972提到了这个问题:runtime,cmd/trace: add M id to traces

ecr0jaav

ecr0jaav2#

抱歉打扰了。这个功能在未来会被接受吗?
@prattmic

watbbzwu

watbbzwu3#

这个功能在未来会被接受吗?

我不期望在这个功能上遇到太多的阻力,但是我的CL https://golang.org/cl/286972 会向跟踪文件中添加数据,从而可能对性能产生影响,这意味着它需要更多的思考,而且没有人在处理这个问题。如果我的CL是免费的,那么它很可能已经进入了。

wsewodh2

wsewodh24#

作为这个想法的延伸,我也梦想着在每个M视图中扩展跟踪文件以查看"运行时内部视图"。我希望有一个完整的M正在做什么的分解。也就是说,从一个M从mPark唤醒到再次进入mPark睡眠的那一刻,我希望有一个完全指定的跟踪,显示该M正在做什么:寻找工作、运行goroutine等。在usleep或等待lock的时间可能是空白的,但应该标注出来。wakephandoffp等应将事件流向它们唤醒的M。

p5fdfcr1

p5fdfcr15#

我一直在想,如果只有一种跟踪类型是否太过于笨拙。我们可以想象仍然使用单一的跟踪格式,但在捕获哪些类型的跟踪事件方面引入更精细的控制。这里也有可能实现一些统一,例如与profile stream和debuglog一起使用。

相关问题