Description
Hello all! I've talked to several of you over the past month about invigorating this working group and creating a greater Diagnostics team for Node. To be helpful, I wanted to come with a tentative plan and hammer out details with everyone.
To that end, following is a summary of the diagnostic domains which we can help Node cover and around which we can orient our work. I propose creating a wiki-like structure in this repo oriented around these domains and then using PRs to add new domains, interfaces and APIs, tools, samples and docs.
Note: "Post-mortem" topics are listed here under "Heap and Memory Analysis" for completeness; that work should continue in the nodejs/post-mortem team.
I also propose we restart our monthly meeting to discuss items from this list. In our next meeting, for example, we should probably discuss AsyncWrap issues and how to support the coming Chrome Debugging Protocol in V8.
Could you provide feedback on the proposed structure? If we have consensus I'll go ahead and work with @pmuellr to organize this repo accordingly.
Goals
- Node surfaces a set of comprehensive, documented, extensible diagnostic protocols, formats, and APIs for use by tooling clients and VM vendors.
- Enable many tool vendors to provide reliable diagnostic tools for Node.
Plans
- Collect, understand, and document existing diagnostic capabilities and entry-points throughout Node, V8, and other components.
- Collect and document projects and products providing diagnostics for Node with brief description of their technical architecture and sponsoring organizations.
- Identify and explore opportunities and gaps, feature requests, and conflicts in existing diagnostics capabilities.
Domains
- Tracing
- Profiling
- Heap and Memory Analysis
- Step Debugging
- Protocol and API
Tracing
- nodejs/tracing-wg
- System: dtrace, lttng, etw, systemtap
- V8: TRACE_EVENT
- Requires implementation of v8::Platform::AddTraceEvent
- Node: AsyncWrap, Domains, Zones
- JavaScript: Domains, Zones
Profiling
- V8 CPU Profiler:
v8::Isolate::GetCpuProfiler
(include/v8-profiler.h)- Accessible globally through
--prof
, basic display through--prof-processor
- node-inspector/v8-profiler
- Accessible globally through
- V8 Heap Profiler:
v8::Isolate::GetHeapProfiler
(include/v8-profiler.h)- Also accessible through 'v8' module.
- node-inspector/v8-profiler
- Intel vTune (
./configure --enable-vtune-profiling
)
Heap and Memory Analysis
Step Debugging
Protocol and API
- Chrome Debugging Protocol
- Stability and extensibility
- V8 Debugging Protocol