EDIT: keep in mind that the following description is the initial version of the "problem" - please also read any comments I added below to get the full picture of what I have tried already. Generally speaking it seems that RIO itself (i.e. as an API) is not causing the problem. Something between the NIC and (my) user space code has to be configured wrongly or is outright broken.
I have recently written a UDP reception based on WinSock Registered IO (RIO) using the somewhat acceptable documentation MS provides for this API. The resulting performance is very disappointing: somewhat stable single socket performance of around 180k packets per second - around 260k packets per second when using multiple RSS queues (i.e. multiple sockets). The code has been profiled using Tracy and the results suggest that everything is in working order.
Up until now one might be tempted to think that I have just done a bad job at writing the code I gathered these numbers from. Therefore, I have searched online and found blog posts from 2012 that suggest single socket performance to be at least 450k packets per second. I downloaded the code and ran it on may test setup (back to back 10 Gb/s connected machines) and got similar performance to mine.
And now it gets interesting: after writing an email to the blogger I got the code from, he tried it out on his machines and also came to the conclusion that "RIO performance is disappointing" and that basic blocking IO outperforms it (at least in this single socket setup). Unfortunately, he does not have the time for further investigation on why the code from 2012 results in worse performance on better hardware.
All tests were performed on Windows 10 Pro based machines and at least on my side with (presumably) appropriate NIC configuration and no SMT/HyperThreading. The system was not under any load while conducting the tests.
It is true that the question I initially asked, could be rephrased to: did the RIO API change such that code written in 2012 is now performing very badly? Or: how does a "modern" approach to using RIO look like? Or: should RIO be used at all in 2021?