I looked at the replication instructions at <a href="https://github.com/blueperf/demo-vt-issues/tree/main">https://github.com/blueperf/demo-vt-issues/tree/main</a>, which reference this project: <a href="https://github.com/blueperf/acmeair-authservice-java/tree/main">https://github.com/blueperf/acmeair-authservice-java/tree/ma...</a><p>What "CPU-intensive apps" did they test with? Surely not acmeair-authservice-java. A request does next to nothing. It authenticates a user and generates a token. I thought it at least connects to some auth provider, but if I understand it correctly, it just uses a test config with a single test user (<a href="https://openliberty.io/docs/latest/reference/config/quickStartSecurity.html" rel="nofollow">https://openliberty.io/docs/latest/reference/config/quickSta...</a>). Which would not be a blocking call.<p>If the request tasks don't block, this is not an interesting benchmark. Using virtual threads for non-blocking tasks is not useful.<p>So, let's hope that some of the tests were with tasks that block. The authors describe that a modest number of concurrent requests (< 10K) didn't show the increase in throughput that virtual threads promise. That's not a lot of concurrent requests, but one would expect an improvement in throughput once the number of concurrent requests exceeds the pool size. Except that may be hard to see because OpenLiberty's default is to keep spawning new threads (<a href="https://openliberty.io/blog/2019/04/03/liberty-threadpool-autotuning.html" rel="nofollow">https://openliberty.io/blog/2019/04/03/liberty-threadpool-au...</a>). I would imagine that in actual deployments with high concurrency, the pool size will be limited, to prevent the app from running out of memory.<p>If it never gets to the point where the number of concurrent requests significantly exceeds the pool size, this is not an interesting benchmark either.