4级SDHC与10级SDHC卡

时间:2017-03-23 05:27:38

标签: linux sd-card

我一直在研究一些需要将数据写入/存储到SDHC卡上的程序,几个MB大小,Sandisk 4级SDHC * Sandisk 10级SDHC 16 GB卡。

我观察到的结果似乎更奇怪。 4级卡与10级卡的写入速度。

使用的命令:

我用dd命令写了数据;类似的东西:

  

dd if = file_10mb.img = / dev / sdc conv = fsync bs = 4096 count = 2560

通过以下方式测量写入速度:

  

iostat / dev / sdc 1 -m -t

很少数字:

写一个100MB的文件:

  

在10级卡上:53秒 - >平均写入速度= 2.03 MB_wrtn / sec

     

在4级卡上:31秒 - >平均写入速度= 2.62 MB_wrtn / sec

写一个10MB的文件:

  

在10级卡上:5.7秒 - >最大&安培;闵。写入速度= 1.85& 1.15   MB_wrtn /秒

     

在4级卡上:4秒 - >最大&安培;闵。写入速度= 2.56& 1.15   MB_wrtn /秒

我预计这些结果正好相反,因为10级卡应该胜过4级卡。

我已经在两张不同的卡片上测试了这些卡片,以消除由于卡片老化导致读数错误的可能性。此外,卡是相当新的。

请让我知道这种奇怪的行为。提前谢谢。

1 个答案:

答案 0 :(得分:2)

关于互联网的简短研究引导我访问此页面:https://www.raspberrypi.org/forums/viewtopic.php?t=11258&p=123670

讨论"擦除块","擦除"的大小。操作;该擦除块通常大于扇区大小,扇区大小是写操作的最小大小。在该页面上显示了一些示例:

  

16 GB SanDisk Extreme Pro:擦除块大小为4 MB   8 GB Transcend SDHC 150x:擦除块大小为4 MB   2 GB Transcend SD 150x:擦除块大小为8 kB。

现在,传递给dd的fsync个选项意味着每次写入后,都会对数据元数据执行同步,这可能涉及重写部分FAT,或者某些如果没有使用FAT,则为其他块。

在经典的旋转磁盘上,这意味着每个4Kb的磁头行程很多;在闪存上没有磁头,但擦除操作非常昂贵。此外,闪存具有减少磨损的内部算法,因此很难知道存储卡内部真正发生了什么。

结论是,正如评论中所指出的,4K块大小可能太小,并且fsync选项变慢并且可能非常有问题。摆脱fsync选项,并再次执行不同块大小的测试。

实际上,可能每张不同的卡都有一组首选参数。单程10类卡可以更快地工作,可以选择一个大的擦除块。擦除块的时间或多或少与其大小无关,因此通过在同一时间擦除更多数据,真正大的擦除块有效地提高了速度。但是如果过于频繁地删除块,则速度会降低。

最后的答案,从推论来看,你的参数组似乎更适合4级卡而不是10级卡。在我看来,你的参数非常适合任何事情,但没有人可以完全确定:闪存卡是错综复杂的。例如,我经常在电视解码器上录制电视传输;有一段时间事情进展顺利,其他时期没有。 4个月前,解码器经常抱怨写入速度慢#34,效果可怕。几个月以来,一切都很好。我什么都没碰,闪存的USB内存是一样的。可能它进入了生命的另一个阶段......