我们的集群系统目前在 CentOS7 下运行,禁用了 SSD 和 NCQ。在 I/O 密集型使用场景中,预计会出现什么样的性能下降?
我并不期待一个精确的答案,因为我知道这在很大程度上取决于应用程序、硬件和网络(只要有一个想法就好了)。
答案1
NCQ 是一种让驱动器重新排列读写请求服务顺序的技术。
SSD 可以为您节省硬盘所面临的寻道时间,但实际上读取和写入 NAND 芯片的速度并不是特别快。SSD 通过并行读取和写入多个 NAND 芯片来解决这个问题。
为了实现这一点,SSD 依赖于三种策略:对于大型 IO 请求,将请求拆分到多个芯片上,方法是将其拆分并将部分数据并行写入单独的芯片。对于读取,希望数据也拆分到芯片上,并可以并行读回。
对于小 IO 写入负载,SSD 通常会将大量数据缓存在板载内存中,然后将所有数据并行写入不同的 NAND 芯片。这就是 SSD 能够具有如此高随机写入性能的原因。
对于小 IO 读取或混合工作负载,SSD 将无序地处理命令队列中的请求,以尽量保持尽可能多的 NAND 芯片并行工作。SSD 只有在启用 NCQ 的情况下才能这样做。这在 IO 繁重的工作负载中会产生巨大差异。对于 AHCI,我看到了高达 10 倍的差异,对于 NVMe,差异超过 100 倍。
如果您曾经使用 CrystalDiskMark 或类似基准测试应用程序查看过 SSD 基准测试,您会发现它们通常会提供 4k 随机读取结果,无论是否使用队列深度。如果禁用 NCQ,这两个数字之间的差异很小,而启用 NCQ 后差异很大。例如,这篇 Bit-tech 评论,三星 950 PRO 512GB(NVMe 驱动器)的 QD1 4k 随机读取结果为 60MB/s,但同一驱动器的 QD32 4k 随机读取结果为 1261 MB/s。
答案2
NCQ 用于重新排列排队的读/写操作,以尽量减少磁头寻道,从而最大程度地提高性能。可以找到一个使用机械磁盘和 NCQ 的良好基准测试这里
然而,与普遍看法相反,NCQ 对 SSD 来说更为重要。原因是虽然它们没有磁头,但由于延迟极低,命令排队对于发挥最大性能而言至关重要。
想想看:如果 AHCI 只有一个 32 个条目的队列,那么 NVMe 就有 64k 个队列,每个队列有 64k 个条目。
答案3
NCQ 帮助磁盘重新排列扇区读/写操作以提高速度。目标是减少磁头移动。如果您使用的是 SSD 而不是旋转磁盘,NCQ 的速度优势将不那么明显。