corefx-tools
corefx-tools copied to clipboard
perfollect support for Mac OS
Are there any plans to support perfcollect on Mac OS? Attempting to install via ./perfcollect install
responds with
ERROR: Auto install unsupported for this distribution. Install perf manually to continue. but there are no instructions to be found on how to install manually.
Attempting to run ./perfcollect collect myAppCollect
before performing the install results in
Perf not installed. Install perf to proceed.
PerfCollect uses perf and LTTng as its tracing mechanism - As far as I am aware, neither perf or LTTng is available on macOS, so we can't enable perfcollect to support macOS unless macOS decides to switch over to the Linux kernel for some reason :-)
That's the bad part of the answer. The good part - we are actively working on a cross-platform performance monitoring tool via EventPipe which should enable users to do performance diagnostics on macOS as well. Just to set expectations, these are being actively being worked on, which means they are not quite ready for use yet. We're working to get this into the official .NET Core 3.0 release timeframe. In case you want to keep an eye out on what is coming:
- Runtime side: https://github.com/dotnet/coreclr/projects/5
- Some client-side CLI tools: https://github.com/dotnet/diagnostics/blob/master/documentation/design-docs/dotnet-tools.md#capture-a-trace-for-performance-analysis
This probably isn't the exact answer you wanted to hear, but hopefully that helps your understanding of where we stand.
eventpipelines work on OSX since 2.1. What exactly are you trying to achieve @babakontheweb? You can do something like:
export COMPlus_EnableEventPipe=1
export COMPlus_EventPipeConfig=Microsoft-System-Net-Sockets:0xFFFFFFFFFFFFFFFF:5,Microsoft-System-Net-Security:0xFFFFFFFFFFFFFFFF:5,Microsoft-System-Net-Http:0xFFFFFFFFFFFFFFFF:5
and run your app. It will create .netperf file in app's current directory and you can load it in perfview.
To add to @wfurt's answer, you can also get some useful runtime events (ex. JIT, GC, Threads, etc.) as well. To do that you can add Microsoft-Windows-DotNETRuntime:0x4c14fccbd:4
to COMPlus_EventPipeConfig
environment variable (they're comma-separated).
Alternatively you can use the dotnet-collect tool: https://github.com/dotnet/diagnostics/tree/master/src/Tools/dotnet-collect.
None of the above gives native stacks though, which may/may not be a limiting factor depending on your usage.