两个概念的关系
并发指应用或主机同时发出、尚未完成的请求数,队列深度指设备侧允许排队的空间。二者配合决定实际压力:如果应用只发一个请求并等结果,无论设备队列多深,机器也只会串行工作,IOPS 上不去;并发提升后设备开始并行处理,吞吐随之上行。但设备处理能力有上限,超出后请求只能在队列里等待,吞吐趋于饱和而时延持续上升。这就是存储性能曲线普遍呈现的形态——初期几乎线性增长,随后拐弯并进入平台期。调优的目标不是把队列填满,而是在业务可接受的时延内取得足够的吞吐。
并发水平与表现
| 并发水平 | 吞吐表现 | 时延表现 | 判断 |
|---|---|---|---|
| 很低 | 远低于设备能力 | 最低 | 能力未释放,接近串行 |
| 逐步提升 | 近线性增长 | 缓慢上升 | 健康区间 |
| 接近饱和 | 增长放缓 | 明显变陡 | 转折点,应按业务时延取舍 |
| 过度 | 几乎不再增长 | 快速恶化 | 排队为主,应限流或扩容 |
基本信息
| 主机侧控制 | 队列深度参数、异步 IO 与线程数、多路径队列配置 |
|---|---|
| 设备侧控制 | 每设备队列下限、队列调度策略与限流策略 |
| 协议差异 | NVMe 队列数与深度远大于传统接口,适合高并发 |
| 机械与闪存差异 | 机械盘并发过高反而降低效率,闪存更耐并发 |
| 调优产物 | 在时延目标下确定最大并发与限流阈值 |
典型使用场景
- 性能测试设计:逐步加压绘制吞吐与时延曲线,找拐点而非只看峰值
- 数据库调优:调整并发连接与异步 IO 数量,避免自我制造排队
- 虚拟化宿主机:多虚拟机共享同一设备,需设定每虚机的队列与限流上限
- 闪存阵列配置:按业务负载设置合理队列深度,避免过度并发拉高时延
- 故障期间的容量保护:部分路径不可用时降低并发以防雪崩
机械盘对并发尤其敏感:并发让磁头频繁换道,吞吐可能不升反降。给机械盘设较小队列并保证顺序访问,通常比一味加大并发更有效。
限流是主动使用队列的工具:在共享存储上为不同业务设置上限,可以防止单一租户的突发把整体时延拉高,代价是该租户自身的峰值受控。