2. UFS基础概念

要做好UFS接口吞吐测试,第一步不是急着跑工具,而是把“被测对象”看清楚。UFS(Universal Flash Storage)并不是简单的“更快的eMMC”,它是一套带命令队列、全双工差分链路和分层协议栈的存储接口体系。吞吐量测试的每一个数字,最终都要落到协议层、物理层和链路层的具体行为上。本节从协议演进、分层架构和吞吐量指标三个角度,建立后续测试工作的概念底座。

一、协议演进:从eMMC到UFS,再到UFS 4.x

UFS由JEDEC制定,核心目标是解决移动与嵌入式设备对高带宽、低功耗、多任务并发的需求。它的演进可以按“代际带宽”和“协议能力”两条线理解。

  • UFS 2.0/2.1:引入HS-G2(High Speed Gear 2),单通道速率约5.8 Gbps,并支持UniPro与M-PHY,奠定分层架构基础。
  • UFS 3.0/3.1:升级到HS-G4,单通道约11.6 Gbps,双通道理论带宽约23.2 Gbps;引入Write Booster、DeepSleep等特性。
  • UFS 4.0/4.1:采用HS-G5,单通道约23.2 Gbps,双通道理论带宽约46.4 Gbps,同时强化能效与多循环队列能力。

需要特别注意的是:理论带宽不等于实测吞吐量。协议开销、链路训练、命令处理、NAND介质本身的速度,都会让实测值低于理论值。测试工程师必须区分“链路能力”和“端到端有效吞吐”。

二、物理层与链路层架构:分层看UFS

UFS采用类似网络协议栈的分层设计,从下到上主要包括:物理层(M-PHY)、链路层(UniPro)、传输层(UTP)、命令层(UCD)以及应用层。每一层都有明确的职责,吞吐测试中出现的瓶颈,往往能定位到某一层。

UFS 分层架构与吞吐路径 Host(应用处理器) 应用层 / 文件系统 UCD 命令层(SCSI命令集) UTP 传输层(UPIU封装) UniPro 链路层(L1/L2/L3/L4) M-PHY 物理层(HS-Gx) UFS Device(存储器件) 应用层 / 逻辑单元 LU UCD 命令层(命令解析) UTP 传输层(UPIU解封装) UniPro 链路层(流控/重传) M-PHY 物理层(HS-Gx) 差分链路 Lane0 / Lane1 TX / RX 全双工 有效吞吐 = 数据量 ÷ 传输时间(受各层开销影响)

从图中可以看到,数据从Host应用层一路向下封装,经过UniPro链路层和M-PHY物理层,再在Device侧逐层解封装。任何一层的流控、重传、命令排队或NAND写入延迟,都会反映到最终吞吐量上。

三、吞吐量定义与关键指标

在UFS测试中,“吞吐量”通常指单位时间内成功传输的有效数据量,常用MB/s或GB/s表示。但实际测试中需要区分多个指标,否则容易得出错误结论。

指标 含义 测试关注点
顺序读吞吐 连续大块读取的有效速率 反映链路与介质顺序读能力,常接近峰值
顺序写吞吐 连续大块写入的有效速率 受Write Booster、SLC缓存和GC影响明显
随机读/写IOPS 每秒完成的随机4K读写次数 反映命令队列深度与并发处理能力
时延(Latency) 单次命令从发出到完成的耗时 关注平均时延与P99尾时延
理论带宽 HS-Gx × Lane数 × 编码效率 仅作上限参考,不能直接当实测目标

核心公式:有效吞吐量 = 传输数据总量 ÷ 实际耗时。测试时必须明确块大小、队列深度、读写比例、是否预热、是否开启Write Booster等条件,否则数据不可比。

四、案例与场景:为什么实测只有理论值的一半

某项目在UFS 3.1平台上测试顺序读,理论双通道HS-G4带宽约23.2 Gbps(约2.9 GB/s),但实测只有约1.4 GB/s。排查后发现:

  1. 测试工具默认队列深度为1,未启用命令队列并发;
  2. 数据块大小为4K,协议开销占比过高;
  3. Host侧驱动未开启高速档位,链路实际运行在HS-G3。

调整队列深度、改用128K大块、确认链路档位后,顺序读吞吐提升到约2.1 GB/s,接近该平台合理水平。这个案例说明:吞吐测试必须同时控制协议参数、链路状态和测试条件。

# 查看UFS链路当前速率档位(示例)
cat /sys/kernel/debug/ufs/health
# 关注字段:
# gear_tx = HS-G4
# gear_rx = HS-G4
# lane_tx = 2
# lane_rx = 2

# 典型吞吐测试命令(fio示例)
fio --name=seq_read --rw=read --bs=128k --iodepth=32 \
    --numjobs=1 --size=2G --filename=/dev/sdb --direct=1

五、常见误区与复盘

误区一:把理论带宽当验收标准。HS-G5双通道理论值约46.4 Gbps,但实际有效吞吐受协议头、流控、NAND速度限制,通常只能达到理论值的60%~80%。

误区二:忽略测试条件一致性。不同块大小、队列深度、预热状态下的数据没有可比性,必须固定测试矩阵。

误区三:只看平均值,不看尾时延。吞吐量达标不代表体验好,P99时延过高会导致卡顿。

复盘时建议建立“链路档位—队列深度—块大小—读写比例—预热状态”五维记录表,每次测试都完整记录,才能让吞吐数据真正可复现、可对比、可定位。