Linux Achieves 5.1M IOPS Per-Core with AMD Zen 3 and Intel Optane
phoronix.com
phoronix.com
https://www.youtube.com/watch?v=RfrMnVpPuVw - The initial video attempting to clear 20 million IOPS on Threadripper
https://www.youtube.com/watch?v=WEMszbMUj68 - 15 million IOPS on Xeon 8380s (you can see how this is going)
https://www.youtube.com/watch?v=9Gu_rT8N0-U - Discussion with Allyn Malventano of Intel
My broad interpretation of this is that the software layer was not ready for things like 64+ core systems on a single socket, and PCI-E 4 drives moving data this fast. Nice to see it's starting to catch up.
You're talking specifically about server environments there, right? Because consumer NVMe devices started out with far lower queue counts (eg. 7) and even the top consumer SSD product lines have struggled to keep pace with growing Threadripper core counts. 64 queue support is still something of a luxury among consumer NVMe devices.
Even Anandtech only tested 32 queues on the 980 Pro [0].
[0] - https://www.anandtech.com/show/16087/the-samsung-980-pro-pci...
Supporting more queues means that you need less communication and synchronization between CPU cores; ideally, you have at least one queue per core so that each CPU core can submit commands to the SSD independently.
I didn't test queue depths higher than 32 when I reviewed the 980 PRO, because it's a consumer drive and consumer workloads hardly ever produce double-digit queue depths. Even going all the way up to QD32 is fairly unrealistic.
Server workloads can be quite different, and some of them genuinely can result in a large number of simultaneous IO requests. Consumer workloads have barely even started to evolve to take advantage of SSDs, and hard drives aren't quite entirely gone from the consumer PC market.
As for how to check how many queues a NVMe drive supports: the easy way is to install the drive in a system with a very large number of CPU cores, and see how many queues the Linux NVMe driver creates (check the drive's sysfs directory). My understanding from reading the NVMe spec is that you can't necessarily query the drive itself for the number of supported queues after the operating system's NVMe driver has already done that and set up its queues.
$ sudo nvme get-feature /dev/nvme0 -f 7
get-feature:0x7 (Number of Queues), Current value:0x7f007fI really wish there is some industry push towards this. But last time ( I think around 6-7 years ago ) I try to push for this the answer was Information Security and Data erase / recovery would not allow SSD to be used in certain industry and domain. It has to be HDD.
I wonder if this has changed in the era of Smartphone and Tablet where NAND are now the default solution.
I think any security concerns that might have once privileged hard drives over SSDs have been settled. There are plenty of options for FIPS 140-2/3 certified self-encrypting drives, and broad support for Sanitize operations that instruct the drive to wipe all user data even from storage areas that may not be accessible to the host system (ie caches, spare blocks. Any holdouts still preferring hard drives for security reasons are most probably deluded, and certainly are not influencing the storage market in any meaningful way.
When CPU core counts first started growing, storage was still effectively single-threaded: a hard drive can only work on servicing one request at a time (though you can get a small throughput increase by keeping several requests in the queue), and scaling up to arrays of many drives was much more effective at increasing sequential throughput than random IO performance.
With flash-based storage, the SSD now has far more parallelism than your CPU. Having one pending IO operation per CPU core isn't enough to keep your SSDs busy. Having one pending IO per software thread and doing lots of context switches to run more threads than you have cores still won't keep your drives busy, unless you're only doing IO in large chunks. So synchronous, blocking IO APIs are unable to make full use of your storage performance. Optane's low latency doesn't save you from this problem; it just highlights that context switches are also too expensive.
Linux developers have made improvements to specific parts of the IO sub system. These changes will give Linux better IOPS performance.
Prior test are quoted at 3,8 IOPS. They ran the old code on a MD Ryzen Threadripper 3970X at 3,8 IOPS.
Now he got a better / fast CPU AMD Ryzen 9 5950X and it achieves an impressive 5.1M
It seems to me that the new test does not make it clear how much code changes helped and how much a new CPU helped?
Running the old version on the new CPU or the other way around would make it easier to compare?
He's the lead developer of io_uring a new kernel mechanism for doing I/O that is much more effecient for these large IOPS workloads and it itself has been getting lots of optimisation in every recent kernel so it could be both.