Let's consider a simple case - I'm running a .net5 console app on Windows. If I grab traces via PerfView /threadTime collect like described in here then I get to see BLOCKED_TIME metric in Thread Time Stacks tab. How should I run dotnet-trace command to get the same metric in Perfview? I've tried to play with the verbosity level but no luck so far.
How to get BLOCKED_TIME metric with dotnet-trace
410 Views Asked by Kiryl At
1
There are 1 best solutions below
Related Questions in .NET
- file download method in visual studio 2017
- Repository manager receives the wrong connection string in .net core
- MongoDb not connecting C#
- The current .NET SDK does not support targeting .NET Core 6.0. Brand new WPF Project VS Community 2022 17.9.5
- Why Scanning GSI on DynamoDb doesnt work as fast as expected when using CONTAINS?
- Are "blittable types" really unmanaged types for StructLayout Sequential
- Failed to fetch dynamically imported module on Blazor JS Interop
- Problem to upload several images per one request
- Implementing Azure AD B2C Authentication in .NET 8 Blazor Project (RenderMode: InteractiveAuto)
- Stripe connect payout - throws exceptions
- 'IOException: The cloud file provider is not running', when trying to delete 'cloud' folder
- Azure Application Insights Not Displaying Custom Logs for Azure Functions with .NET 8
- Convert C# DateTime.Ticks to Bigquery DateTime Format
- Socket.io nodejs server .NET connection
- Producer Batching Service Bus Vs Kafka
Related Questions in .NET-5
- What is the difference between LTS and GA in Microsoft .NET releases?
- Package Microsoft.EntityFrameworkCore.Sqlite 5.0.0-rc.1.20451.13 is not compatible with net50 (.NETFramework,Version=v5.0) / win7-x86
- .Net5: How do I get the EnvironmentName from Program.cs
- WriteableBitmap performance: Debugging faster then Without Debugging
- How to install runtime extensions for DotNet 5
- Blazor Web Assembly App .Net Core Hosted: publish runtime error
- .NET 5 RC1 API Controller constructor issue
- .Net 5 RC 1.20451 Blazor App Fails to launch
- Azure CI pipeline for Blazor .NET 5 doesn't work
- .NET 5: Import was not found or had errors
- Membership.ValidateUser() in .Net Core or .Net 5
- What is side-by-side installation meant(one of the .NET Core primary characteristics)
- IIS cannot open web.config - The requested page cannot be accessed because the related configuration data for the page is invalid
- .net 5 performance of Dictionary vs List vs other in large iteration
- How to get component type from location/url/route
Related Questions in PERFVIEW
- [Exception Occurred: System.Runtime.InteropServices.COMException (0x80070296): Exception from HRESULT: 0x80070296
- Perfview, BLOCKED_TIME and Pause in Garbage Collection
- How to get BLOCKED_TIME metric with dotnet-trace
- Perfview command trigger being executed incorrectly on threshold
- High CPU command for perfview explanation
- PerfView and high CPU usage during Garbage Collect
- Finding URL of thread when diagnosing memory in PerfView
- PerfView showing thousands of random FileOpenOrCreate during thread exhaustion
- Lots of CPU time on Task.ContinueWith?
- Debugging OutOfMemory exception with WinDbg and wpr. Why are these symbols shown as ?!? - jitted .net?
- Find most called methods using Perfview
- dotnet-trace collects only CPU_TIME and UNMANAGED_CODE_TIME
- ASP.NET site memory use up to 99% if IIS app pool NOT enable 32-bit applications
- How to disable stacks for EventSource events?
- Why Perfview doesn't display provider name, event name and message?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
In short, you can't :(
Dotnet-trace uses a sampling profiler implemented in the .NET runtime. The profiler runs in a separate thread in the application and collects call stack frames of managed threads every few milliseconds. In contrary to most CPU profilers, it collects call stacks even for threads that are waiting. So, by looking at call stacks, you could estimate the waiting time for a managed thread. For example, in the picture below, we may see a managed thread waiting for about 686 ms on a ManualResetEvent.
Of course, this is only an estimate and depends on the sampling interval. You may also enable the CLR ThreadPool events and/or the TplEventSource provider to get events describing the inner-working of the thread pool and TPL.
Now, for the
BLOCKED_TIMEmetric in PerfView. It is based on Context Switch ETW events. You enable them with the 'Thread Time' checkbox in the PerfView collection dialog:These events are emitted by the system scheduler/dispatcher when a new thread starts running on a CPU. They allow us to measure threads' waiting/running times accurately, but they are also very voluminous.