【问题标题】:Class 4 SDHC vs Class 10 SDHC cards [closed]4 类 SDHC 与 10 类 SDHC 卡 [关闭]
【发布时间】:2017-08-15 12:39:55
【问题描述】:

我一直在开发一些程序,这些程序需要将数据写入/存储到 SDHC 卡上,大小只有几 MB,特别是 Sandisk 4 级 SDHC * Sandisk 10 级 SDHC 16 GB 卡。

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

使用的命令:

我使用dd命令写入数据;类似:

dd if=file_10mb.img of=/dev/sdc conv=f​​sync 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 级卡。

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

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

【问题讨论】:

  • 你是怎么写数据的?在带有cp 的命令行中,还是来自您编写的程序?贴一些代码(这个网站是关于编程的)。
  • 我已经使用dd命令写入数据;类似于:dd if=file_10mb.img of=/dev/sdc conv=f​​sync bs=4096 count=2560
  • bs=4096 通常太小,与 conv=f​​sync 一起使用几乎是犯罪行为。使用更大的块(例如 4 MB)并在最后使用单个同步。
  • 关键是它在每次写入时强制同步,并且鉴于您的写入非常小(4 KB),您的瓶颈很可能不是实际的设备持续吞吐量,而是所有这些的延迟强制同步。最后进行一次同步可确保操作系统和驱动程序缓冲区做自己的事情,并在您写入时尽可能快地为设备提供数据,但仍确保您正在测量实际写入所有文件所需的时间数据。
  • 我能够调查这个问题,并且能够看到“mmcqd”在使用 4 类和 10 类卡时表现不同。当我使用 4 类卡时,kthread 几乎经常占用 CPU 时间。但是在第 10 班的情况下,同样需要比平时更多的时间。因此磁盘 IO 写入速度较慢。还没有弄清楚真正的原因。感谢@Matteo Italia 的投入

标签: linux sd-card


【解决方案1】:

对互联网的简短研究将我带到了这个页面: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个月前,解码器经常抱怨“写入速度慢”,结果很糟糕。几个月以来,一切都很好。我什么都没碰,闪存USB存储器是一样的。也许它进入了它生命的另一个阶段......

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 2012-02-10
    • 2023-03-07
    • 1970-01-01
    • 2013-06-06
    • 2016-07-19
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多