我一直在做一些程序,要求数据被写入/存储到SDHC卡上,很少有MBs的大小,特别是Sandisk类4 SDHC * Sandisk类10 SDHC 16 GB卡。
我观察到的结果似乎更奇怪。4级卡片与10级卡片的书写速度。
使用的命令:
我使用dd命令来编写数据;类似于:
dd if=file_10mb.img of=/dev/sdc conv=fsync bs=4096 count=2560
通过以下方法测量写入速度:
iostat /dev/sdc 1 -m -t
很少有数字:
编写100文件:
在10班卡上: 53秒->Avg。写入速度= 2.03 MB_wrtn/秒 4级卡:31秒->Avg。写入速度=2.62MB_wrtn/秒
编写10文件:
10级卡:5.7秒->Max。& Min.写入速度= 1.85 &1.15MB_修万亿/秒 4级卡:4秒->Max。& Min.写入速度= 2.56 & 1.15 MB_wrtn/秒
我希望这些结果正好相反,因为10级的扑克牌应该优于4级的扑克牌。
我在两张不同的卡片上测试了这些,以消除由于旧卡而产生错误读数的可能性。而且,卡片是相当新的。
请告诉我这种奇怪的行为。提前谢谢。
发布于 2017-03-23 07:29:10
互联网上的一个简短的研究让我来到了这个页面:https://www.raspberrypi.org/forums/viewtopic.php?t=11258&p=123670
它讨论“擦除块”,即“擦除”操作的大小;此擦除块通常大于扇区大小,扇区大小是写入操作的最小大小。在该页上显示了一些示例:
16 GB SanDisk极限临:擦除块大小为4MB。 8 GB超越SDHC150x:擦除块大小为4MB。 2GB超越SD 150 x:擦除块大小8 kB。
现在,传递给dd的fsync选项意味着,每次写入之后,都会对数据和元数据执行同步,这可能涉及重写部分FAT,或者如果不使用FAT,则执行一些其他块。
在一个经典的旋转磁盘上,这意味着磁头每4KB移动一次;在闪存上没有磁头,但是擦除操作非常昂贵。此外,闪存有减少磨损的内部算法,因此很难知道内存卡内部到底发生了什么。
结论是,正如注释中所指出的,4K块大小可能太小,而fsync选项速度减慢,可能会非常麻烦。去掉fsync选项,然后使用不同的块大小再次执行测试。
实际上,可能每一张不同的卡都有一组优选的参数。一种方法10类卡可以工作更快,可以选择一个大擦除块。擦除块的时间或多或少与其大小无关,因此真正大的擦除块有效地提高了速度,同时删除了更多的数据。但是,如果积木经常被擦除,速度反而会降低。
最后的答案,从推论,是你的一组参数似乎更适合4类卡,而不是10类卡。在我看来,你的参数并不适合任何事情,但是没有人能完全确定:闪存卡是复杂的。例如,我经常在我的电视解码器上记录电视传输;有一段时间,事情进展顺利,而其他时段则不然。4个月前,译码器经常抱怨“写得太慢”,结果很糟糕。几个月过去了,一切都很好。我什么也没碰,闪存的USB内存是一样的。可能它进入了另一个生命阶段..。
https://stackoverflow.com/questions/42967919
复制相似问题