高通平台实测情况分享(3): UFS读写时延

发布时间:2026/10/9 10:18:32
高通平台实测情况分享(3): UFS读写时延 高通平台实测情况分享的第三篇。上一篇实测了温控cpufreq这篇继续分享实测的另一个指标UFS读写时延。前言存储是最容易测出误导性数字的部件同一块盘走文件系统还是裸设备4K 随机写能差五倍换一个块层调度器随机读掉三分之一再过一层加密又是一截。两台设备跑完最大的收获是不同的测试方法和一份能复用的基线方法。实测的两台设备 UFS 栈同参数、同工具测试• 第五代骁龙8至尊版(SM8850Micron 512GBUFS 4.0。• 高通跃龙IQ-9075 EVKMicron 128GBUFS 3.1。控制器参数从 sysfs 直读性能用同版本 fio 3.36libaio direct测IQ-9075 与 SM8850 另有 dd 交叉验证。我们发现第五代骁龙8至尊版平台SM8850为密闭壳内被动散热IQ-9075 EVK 开放空气加大散热片。同一段压测代码两种散热与功耗策略降频行为表现不同。测完最大的收获不在两代 UFS 的带宽差而是SM8850 上同一块盘文件系统层和裸设备层的 4K 随机写差了五倍顺序读反过来是文件系统层更快IQ-9075 的 ext4 无加密栈不同于骁龙移动平台的 /data 路径。不先弄清楚 IO 经过什么可能就没办法真正理解这些测试数字背后逻辑。这篇把 UFS 参数、IO 路径和测量方法一次讲清楚先了解相关数字是哪条 IO 路径上测出来。1. 控制器与盘体参数项IQ-9075 EVKSM8850盘体Micron MT128GBCAV2U31AIMicron MT512GAYAX4U4001UFS 规范3.10x03104.00x0400容量128GB512GB设备队列深度3264host can_queue / cmd_per_lun31 / 3163 / 31nr_hw_queues19块层调度器默认mq-deadlinemq-deadlineauto_hibern8150000 us5000 us内核6.8.0-1080-qcom6.17 mainlineIQ-9075 同组参数一次读全盘体、spec 0x0310、queue_depth 0x20、can_queue 31、nr_hw_queues 1、mq-deadline、wb_on0SM8850 的盘体与 spec队列与链路在同一屏can_queue 63、nr_hw_queues 9、可选调度器none [mq-deadline] kyber bfq以及空闲时的 HS_GEAR2 / HIBERN8两台同为 ufshcd-qcom 驱动。SM8850 队列深度翻倍硬件队列从 1 个变 9 个多核并发提交 IO 不用抢一把锁。auto_hibern8 两台手机都是 5msIQ-9075 EVK 是 150ms。链路状态power_info显示了内核代际差异IQ-9075 EVK6.8和 SM88506.17都有这个节点。两台都能读到且随负载自动升降档状态IQ-9075SM8850空闲HS_GEAR1 x2HS_GEAR2 x2负载中HS_GEAR4 x2HS_GEAR5 x2均为 FAST_MODE / HS_RATE_B。Gear5 x2 理论带宽约 5.8GB/sGear4 x2 约 2.9GB/s。升降档由控制器自主完成sysfs 只读。IO 路径是两台机器不大相同IQ-9075测试文件在/var/tmp。ext4 直接建在 UFS 分区上无加密层SM8850同样 f2fs → dm-default-key全盘加密inlinecrypt 硬件内联→ sda12挂载参数带background_gconSM8850的 /data 过了加密层和 f2fsIQ-9075 并没有这个差异后面会多次出现在数据里。2. 顺序读写fio 1M 块、direct、QD8、time_based 20s两台设备的参数测试IQ-9075ext4SM8850f2fs加密顺序读1695 MiB/s4062 MiB/s顺序写无 fsync460 MiB/s3577 MiB/s同为 UFS 3.1SK hynix 盘比 Micron 128GB 盘略快读 1895 对 1695两者都在 Gear4 x2 的带宽包络内。SM8850 的 UFS 4.0代际差加上 512GB 大容量 NAND 的并行度优势。IQ-9075 上 dd 复测1M direct读 1.4GB/s、写 481MB/s与 fio 相互印证SM8850 的顺序写数字要说明测试条件3577 MiB/s 是不带 fsync 的持续写数据进了 f2fs 日志缓冲和盘内 DRAM。补一组带end_fsync1的 512MB 写强制落盘后是1299 MiB/s差 2.8 倍。time_based 持续写场景下缓冲会被摊平两台设备都是无 fsync。3. 4K 随机fio 4K、direct、4 线程 x QD32总深度 128、time_based 30s。SM8450 默认调度器是 bfq测试IQ-9075ext4SM8850f2fs加密SM8850裸设备只读随机读146k IOPS89.1k IOPS118k IOPS随机写99.2k IOPS18.7k IOPS未测裸写不安全调度器切到 mq-deadline 后 IO 路径IQ-9075 是 ext4 裸分区SM8850 是 f2fs dm 加密文件系统层 89.1k绕开文件系统直接读裸块设备/dev/block/sda--readonly回到 118k IOPSf2fs 元数据查找加 dm-default-key 加密层吃掉约四分之一性能。随机写两台拉不开差距15.3-18.7k全在 f2fs 的最差路径上。f2fs 是日志结构文件系统4K 随机覆盖写要走新数据追加写、旧段失效、触发 background GC。SM8850 monitor 里写时延最大值 309ms 就是 GC 长尾用 fallocate 预分配 1GB 文件再测排除文件布局阶段也只有 20.3k IOPSGC 的影响坐实。IQ-9075 的 ext4 随机覆盖写是原地更新99.2k 没有这层开销。结论SM8850的 /data 路径上的 4K 随机写数字主要反映 f2fs加密GC 的软件栈不反映控制器能力。存储随机写的能力主要是在软件层。裸设备顺序读还有一组值得记的数据SM8850 裸读 1M QD8 只有 2241-2690 MiB/sQD32 时 2970比文件系统层的 3755-4062 低。4GB 文件复测排除了盘内缓存因素后差异仍在f2fs 的预读和 extent_cache 在大块顺序读上是净收益文件系统层未必比裸设备慢。小块随机和大块顺序f2fs 的开销和收益方向相反。4. 控制器侧时延两台设备都开 UFS monitormonitor_enable重启后需重新使能指标IQ-9075randrw 后SM8850fs 测试后SM8850裸读后读时延均值466 us120 us187 us读时延最大18.4 ms4.1 ms45.7 ms写时延均值279 us258 us—写时延最大56.9 ms309.6 ms—UFS 4.0 盘体的读响应确实快SM8850 文件系统层测试读时延均值 120us两台 UFS 3.1 是 466/583us。写时延均值两台设备接近258-622us。monitor 量的是主机控制器视角的命令完成时间与 fio 应用层 clat含排队量的不是同一段时间SM8850 fio 报的 4K 随机写 clat 均值 6647usmonitor 写均值只有 258usQD128 下排队时间占大头。5. 踩坑分享fio 在SM8850上第一次都跑不起来shmget: Function not implemented设备内核关了 SysV IPCSM8850 的CONFIG_SYSVIPC is not set直接可在 /proc/config.gz 确认fio 默认用 SysV 共享内存段存线程结构。官方 Android 构建用 bionic 的 ashmem 替代路径交叉编译aarch64-linux-gnu-gcc 静态链接走的是 glibc 路径撞上了这个坑。解法是给config-host.h手工加#define CONFIG_NO_SHM 1重编fio 退回 malloc 分配线程段单文件测试场景功能不受影响。adb push的路径以/开头时Git Bash 会把/data/local/tmp转成 Windows 路径导致 push 失败换 PowerShell 调用或加MSYS_NO_PATHCONV1。Android 的 toybox dd 不支持oflagdirect主机 Linux 和 IQ-9075 上的 dd 命令不能原样照搬direct IO 测试统一用 fio。SM88506.17和 IQ-90756.8都有。写自动化采集脚本时这个路径要按内核版本做存在性检查。6. 参数汇总项IQ-9075 EVKSM8850盘体 / 规范Micron 128GB / UFS 3.1Micron 512GB / UFS 4.0链路负载中HS_GEAR4 x2HS_GEAR5 x21M 顺序读 / 写1695 / 460 MiB/s4062 / 3577 MiB/s4K 随机读fs 层146k IOPS89.1k IOPS4K 随机写fs 层99.2k IOPS18.7k IOPSIO 路径ext4 裸分区f2fs dm 加密IQ-9075 的 4K 随机领先是 ext4 裸路径的红利SM8850 的顺序带宽领先是 UFS 4.0 的实力。要评估控制器和盘体本身两台设备需要走同一条 IO 路径要么都裸设备写有分区风险要么都文件系统层接受软件栈噪声不能混着评估。