linux-kernel - eMMC 随机写入耗时较长
问题描述
我正在分析将 1 MB 写入 eMMC 需要多长时间。它应该在电源故障期间发生,因此时间很关键。
我发现写入可以在 40 毫秒内完成,这很好。
然而随机(几百分之一)它需要超过 200 毫秒,这很糟糕。
为什么会发生这么长的写入时间。是Linux,还是eMMC正在做一些家务。我怀疑 eMMC,但我一直找不到任何关于此的文章。任何参考将不胜感激。
在启动其他任何东西之前,我在我的 init 脚本中运行这个测试脚本,因此该脚本与所有资源都是单独的
dd bs=4096 count=128 if=/dev/zero of=/tmp/e2
t=0
count=0
while [ $t -lt 20 ]
do
t=$(time dd if=/tmp/e2 of=/rootfs/data/test-nvram bs=4M 2>&1)
t=$(echo $t | awk /real/'{print $9}' | tr -d 's.' )
echo $count $t
count=`expr $count + 1`
done
我也尝试直接写入/dev/mmcblk0p1并得到相同的结果,因此文件系统似乎无关紧要。在整个系统上执行 lttng 似乎表明 CPU 正在等待来自 eMMC 的中断。
我的设置是:ARMv7 LS1021A 双核,1GHz
Linux 内核 4.14.34
eMMC:Micron MTFC8GAKAJCN-4M IT
解决方案
推荐阅读
- c# - C#我怎样才能让这个程序运行?数组问题
- java - 可以在 RecursiveTask 中使用 invokeAll 吗?
- transformation - python pandas中从一行到一列的数据
- mysql - 基于另一个查询结果的 MySQL 查询
- kubernetes - Kubernetes API 服务器,提供 pod 日志
- javascript - 使用函数构建 ES6 模板文字
- ios - 如何点击 iPad 对信任弹出窗口?
- javascript - 单击 swal 的确定按钮后退格键不起作用
- android - 通过内存清理器保存数据
- azure - Azure 应用服务:将暂存槽转换为独立应用