parca-dev / parca-agent

eBPF based always-on profiler auto-discovering targets in Kubernetes and systemd, zero code changes or restarts needed!

Home Page:https://parca.dev/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

.NET support

brancz opened this issue · comments

.NET (dotnet) support has been requested a number of times now.

It should already work with perf-map enabled: https://docs.microsoft.com/en-us/dotnet/core/run-time-config/debugging-profiling#write-perf-map

That said, it should also work automatically without any change to a user's deployment.

Any news on this? We're mostly dot netting around ... so would be great to have this in a smooth way. It seems we can get Parca to work. But, with a little extra work. So getting the experience to be smoother would be great.

Perhaps this is what you meant, but just in case if not, we did recently add an example of what to do to get .NET application working today: parca-dev/parca-demo#18

We're still trying to figure out why ahead-of-time compiled .NET binaries aren't working (they should to our knowledge, it might be something small): parca-dev/parca-demo#23

The ultimate goal is that what needs to be enabled in parca-dev/parca-demo#18 is not necessary, which we haven't started the work for yet, so in the meantime that is the best way to use Parca with .NET.

ahead-of-time compiled ... that's good old CI stage build *.dll files containing dotnet code? Is that what you mean? Thanks.

I know next to nothing about .NET, so I can only go by docs or other web searches. From the docs, I understand that ahead-of-time compilation to a regular self-contained Linux ELF binary (which should work just fine with Parca Agent if debuginfos are available) is only supported since .NET 7, which appears to have only been released on November 8th, 2022, so it appears to me it's rather the bleeding edge than an old feature.

Thank you for taking the time @brancz to look into this even further. Much appreciated. I'll see what I can get going here on the tracing side of things when workloads are coded in dotnet. Thank you!

Yes, AOT is the bleeding edge, you are likely interest by what's here (JIT): https://github.com/parca-dev/parca-demo/tree/main/dotnet (See link in README and ENV in Dockerfile)