我们的集群系统目前在 CentOS7 下运行,禁用 SSD 和 NCQ。在大量使用 i/o 的情况下,预计会出现什么样的性能下降?
我不排除一个精确的答案,因为我知道这在很大程度上取决于应用程序、硬件和网络,但只是一个想法会很棒。
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随机读取结果是1261MB/s。