我一直在研究一些需要将数据写入/存储到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级卡。
我已经在两张不同的卡片上测试了这些卡片,以消除由于卡片老化导致读数错误的可能性。此外,卡是相当新的。
请让我知道这种奇怪的行为。提前谢谢。
答案 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内存是一样的。可能它进入了生命的另一个阶段......