4、UFS抓包基础操作:启动抓包、过滤设置、触发条件、数据保存与导出
UFS抓包不是“点一下开始、点一下停止”这么简单。UFS链路是高速串行双向总线,M-PHY层速率可达HS-G4甚至HS-G5,协议栈上又叠加了UniPro、UFS Transport Protocol和SCSI命令层。如果抓包配置不当,要么抓不到关键帧,要么抓到的数据量巨大到无法分析。本节把抓包操作拆成四个可控环节:启动、过滤、触发、保存导出,并给出可直接落地的参数建议。
一、抓包系统的连接与启动
典型UFS抓包链路是:主机SoC ↔ UFS控制器 ↔ M-PHY链路 ↔ UFS设备。抓包探头(Probe)需要串接在主机与设备之间的M-PHY差分对上,同时接入参考时钟和复位信号。启动抓包前,必须确认三件事:探头供电与参考时钟已锁定、链路已进入可抓取状态、抓包软件已识别到探头。
以常见协议分析仪为例,启动流程如下:
# 1. 检查探头连接状态
analyzer --list-probes
# 输出示例:Probe0 UFS-MPHY 4Lane FW:2.3.1 Status:Ready
# 2. 选择链路速率与Lane数
analyzer --config --probe 0 --rate HS-G4 --lanes 2
# 3. 启动抓包(先于主机上电或复位)
analyzer --start --probe 0 --mode streaming
# 4. 触发主机复位,使UFS链路从UniPro启动阶段开始被记录
host_reset --ufs
二、过滤设置:把噪声挡在缓冲区之外
UFS抓包数据量极大,全量抓取几分钟就可能达到数GB。过滤的目的不是“少抓”,而是“只抓分析所需的最小充分集”。过滤维度通常包括:Lane、方向、协议层、UPIU类型、LUN、命令码、数据长度、错误标志。
下面是一组实用的过滤配置示例:
# 只抓取UFS协议层,屏蔽M-PHY原始符号
filter --layer UFS --exclude PHY_RAW
# 只保留命令、响应和关键描述符访问
filter --upiu CMD,RESP,QUERY_REQ,QUERY_RSP
# 按LUN过滤,只关注启动分区和用户分区
filter --lun 0,1
# 排除轮询和心跳类噪声
filter --exclude NOP_OUT,NOP_IN
# 保留错误与异常
filter --include ERROR,PA_ERROR
过滤条件可以组合,但要注意优先级:先按协议层粗筛,再按UPIU类型细筛,最后按LUN或命令码精筛。如果一开始就设置过细的条件,可能把导致问题的前置命令过滤掉,反而无法还原上下文。
三、触发条件:让抓包在关键时刻停下
触发(Trigger)是抓包中最容易被忽视、却最能提升效率的功能。UFS问题往往发生在特定命令、特定LUN或特定错误之后。触发条件可以理解为“满足条件时冻结缓冲区”或“满足条件时打时间标记”。
常见触发类型包括:
- 命令触发:捕获到指定SCSI命令码,如READ_10、WRITE_10、UNMAP。
- 错误触发:捕获到UPIU响应状态为FAIL、或PA层错误。
- 序列触发:先出现A命令,再出现B命令,才触发。
- 超时触发:某命令发出后超过设定时间未收到响应。
- 位置触发:在缓冲区达到指定百分比时触发,保留触发前历史数据。
推荐使用“预触发+后触发”组合:预触发保留触发点之前的数据,后触发保留触发点之后的数据。例如,设置触发条件为“WRITE_10命令且LUN=0”,预触发50%,后触发50%,这样既能看清写命令下发前的队列状态,也能看到写完成后的响应和后续命令。
四、数据保存与导出:让抓包结果可复用
抓包结束后,数据保存方式直接影响后续分析效率。常见保存格式包括:原生分析仪格式、CSV、PCAP、文本日志。原生格式保留完整时间戳和链路层信息,适合回放;CSV适合导入Excel做统计;PCAP适合用Wireshark等通用工具二次分析。
导出时建议同时保存三份内容:
- 原始抓包文件:保留完整缓冲区,便于回放和重新过滤。
- 过滤后的关键帧列表:只保留命令、响应、错误和描述符访问,便于快速定位。
- 配置快照:记录本次抓包的速率、Lane数、过滤条件和触发条件,便于复现。
# 保存原始抓包
analyzer --save --probe 0 --format native --output ufs_boot_issue.ufs
# 导出关键帧CSV
analyzer --export --input ufs_boot_issue.ufs --format csv \
--fields time,dir,lun,cmd,resp,status,length \
--output ufs_boot_issue_key.csv
# 导出配置快照
analyzer --dump-config --probe 0 --output ufs_capture_config.json
五、常见误区与复盘清单
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 主机上电后才启动抓包 | 丢失Link Startup和UniPro初始化 | 先启动抓包,再复位主机或UFS设备 |
| 过滤条件设置过细 | 丢失前置命令,无法还原上下文 | 先粗筛协议层,再逐步收窄 |
| 不使用触发,全量抓取 | 缓冲区溢出,关键帧被覆盖 | 设置命令/错误触发,配合预触发 |
| 只保存CSV,不保存原始文件 | 无法回放和重新过滤 | 原始文件+CSV+配置快照三份都保存 |
| 忽略参考时钟和Lane配置 | 抓到的数据无法解码或错位 | 抓包前确认速率、Lane数和时钟锁定 |
复盘时,建议按“启动顺序—过滤条件—触发设置—保存格式”四步逐项核对。只要这四步配置正确,后续的UFS命令流分析、性能统计和故障定位才有可靠的数据基础。