为什么存储的性能在不同的队列深度发生变化?

我正在市场上为我们的服务器进行存储升级。 我正在研究各种PCIe SSD设备的基准testing,并且在比较中我看到IOPS在不同的队列深度发生变化。 这怎么可能,为什么会这样呢? 我理解的方式是:我有一个最大(理论)10k IOPS的设备。 如果我的工作负载持续产生100001 IOPS,那么我的队列深度为1,我是否正确? 然而,从我在基准testing中看到的一些设备在较低的队列深度下运行速度较慢,然后在4-64的深度加速,然后在更大的深度再次减速。 不是队列深度是操作系统(或者可能是存储控制器)的属性,那为什么会影响IOPS?

简而言之,如果有多个IO请求未完成,那么硬驱可以优化数据的检索,这通常会以延迟为代价来提高吞吐量。

NCQ执行此操作,重新排列IO请求以优化吞吐量。

SSD:与机械驱动器的工作方式不同,因为它们具有用于存储数据的并行闪存芯片。 也就是说,如果您一次发出一个IO请求,延迟(search+读取时间)决定了IOPS。 但是,如果一次发出4个请求,ssd磁盘可能能够以并行或其他优化的方式检索它们,您可能会获得4倍的吞吐量。

队列深度越高,获得优化磁盘的可能性就越大。 由于IOPS是吞吐量的函数,因此在更高的队列深度上增加了IOPS。

编辑:

真正的队列驻留在发出所有请求的OS中。 这就是说,我会猜测控制器驱动程序将一定量的队列传递给控制器​​和磁盘,以便它们可以在优化的队列深度工作。 磁盘必须拥有自己的队列才能进行优化。