Go执行跟踪器目前提供了每个P的视图(默认,通过/trace
)或每个G的视图(通过/goroutines
)。
当我调查调度器的问题时,我经常发现自己想要一个每个M的视图,因为这是调度器真正操作的级别。这使得更容易看到当Ps在Ms之间切换时,当Ms停止等。
对于#43997,我认为需求足够强烈,我在http://golang.org/cl/286972中为它构建了一个一次性CL。那个CL向(几乎)每个跟踪类型添加了一个参数,所以我认为它作为通用解决方案还不够可接受,但如果有一个更完整的版本我们可以实际包含就更好了。
cc @mknyszek@aclements@hyangah
5条答案
按热度按时间avkwfej41#
https://golang.org/cl/286972提到了这个问题:
runtime,cmd/trace: add M id to traces
ecr0jaav2#
抱歉打扰了。这个功能在未来会被接受吗?
@prattmic
watbbzwu3#
这个功能在未来会被接受吗?
我不期望在这个功能上遇到太多的阻力,但是我的CL https://golang.org/cl/286972 会向跟踪文件中添加数据,从而可能对性能产生影响,这意味着它需要更多的思考,而且没有人在处理这个问题。如果我的CL是免费的,那么它很可能已经进入了。
wsewodh24#
作为这个想法的延伸,我也梦想着在每个M视图中扩展跟踪文件以查看"运行时内部视图"。我希望有一个完整的M正在做什么的分解。也就是说,从一个M从
mPark
唤醒到再次进入mPark
睡眠的那一刻,我希望有一个完全指定的跟踪,显示该M正在做什么:寻找工作、运行goroutine等。在usleep
或等待lock
的时间可能是空白的,但应该标注出来。wakep
、handoffp
等应将事件流向它们唤醒的M。p5fdfcr15#
我一直在想,如果只有一种跟踪类型是否太过于笨拙。我们可以想象仍然使用单一的跟踪格式,但在捕获哪些类型的跟踪事件方面引入更精细的控制。这里也有可能实现一些统一,例如与profile stream和debuglog一起使用。