查看 Munin 的输出磁盘统计插件(正在读取/proc/diskstats
)我注意到一些对我来说似乎很奇怪的事情。磁盘是 SSD,我认为,无论是磁性还是固态,在大量写入期间延迟都会增加。为什么它反而会减少呢?
答案1
写入是随机的还是流式的?
我假设它们是连续的流式“顺序”写入,因为顺序 i/o 的 i/o 延迟总是较低。随机 i/o 的延迟较高,因为 SSD 在 i/o 突发情况下仍有一定的延迟,缓存效率不高,并且 SSD 上可能存在必须中断的后台垃圾收集,等等。
阅读更多:https://www.seagate.com/tech-insights/lies-damn-lies-and-ssd-benchmark-master-ti/
答案2
在写入频繁时,延迟会增加。为什么它反而会减少呢?
因为您没有重度写入。看起来您的重度写入很大。而在其他时期,您做了很多小事。
瞧,这里缺少的是 IOPS 计数器。IOS 通常更受 IOPS 限制。如果您只执行少量大型 IOPS(复制大型文件),那么这会更有效率,即使对于 SSD 也是如此(替换单元的内容比读取单元、更改一些字节、写入整个单元更快)。
我们需要分析你做了什么,但看起来好像是一个大型 IO 操作掩盖了其余部分。你可能在服务器上关闭了虚拟机?如果不知道当时发生了什么,没人能真正知道。
顺便说一句,对于硬件和 SSD 来说,延迟通常非常高。有了这种吞吐量和 SSD,我预计延迟会远低于 1ms。
我目前只关注一个较小的存储单元,其执行速度约为 1000 IOPS - 不到 1 兆字节,这是运行 40 个左右的空闲 VM 时获得的大量小 io.... 写入在网络上为 1.85 毫秒(!),读取为 5.25 微秒(不是毫秒,而是微秒)。甚至您的最小值也非常高。您的写入通常位于我通过 1 千兆位网络访问 SSD 的区域。
答案3
SSD 在写入方面的行为很奇怪,这可能会导致延迟下降。它们会将数据保存在内部写入缓存中,以保留前几 MB,然后再写入。这意味着前几次写入的延迟会非常短,因为一旦数据到达内部 SRAM,写入就会被确认,但尚未到达闪存介质。然后数据会快速写入介质(通常通过多个通道并行写入多个闪存芯片),然后 SSD 就可以像这样获取另一批数据。如果您的写入在 SSD 上生成了一个大队列,您将看到延迟上升,如果您的写入是短突发,您将会大大减少延迟,因为每个突发都由 SRAM 处理。
答案4
这平均的在你的图表上移动。但要小心平均值的真正含义。延迟的分布几乎肯定存在异常值,不正常,并且多种模式。
尝试获取原始响应时间并将其绘制为热图。可能会有少量异常值,以及平均值稳定在 2 毫秒左右的簇。样本大小(IO 数量)会改变其对平均值的影响程度。
还要注意,根据具体实施,写入速度可能比读取速度快。存储阵列或磁盘驱动器确认非易失性缓存中的写入速度可能比从介质读取的速度更快。