Asynchronous Events

AcceptEx() bug in Windows 8 and all Server 2012 variants

Be aware that there is a known bug in Windows 8 and all Server 2012 variants which causes AcceptEx() completions to be delayed in some situations. This was confirmed by a Microsoft representative on Microsoft Connect, see the error report ticket here. An example of how to demonstrate this bug, its likely affects and the current know causes can be found here in this Stack Overflow question. I’m a little disappointed with the official response to this bug report.

Winsock Registered I/O, I/O Completion Port Performance

Continuing my analysis of the performance of the new Winsock Registered I/O API, RIO, compared to more traditional networking APIs we finally get to the point where we compare I/O completion port designs. I’ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview, though lately most of my testing has been using Windows Server 2012 RC.

Winsock Registered I/O - Traditional Multi threaded IOCP UDP Example Server

This article presents the sixth in my series of example servers for comparing the performance of the Winsock Registered I/O Networking extensions, RIO, and traditional Windows networking APIs. This example server is a traditional multi-threaded, IOCP based, UDP design that we can use to compare to the multi-threaded RIO IOCP UDP example server. I’ve been looking at the Winsock Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview, though lately most of my testing has been using Windows Server 2012 RC.

Worrying issue with Windows 8 and AcceptEx...

There’s an interesting question over on stack overflow about a perceived change in IOCP behaviour on Windows 8 (and Server 2012 RC). The question includes some code which demonstrates how an overlapped AcceptEx() call is blocked on by the thread that issued it being blocked inside a call to ReadFile() at the time that the AcceptEx() completes. The completion for the AcceptEx() is delayed until the ReadFile() completes even though a thread is waiting for completions on the IOCP associated with the socket.

Windows Server 2012 Registered I/O Performance - take 2...

I’ve been looking at the Windows 8 Registered I/O Networking Extensions since October when they first made an appearance as part of the Windows 8 Developer Preview. Whilst exploring and understanding the new API I spent some time putting together some simple UDP servers using the various notification styles that RIO provides. I then put together some equally simple UDP servers using the “traditional” APIs so that I could compare performance.

Latest release of The Server Framework: 6.5.7

Version 6.5.7 of The Server Framework was released today. This release contains one important bug fix and support for Visual Studio 2012 RTM. The bug that was introduced in 6.5.6 has exposed a gap in our unit testing which has also been filled with this release. If you use either the Read Timeout filter or VS2012 RTM then you should install this update. This release includes the following, see the release notes, here, for full details of all changes.

Latest release of The Server Framework: 6.5.6

Version 6.5.6 of The Server Framework was released today. This release contains some bug fixes, a selection of minor improvements and improved support for the Visual Studio 2012 (Note that there will be a further release shortly after Visual Studio 2012’s RTM if needed to address any changes between the Release Candidate and the RTM versions). If you use either the Read Timeout filter or the Flow Control filter then you should install this update.

Windows 8 Registered I/O Performance - finally using a full 10 Gigabit link...

As I mentioned back in March I’m now doing some RIO performance testing with a 10 Gigabit Ethernet link as I couldn’t push my test server hard enough with multiple 1 Gigabit links. This involves 2 Intel 10 Gigabit AT2 cards connected directly to each other. One of the cards is in our test server and the other has been tried in various other pieces of test hardware in an attempt to ramp up the bandwidth usage for the RIO tests.

Bug in the 6.5.5 changes for the read timeout connection filter

The recent changes to 6.5.5 so that JetByteTools::Socket::CReadTimeoutStreamSocketConnectionFilter holds a socket reference when the timer is set causes problems when the socket is shutdown. The filter doesn’t see the shutdown and fails to cancel the timer which means that a reference is held on the socket until the timeout expires. This delays socket closure and causes your timeout handling code to be run on a socket which has been cleanly shut down.

Differences between Visual Studio 11 Beta and Visual Studio 2012 RC

As I mentioned in the release notes for version 6.5.5, The Server Framework now supports Visual Studio 11 Beta. It also supports Visual Studio 2012 RC but there are a couple of new warnings that you may need to suppress in Warnings.h. I haven’t been able to locate and details of the differences in the native code generation and C++ compiler side of Visual Studio 2012 RC from what was present in Visual Studio 11 Beta.