我有从系统收到的写入带宽值,我需要使用 BW 计算写入 IOPS,
Bandwidth = amount of data / second
http://rickardnobel.se/storage-performance-iops-latency-throughput/
根据上面的链接,我观察到以下公式,
Average IO Size * IOPS = Bandwidth
所以如果我的理解是正确的,那么如果我有平均 IO 大小,我将能够计算 IOPS。
例子 :
平均 IO 大小为 4KB,带宽 = 32KB,则
IOPS = Bandwidth / Average IO Size
IOPS = 32KB / 4KB
IOPS = 8
我有两个问题,
1)正确吗?
2)根据定义,似乎平均 IO 大小取决于操作系统和应用程序/服务的运行,那么有人可以详细说明如何获取这个平均 IO 大小吗?这样我就可以获得 IOPS。
答案1
IOPS - 每秒输入/输出操作数
因此,它实际上可能非常非常粗略地估计为
带宽/(平均交易块大小+通信开销)
包含所有校验和和协议封装的有效负载可能会非常巨大,实际的 I/O 事务将在硬件级别进行批处理,从软件角度来看,此类操作是不可见的。
如果我们比较 AHCI 和 PATA 模式,仅额外封装 ATA 命令集就会产生约 2.5 的开销。由于命令队列是同步的,因此无法优化进一步的驱动头移动。某些 AHCI NCQ 优化可能会失败。
如果它是 SSD,那么事情就更加不可预测,因为 SSD 仅存储数据的近似值,这些数据会随着时间的推移而退化,并且您必须预测硬件控制器的 IO 执行计划 - 其中一些可能会失败。
如今测量块设备中的实际 IOPS 变得相当麻烦。因此,如果您的块设备没有某种 IOPS 计数器的硬件实现,那么实际上不可能在软件级别进行测量。
如果我们谈论的是粗略估计 - NVMe 控制器 IOPS 计数精度现在可能约为 +/- 10K IOPS。