NVMe 存储磁盘压力综合评分方法

276 阅读3分钟

概览

之前有一个错误观点,认为 util 达到 100% 磁盘就已经完全繁忙了,其实并不是。 机械硬盘时代(比如15000转的盘),在物理层面是串行的,一个时间只能干一个活。虽然有各种级别的 concurrency ,但并不是真正的并行。SSD, RAID 则不同。他们可以真正在物理层面上并行执行多个IO。可以同时物理执行多个IO。
util 有一个简单的算法:

concurrency = (r/s + w/s) * (svctm / 1000)  
util = concurrency * 100%

然而这个 concurrency 是个伪命题,因为 svctm 也是通过计算而来的,无论怎样请求,算出来的 concurrency 都是 1 左右,那么自然 util 出来就是100%。

基于此问题,本模型以 延迟(Latency)优先,结合 IOPS、带宽、队列深度、使用率与 SMART 健康信息,构建一个可量化、分级的“磁盘压力得分”(Disk Pressure Score)。

  • 归一化:将各指标映射到 [0,1] 区间;
  • 加权合成:对各归一化指标赋予权重,合成基础分数;
  • SMART 风险调整:对介质健康与温度等 SMART 子指标映射为附加分;
  • 分级告警:将最终得分映射至 “低/中/高/超压” 四档。

第一步:指标归一化

归一化必要性

我们要解决统一评分模型的两个问题:

  • 不同指标(延迟 ms、带宽 MB/s、使用率 %)需在同一刻度下比较;
  • 映射后可线性组合,简化计算;

而归一化算法提供给我们统一量纲易于加权的两大优势,这样就能直接用起来。

归一化公式逻辑

将各指标统一映射到 [0,1],这里我们采用 Min–Max 饱和变体:

fx=min ⁣(xxmax,1)f_x = \min\!\Bigl(\frac{x}{x_{\max}},\,1\Bigr)

采用饱和变体的原因是:

fx={xxmax,0xxmax(线性区间)1,x>xmax(饱和保护)f_x = \begin{cases} \dfrac{x}{x_{\max}}, & 0 \le x \le x_{\max} \quad\text{(线性区间)}\\[8pt] 1, & x > x_{\max} \quad\text{(饱和保护)} \end{cases}
  1. 在线性区间内:压力与指标值成正比。
  2. 可以提供饱和保护:避免极端值放大影响。
  3. 计算高效:仅需除法与最小值运算,适合秒级更新

指标归一化方法

将各项原始指标映射到区间 [0,1],记作 f_x,数值越大表示压力越高。

原始指标归一化公式说明
延迟 Lf_L = min(L / L_ref, 1)以参考延迟 L_ref(如 1 ms)为分母。
IOPS If_I = min(I / I_max, 1)I_max 可取设备峰值或 SLA 要求。
吞吐量 B (MB/s)f_B = min(B / B_max, 1)B_max 参考厂商规格或总线带宽上限。
队列深度 Qf_Q = min(Q / Q_max, 1)Q_max 可取 NVMe 最大队列深度。
使用率 U (%)f_U = U / 100高于 90% 时风险较大。

第二步:基础压力得分计算

采用线性加权模型将各归一化指标合成为基础压力得分 Score_base

Scorebase=100(αfL+βfI+γfB+δfQ+ϵfU)Score_{\mathrm{base}} = 100 \bigl( \alpha\,f_L + \beta\,f_I + \gamma\,f_B + \delta\,f_Q + \epsilon\,f_U \bigr)

其中权重满足 α+β+γ+δ+ϵ=1\alpha+\beta+\gamma+\delta+\epsilon=1

权重示例

  • 延迟:α=0.4\alpha=0.4
  • IOPS:β=0.2\beta=0.2
  • 吞吐量:γ=0.2\gamma=0.2
  • 队列:δ=0.1\delta=0.1
  • 使用率:ϵ=0.1\epsilon=0.1

第三步:SMART 健康风险调整

SMART 子项反映磁盘健康。定义两个风险因子并映射为附加分 A

  1. 剩余寿命风险

    flife=1R100,f_{\mathrm{life}} = 1 - \frac{R}{100},

    其中 RR(unit:%) 为剩余介质寿命。

  2. 温度风险

    ftemp=max ⁣(TTsafeTcritTsafe,0),f_{\mathrm{temp}} = \max\!\Bigl(\frac{T - T_{\mathrm{safe}}}{T_{\mathrm{crit}} - T_{\mathrm{safe}}}, 0\Bigr),

    TsafeT_{\mathrm{safe}} 为安全温度(如 70 °C)、TcritT_{\mathrm{crit}} 为临界温度(如 80 °C)。

附加分:

A=wlifeflife+wtempftemp,A = w_{\mathrm{life}}\,f_{\mathrm{life}} + w_{\mathrm{temp}}\,f_{\mathrm{temp}},

例如 wlife=20w_{\mathrm{life}}=20wtemp=10w_{\mathrm{temp}}=10

最终总得分:

Scoretotal=min(Scorebase+A,  100).Score_{\mathrm{total}} = \min\bigl(Score_{base} + A,\;100\bigr).

第四步:压力分级与告警

分值区间级别建议动作
0–30低压正常,持续秒级监控
30–60中压关注趋势,检查指标波动
60–80高压优化/扩容,检查热点
80–100超压紧急,SMART 告警,迁移或降载

实时应用与优化建议

  1. EWMA 平滑

  2. 读写分离 分别计算读写延迟归一化,再按比例加权。

  3. 阈值自适应 定期调整 Imax,Bmax,LrefI_{\max},B_{\max},L_{\rm ref},实现模型自校准。

  4. 多维告警 除综合得分外,单独监控延迟、温度阈值,保证极端情况不遗漏。

参考&引用