2. 性能测试基础:核心指标一览

聊 HSM 性能测试,先得把几个基本概念理清楚。
说白了,就是怎么给 HSM 的 “干活能力” 和 “响应速度” 打分。
我刚开始搞性能测试时,经常把 QPS 和吞吐量搞混,踩过不少坑。今天咱们把这几个核心指标一次说透。

2.1 你到底要测什么?

先抛个问题:你压测 HSM SDK 是为了什么?

  • 是想知道它一秒能处理多少笔签名?
  • 还是看每次加密操作要等多久?
  • 或者说,系统扛不扛得住高并发?

目标不同,看的指标也不同。我个人习惯把性能数据分成四大类:QPS、延迟、吞吐量、资源占用。

HSM 性能指标体系 性能指标体系 QPS(每秒查询) 延迟(Latency) 吞吐量 资源占用 签名 / 加密 / 解密 QPS 平均延迟 / 尾延迟 业务处理量 (MB/s) CPU / 内存 / 会话数 细分指标示例

2.2 QPS — 每秒能处理多少请求?

QPS 是 Query Per Second 的缩写,又叫每秒请求数。
它直接反映 HSM 的处理能力。压测时我会盯着这个数看,它要是上不去,系统扩容也没用。

怎么算?

QPS = 总请求数 / 总耗时(秒)

举个例子,你压测跑了 60 秒,总共发出 12000 次签名请求,处理完了。那 QPS 就是 200。
听起来简单,对吧?但我在项目中遇到过这样的情况:HSM 的 QPS 在低并发时很漂亮,并发一上去就腰斩。为什么会这样?
嗯,这往往跟 SDK 内部的连接池、线程同步、硬件资源争抢有关。

实战提醒: 记录 QPS 时,最好把**并发线程数**和**请求类型**一起记下来。单线程跑 1000 QPS 和多线程跑 1000 QPS,意义完全不同。

2.3 延迟 — 每一次调用等多久?

延迟,就是一次请求从发出到收到回应的时间。
HSM 是密码运算设备,通常要求低延迟。你想想看,一个在线支付接口,如果签名延迟多 200ms,用户体验就很糟糕。

我关注三个延迟指标:

  • 平均延迟(Avg Latency):所有请求延迟加总求平均。好算,但容易被极值带偏。
  • P99 延迟:99% 的请求都能在这个时间内完成。我一般看这个,它能反映最差情况下的体验。
  • 长尾延迟(Max Latency):全量请求中最慢的那个。有些场景(比如金融交易)对这个极其敏感。
指标 含义 建议关注场景
平均延迟 总体响应水平的粗略反映 日常持续监控
P99 延迟 99% 请求的响应上限 性能压测、SLA 验证
最大延迟 系统可能出现的极端慢速 故障定位、安全场景

我记得有一次线上排查,平均延迟只有 5ms,但每隔几十个请求就冒出一个 500ms 的响应。
这属于典型的 “均线骗人”。所以现在我压测时,P99 和 Max 是必记的。

2.4 吞吐量 — 单位时间的总处理量

吞吐量和 QPS 容易弄混。我简单区分一下:

  • QPS:侧重“请求次数”。适合签名、验签这种离散操作。
  • 吞吐量:侧重“数据量”。适合加解密大量数据包、批量操作。

举个例子,HSM 用来做大批量文件加密。这时候用 QPS 衡量意义不大。你应该看每秒处理了多少 MB 的数据。这就是吞吐量。

计算公式:

吞吐量(MB/s) = 总处理数据量(MB) / 总耗时(s)
我的一点经验: 测试吞吐量时,请求的数据包大小要稳定。比如统一用 1KB、10KB、100KB 分别测。有些 SDK 小包吞吐量高,大包直接崩了。这种陷阱我见过不止一次。

2.5 资源占用 — HSM 不吃草怎么干活?

HSM 虽然是专用硬件,但 SDK 跑在应用服务器上,会消耗 CPU 和内存。
如果 SDK 本身占用过高,那调优再好的业务代码也会被拖垮。

必须盯住的三类资源:

  1. CPU 使用率:HSM SDK 内部通常会做加解密运算,还有协议握手。如果 CPU 持续 100%,说明运算瓶颈在业务端。
  2. 内存占用:会话对象、密钥缓存、线程栈。我在项目中就遇到过因为未回收的会话对象导致内存泄漏。
  3. 网络连接数:HSM 通常通过网络连接,连接数满了就会阻塞请求。
曾经踩过的一个坑: 我曾经在做压力测试时,QPS 一直提不上去。查了半天,发现 SDK 内部创建了大量临时线程,把 CPU 吃满了。后来把线程池改成固定大小,QPS 直接翻了一倍。所以资源占用不仅是 “监控指标”,也是 **调优突破口**。

2.6 这些指标之间的关系

你可能会问:这些指标哪个最重要?
说实话,没有唯一答案。在实际压测中,我通常会列一个速查表:

压测阶段 优先关注指标 为什么?
基准测试 QPS、平均延迟 摸清 HSM 的极限能力
稳定性测试 P99 延迟、CPU 使用率 看长时间跑会不会劣化
极限压测 最大延迟、异常处理 发现系统的崩溃点

另外有个全局关系:QPS × 平均延迟 ≠ 1(除非系统是完美管道)。
实际上,延迟越高,QPS 上限就越低。因为每个请求都占着资源时间长,并发能力自然下降。

所以做性能调优时,我一般先找延迟的瓶颈。延迟降下来,QPS 自然就上去了。

2.7 举个实际的测试输出例子

假设你写了一个简单的压测脚本,测试 HSM 签名性能。输出应该长这样:

压测参数:
  并发线程数: 16
  请求总数: 100000
  数据大小: 256 字节

测试结果:
  总耗时: 62.3 秒
  QPS: 1605 次/秒
  平均延迟: 9.86 ms
  P99 延迟: 18.21 ms
  最大延迟: 45.32 ms
  CPU 使用率: 68%
  内存使用: 240 MB

如果你看到这样的结果,心里就有底了。
如果 QPS 低于预期,就去看看 P99 和 CPU 是不是有问题。如果 CPU 高但 QPS 低,说明 SDK 内部有阻塞或同步开销。

一句话总结: QPS 看能力,延迟看体验,吞吐看数据,资源看成本。四个指标一起看,才能真正理解 HSM 的性能行为。