我的 eMMC 多久没电了?

电器工程 非易失性存储器 数据存储
2022-02-03 07:37:24

我从我们的软件团队得到了一些反馈。显然我们每秒写入 20 个 4KB 块。我有一个 4GB eMMC。eMMC 的最大 P/E 周期数为 3000。

我假设所有 4GB 都可用于写入/擦除。

我开发了一个电子表格来帮助我计算耐力,但它的时间比我预期的要长。

  • eMMC 大小:4GB
  • 使用天数:365
  • 每天小时数:8
  • 最大市盈率:3000
  • 每个周期的块数:20
  • 块大小:4KB
  • 每秒写入次数:1

我通过将每年写入的字节总数除以(eMMC 大小 x 最大 P/E 周期)计算了 14.9 年的耐用性。

我在文件末尾计算耐力。我这样做是对还是错?

3个回答

乐观估计将基于您的系统累积数据直到它可以填满一个完整的擦除块,然后一次性写入所有数据的假设。在这种情况下,您的 eMMC 将继续存在

4'000'000 * 3'000 / (4*20) = 150'000'000 seconds

这大约是 4.75 年。

但是,例如,如果您的系统分别写入每个 4K 块,那么您的 eMMC 将持续的时间将取决于单个擦除块的大小。您必须检查规范的实际值,但举个例子,如果您的 eMMC 有 4M 擦除块,您必须将时间除以 1024(这意味着它将持续大约一两天) .

实际值将介于这两个数字之间,具体取决于您对写入操作的分组方式以及擦除块的实际大小。

除了估计它之外,您还可以要求 eMMC 本身告诉您到目前为止它已经降级了多远(假设它支持 EMMC 5.1 或更高版本)。

JEDEC 标准 (JESD84-B51) 规定,在 ext_csd 字段(偏移量 268-269)中,字节指示 A/B 类型磨损的级别。(值 0x1-0xA 反映 10%-100%,0x0B 表示超过寿命)

例如,在典型的 linux 发行版上,您可以在 bash 中运行以下脚本来告诉您:

RES=`cat /sys/kernel/debug/mmc1/mmc1:0001/ext_csd`
typea="${RES:536:2}" ;
typeb="${RES:538:2}" ;
typead=`echo "ibase=16; $typea"|bc`
typebd=`echo "ibase=16; $typeb"|bc`
echo "Type A percent: $((typead * 10)) %"
echo "Type B percent: $((typebd * 10)) %"

您将在 (4*1024*1024*1024)/(20*4*1024) = 52,428.8 次写入中覆盖总共 4GB。大约 3000 次循环或 3000*52428.8 = 157,286,400 次写入后发生故障。如果您每天工作 8 小时,那么一年内您有 8*365*3600=10,512,000 次写入/年。这就是(157,286,400 次写入)/(10,512,000 次写入/年)= 14.96 年。这仅在您在擦除任何旧文件之前完全填充 eMMC 时才有效 - 如果您边走边擦除,那么您可以在 3000 秒内覆盖相同​​的 20*4k 块。仔细调整存储大小以匹配物理块大小将有助于防止碎片化,这会减少总寿命。在确定保存文件所需的 eMMC 块时,请考虑文件系统开销。
有道理?