linux - 闪存设备 block 大小限制

标签 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
     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 block 大小下存在一些饱和。似乎有一种硬件限制,闪存不能在一次交易中处理超过 16K 的数据。 (我说得对吗?)谁能更详细地解释一下这种饱和度?谢谢。

最佳答案

为了降低复杂度,闪存被分成给定大小的 block 。执行写入时,必须先删除整个 block ,然后再写入。由于删除会破坏 block 中的所有数据,因此当需要部分写入时,必须将内容读入临时缓冲区,并与新数据、 block 删除和新数据写出。写入整个 block 时,无需读取之前的内容,因此写入速度更快。

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

关于linux - 闪存设备 block 大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25533745/

相关文章:

linux-kernel - 扁平化设备树有什么用 - Linux Kernel

linux - Bash 脚本命令在 '<' 之后不显示

linux - 我们可以 memset 与我们可以 malloc 的大小相同吗?

返回输出前在后台运行的 Python 子进程

linux - 如何在 Linux 中发送 PCIe 读取请求 TLP

linux - 启用 early_printk 后 Printk 行为发生变化

linux - 理论上是否可以实现将 Windows 驱动程序 JIT 编译为 Linux 驱动程序,以绕过复杂的专有 Windows 驱动程序?

c -/usr/local/lib 中的共享库未找到

linux - 如何在没有任何用户配置的情况下启动 shell?

Linux 内核、iptables 和 vmalloc 大小