Linux Benchmarks Of NVMe SSD Performance With Varying I/O Polling Queues
A Phoronix reader recently pointed out a little known kernel tunable option to adjust the number of I/O polling queues for NVMe solid-state drives that can potentially help improve the performance/latency. Here are some benchmarks from the NVMe poll_queues option.
A Phoronix Premium reader recently requested some benchmark runs with varying I/O polling queues for NVMe SSD storage. The poll_queues option adjusts the number of queues to use for polled I/O with the NVMe driver; the default is currently 0 but some recommendations put the recommended number at one queue per physical CPU core. At least in his experience, he's been tuning his systems with this option and seems to help his I/O performance but was something he hadn't actually benchmarked. Well, here are some tests but the results are a mixed bag.
Details and background information with this NVMe I/O polling testing via this forum thread. Besides Phoronix Premium
I ran some preliminary benchmarks on an Intel Core i9 7980XE workstation with a Samsung 970 EVO 500GB NVMe solid-state drive.
For program start-up time, using multiple I/O queues actually hurt the performance at least for this particular setup.
The SQLite insertion performance was also slightly higher with multiple queues.
Random read performance did help marginally with a higher number of queues.
The sequential read performance on this particular system topped out at four queues.
Sequential write also topped out at four queues.
The higher number of queues did hurt the performance in some of these synthetic benchmarks.
The BlogBench read performance did better with utilizing this tunable but the write performance only became degraded.
The results were quite mixed.
Making use of multiple I/O polling queues did help the LLVM build time by a few seconds.
Overall the results were quite mixed, but depending upon your I/O workload, it may be worth investigating the NVMe poll_queues tunable for enhancing the performance of your Linux system(s).
A Phoronix Premium reader recently requested some benchmark runs with varying I/O polling queues for NVMe SSD storage. The poll_queues option adjusts the number of queues to use for polled I/O with the NVMe driver; the default is currently 0 but some recommendations put the recommended number at one queue per physical CPU core. At least in his experience, he's been tuning his systems with this option and seems to help his I/O performance but was something he hadn't actually benchmarked. Well, here are some tests but the results are a mixed bag.
Details and background information with this NVMe I/O polling testing via this forum thread. Besides Phoronix Premium
I ran some preliminary benchmarks on an Intel Core i9 7980XE workstation with a Samsung 970 EVO 500GB NVMe solid-state drive.
For program start-up time, using multiple I/O queues actually hurt the performance at least for this particular setup.
The SQLite insertion performance was also slightly higher with multiple queues.
Random read performance did help marginally with a higher number of queues.
The sequential read performance on this particular system topped out at four queues.
Sequential write also topped out at four queues.
The higher number of queues did hurt the performance in some of these synthetic benchmarks.
The BlogBench read performance did better with utilizing this tunable but the write performance only became degraded.
The results were quite mixed.
Making use of multiple I/O polling queues did help the LLVM build time by a few seconds.
Overall the results were quite mixed, but depending upon your I/O workload, it may be worth investigating the NVMe poll_queues tunable for enhancing the performance of your Linux system(s).
7 Comments