Linux 闪存设备块大小限制

Linux 闪存设备块大小限制,linux,linux-kernel,linux-device-driver,dd,Linux,Linux Kernel,Linux Device Driver,Dd,我用闪存棒做了一些实验。我玩dd,特别是玩bs选项。以下是我收集的结果: Block size(Kb) Flash write speed(Mb/s) 1 2.5 2 3.1 4 4.4 8 5.0

我用闪存棒做了一些实验。我玩dd,特别是玩bs选项。以下是我收集的结果:

 Block size(Kb)            Flash write speed(Mb/s)
      1                             2.5
      2                             3.1
      4                             4.4
      8                             5.0
     16                            ~6.3
     32                            ~6.3
     64                            ~6.3
在第一列中,您可以找到dd的值。。。bs=。。。选项第二列是闪存写入速度。下面是我使用的dd命令的示例:

dd if=/dev/urandom of=/media/106E99AE6E998D5A/temp oflag=direct bs=32K

因此,从结果中我可以说,在16Kb的块大小下有一些饱和。似乎存在一种硬件限制,flash无法在一次事务中处理超过16K的数据。(我说得对吗?)?谢谢。

为了降低复杂性,闪存被划分为给定大小的块。执行写入操作时,必须擦除整个块,然后将其写入。由于擦除会破坏块中的所有数据,因此当需要部分写入时,必须将内容与新数据、块擦除和新数据一起读入临时缓冲区。写入整个块时,无需读取以前的内容,因此写入速度更快


您正在检查的设备有16kiB块,因此从块边界开始以该大小的精确倍数执行写入操作时,写入速度最快。

这与so无关;属于“当需要部分写入时,必须将内容读入临时缓冲区,并与新数据、块擦除和新数据一起写入”事实上,不是。如果块先前被擦除,然后被半写,则应该可以写入尚未使用的那一半,而无需执行擦除和替换操作。这样做的能力往往是非常适合闪存介质的文件系统的特征,而不是那些不适合闪存介质的文件系统。如果你说的是
mtd
,那么请确定。但是闪存棒使用UMS,这意味着一个转换层(默认情况下是VFAT,但其他面向磁盘的文件系统并没有做得更好)。而且廉价的翻译层不会尝试进行任何优化。