Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable IOPack, IOEnqueue, and IODequeue on Windows #88894

Merged
merged 22 commits into from
Aug 9, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a8ed540
Testing IOPack
eduardo-vp Jul 13, 2023
8153deb
Add IOEnqueue event
eduardo-vp Jul 14, 2023
ed000ad
Add IODequeue event in NativeOverlappedCallback for Windows Threadpool
eduardo-vp Jul 24, 2023
d3ed46e
Search for ThreadPoolIOPack event
eduardo-vp Jul 25, 2023
bd58b31
Add EventPipeEventThreadPoolIOPack initialization
eduardo-vp Aug 1, 2023
4ae8996
Use EventLevel.Verbose, test fixed
eduardo-vp Aug 1, 2023
9cdf4a5
Add test to NativeAot CI runs + Evaluate WorkerThread events only in …
eduardo-vp Aug 2, 2023
70032d9
Fixed typo in runtime.yml
eduardo-vp Aug 2, 2023
1aee4f9
Fix test
eduardo-vp Aug 3, 2023
0fda41d
Nit: Comment removed
eduardo-vp Aug 3, 2023
951be33
Merge branch 'main' into feature/add-threadpool-events
eduardo-vp Aug 3, 2023
4d13acc
Test IOPack, IOEnqueue and IODequeue
eduardo-vp Aug 3, 2023
37cdadf
Nit: Fixed variable name
eduardo-vp Aug 3, 2023
cb86c96
Used a separate ManualResetEvent
eduardo-vp Aug 3, 2023
432136a
Used different ManualResetEvent for each IOEvent
eduardo-vp Aug 3, 2023
4d86a5e
Update test, test UnsafeQueueNativeOverlapped in Windows only
eduardo-vp Aug 4, 2023
8fb1008
Added events in RegisterWaitHandle and real async IO for Windows thre…
eduardo-vp Aug 5, 2023
2e94127
Test fixed. Still missing why the first part doesn't work on NativeAot
eduardo-vp Aug 5, 2023
e12ce91
PR comments
eduardo-vp Aug 8, 2023
07dd9ee
Merge branch 'main' into feature/add-threadpool-events
eduardo-vp Aug 8, 2023
84de91a
Fire IODequeue before CompleteWithCallback in OnNativeIOCompleted
eduardo-vp Aug 8, 2023
995f189
Fixed comment
eduardo-vp Aug 8, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using Microsoft.Win32.SafeHandles;
using System.Diagnostics;
using System.Diagnostics.Tracing;
using System.Runtime;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
Expand Down Expand Up @@ -43,6 +44,9 @@ internal unsafe RegisteredWaitHandle(SafeWaitHandle waitHandle, _ThreadPoolWaitO

_tpWait = Interop.Kernel32.CreateThreadpoolWait(&RegisteredWaitCallback, (IntPtr)_gcHandle, IntPtr.Zero);

if (NativeRuntimeEventSource.Log.IsEnabled())
NativeRuntimeEventSource.Log.ThreadPoolIOEnqueue(this);
eduardo-vp marked this conversation as resolved.
Show resolved Hide resolved

if (_tpWait == IntPtr.Zero)
{
_gcHandle.Free();
Expand Down Expand Up @@ -91,6 +95,9 @@ private void PerformCallbackWindowsThreadPool(bool timedOut)
}
}

if (NativeRuntimeEventSource.Log.IsEnabled())
NativeRuntimeEventSource.Log.ThreadPoolIODequeue(this);

_ThreadPoolWaitOrTimerCallback.PerformWaitOrTimerCallback(_callbackHelper!, timedOut);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

using Microsoft.Win32.SafeHandles;
using System.Diagnostics;
using System.Diagnostics.Tracing;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading;
Expand Down Expand Up @@ -54,6 +55,9 @@ private static unsafe ThreadPoolBoundHandle BindHandleWindowsThreadPool(SafeHand
Win32ThreadPoolNativeOverlapped* overlapped = Win32ThreadPoolNativeOverlapped.Allocate(callback, state, pinData, preAllocated: null, flowExecutionContext);
overlapped->Data._boundHandle = this;

if (NativeRuntimeEventSource.Log.IsEnabled())
NativeRuntimeEventSource.Log.ThreadPoolIOEnqueue((NativeOverlapped*)overlapped);
eduardo-vp marked this conversation as resolved.
Show resolved Hide resolved
eduardo-vp marked this conversation as resolved.
Show resolved Hide resolved

Interop.Kernel32.StartThreadpoolIo(_threadPoolHandle!);

return Win32ThreadPoolNativeOverlapped.ToNativeOverlapped(overlapped);
Expand Down Expand Up @@ -157,6 +161,9 @@ private static unsafe void OnNativeIOCompleted(IntPtr instance, IntPtr context,
Win32ThreadPoolNativeOverlapped.CompleteWithCallback(ioResult, (uint)numberOfBytesTransferred, overlapped);
ThreadPool.IncrementCompletedWorkItemCount();

if (NativeRuntimeEventSource.Log.IsEnabled())
NativeRuntimeEventSource.Log.ThreadPoolIODequeue((NativeOverlapped*)overlappedPtr);
eduardo-vp marked this conversation as resolved.
Show resolved Hide resolved

wrapper.Exit();
}

Expand Down