![RAID 6 最高活动时间 >80%,I/O 较小](https://linux22.com/image/669993/RAID%206%20%E6%9C%80%E9%AB%98%E6%B4%BB%E5%8A%A8%E6%97%B6%E9%97%B4%20%3E80%25%EF%BC%8CI%2FO%20%E8%BE%83%E5%B0%8F.png)
我有一个包含 18 个磁盘的 RAID 6。它用于存储小图像(5-500Kb)。它大约有 6TB 的数据。我有一个实用程序,可以将这些图像读取到 RAM,然后通过网络发送。我注意到,在大约 10Mb/s 的 I/OI 下,活动时间大约为 100%。qlen 大约为 18-25,iops 大约为 500-700。是因为有很多小请求吗?我可以改进吗?我注意到它可能会影响使用该存储来满足其需求的其他应用程序。此外,某些文件的响应时间可能会增加到 700-1000ms。
答案1
无法直接回答您的问题,因为驱动器性能有很多“视情况而定”的因素。它很大程度上取决于 IO 类型、IO 大小、缓存、控制器等。
最重要的是,您需要了解读取 IO 与写入 IO 的“成本”差异。
在 RAID 6 上,写入 IO 的成本很高 - 每个 IO 需要 6 次磁盘操作。这意味着您只需将主轴数量除以 6 即可实现持续传输。您可以使用一些技巧来隐藏此问题 - 您可以积极缓存,因为如果您能够进行条带合并,则可以大大减少该问题。如果您写入一块,则每个块需要执行 6 次操作。但是,如果您可以写入完整的条带,则只需写入额外的 2 个块,这样比 RAID 1 更高效。您还可以推迟写入,稍后再将其发送到磁盘 - 导致写入以“缓存速度”完成,直到填满缓存。
另一方面,读取 IO 需要一个操作来服务,但它必须实时完成 - 您不能像写入那样推迟它。这意味着您的读取速度通常会更慢 - 但同样,您可以通过缓存部分缓解这种情况 - 但您必须利用可能的读取模式(例如大型顺序、重新读取常见文件)。
这意味着实际上,基于工作量的理论性能和最佳性能之间存在很大差异,这就是为什么这类问题如此难以回答。
就您的情况而言,您说 IOP 较小。10MB/秒的 IOP 为 500-700,意味着您的 IOP 较小。因此,如果它们是随机模式,您很容易以磁盘的最坏速度运行。要么是因为您的读取 IOP 是随机的,无法缓存,要么是因为您的写入 IOP 是随机的,因此无法合并并完全条带化到磁盘 - 一旦您的写入缓存填满,您的速度就会减慢到“磁盘”速度,这可能会非常慢。(在这种情况下,18 个磁盘为您提供了有效的 3 个主轴 - 但您获得的主轴不止这些)
我思考你会大概控制器与磁盘的比率还可以,但很难说。通常限制因素是旋转锈蚀,因为这通常是系统中最慢的部分。但由于巨大的缓存和有效的缓存算法,我们得到了扭曲的预期。
因此,我建议你需要检查的是——你得到的 IO 比率是多少。(忽略 MB/秒,很明显你甚至还没有接近理论水平)。检查缓存命中率和缓存大小——如果可以的话,看看你的缓存有多满,以及你得到的全条带写入速率是多少(如果你正在做很多写入 IO)。
还要检查磁盘寻道率 - 查看磁头在磁盘上移动的频率 - 再次,密集随机读取模式的缺点之一是您的磁盘会发生抖动。