为什么 SSD 在队列深度为 32 时的速度比在队列深度为 1 时高 (很多) mb/s?

为什么 SSD 在队列深度为 32 时的速度比在队列深度为 1 时高 (很多) mb/s?

所以基本上在课堂上(在数据库课程期间),我们必须安装并运行 CrystalDiskMark 并分析数字。

我唯一不太明白的是,我的电脑(使用 SSD)在队列深度 32 时的 mb/s 数高于队列深度 1 时的 mb/s 数。

如果我没记错的话,队列深度就是等待处理的任务数量,其中 1 通常代表普通用户,而 32 则更多代表服务器。

在 4Kb 队列深度 1 时,读取速度为 31,74 mb/s,写入速度为 24,13 mb/s。在 4Kb 队列深度 32 时,读取速度为 163,6 mb/s,写入速度为 60,68 mb/s。

对于读取来说,这是 5 倍多,写入则是两倍多。为什么在 32 队列深度下会有那么多 mb/s?我以为在 1 队列深度下会更高

答案1

我认为这个问题实际上没有得到解答,因此这里进行一个简单的尝试。

SSD 在更高的队列深度下速度更快,原因如下:

  1. 它们由多个 Flash 芯片组成。说它们内部是 RAID 0 是过于简单了,但实际上它们有些相似。多个 Flash 芯片可以同时为一个请求队列提供服务。

  2. 闪存速度非常快,因此响应请求和获取新请求之间的延迟是该过程的重要组成部分。对于硬盘来说,与旋转延迟和磁头寻道时间相比,响应/请求延迟微不足道。但对于 SSD,等待时间所占比例要大得多。拥有请求队列会让 SSD 在响应早期工作后有更多工作要做。

答案2

要测试的最常见队列深度是队列深度 1,这是轻消费者工作负载的典型特征,以及队列深度 32,这代表在服务器上可能看到的重工作负载(例如 Web 服务器、数据库服务器等)。SSD 的最佳性能表现取决于驱动器的固件算法。针对高或低队列深度进行优化或反之亦然并不一定是坏事,而是一种设计决策。

来源

因此,如果您测试的驱动器已针对服务器使用进行了优化,则它在更长/更深的队列中的表现可能会/将/应该比具有浅队列的驱动器(如低端台式机驱动器)更好。

还要记住,驱动控制器本身在如何处理 QD 以及一次可以访问队列的深度方面也发挥着作用。

有关队列深度和驱动控制器的更多信息

一个好的驱动器控制器可以确定哪些请求依赖于哪些请求,以及请求的类型。然后,它可以使用此信息来决定将命令传递给驱动器的顺序,从而优化吞吐量。

因此一般来说,排队允许驱动器子系统(操作系统、控制器、驱动器等)确定运行命令的最佳顺序。如果队列深度只有 1,那么它一次只能处理 1 个命令,并且无法进行这些优化。

相关内容