2019年11月2日 星期六

Memory Technology Device

MTD (Memory Technology Device) 是指各種 raw flash,如 NAND, NOR 等。

Linux MTD (Memory Technology Device) 子系統設計用來直接使用記憶體晶片,特別是有 erase-block 的 NAND flash 晶片 (raw flash),寫入之前需要先抹除。erase-block 大小 64 KiB、128 KiB、或更大,有抹除次數限制,一般 NOR Flash 或 SLC NAND Flash 約 100K-1G 次,MLC NAND Flash 約 1K-10K 次,需要 wear-leveling 打散到不同的 erase-block 來延長壽命,適用的檔案系統有 JFFS2YAFFSUBIFS 等。MTD 軟體也可以通用在 block 裝置或 RAM,只是不做抹除動作。

比較:block 裝置是傳統硬碟的存取方式,以 512-byte 或 4096-byte 的 block (或稱 sector) 為單位,直接寫入不需要先抹除。block 裝置和 MTD 裝置的分割方式和適用的檔案系統不同。block 裝置分割資訊存在 MBRGPT。Linux 將 數個 sector 合為 page,一般為 4096 bytes,跟 file system 及 buffer cache 的設計有關。適用的檔案系統有 ext2、ext3、等。

Flash 晶片可透過 FTL (Flash Translation Layer) 管理晶片變成 block 裝置,稱為 managed flash,包括 USB flash、SD/MMC card、SSD 等,但裡面的 flash 晶片仍有壞 erase-block 問題,雖然管理晶片會替換壞 erase-block,不適合非常頻繁的寫入。

MTD 附有 FTL 功能轉換成 block 裝置 -- mtdblock,使用傳統 block 檔案系統 ext2, ext3 等,但效能會變差,突然斷電也會有問題。使用 mtdblock_ro 倒是合理的。block 裝置可透過 block2mtd 轉成 MTD 裝置,一樣可能有效能問題。

raw flash 有 NOR 和 NAND 兩種。NOR flash 容量較小,直接定址每個 word 可以隨機存取,約 100K-1G 抹除次數。NAND flash 容量大,儲存空間是切成 erase-block,為減少所需要的位址線再切成更小的 page (大多 512-byte) 作為存取單位,需要處理壞 erase-block。SPI Flash 通常也是 raw flash,只是做成序列界面。


抹除存取單位
硬碟不需要block
managed flash管理晶片自動處理block
NOR flashMTD 軟體word
NAND flashMTD 軟體page
RAM不需要word


隨時都有可能沒經過 shutdown 程序而直接斷電,仍需要維持資料一致。一般檔案系統都設計用於有 buffer cache 的環境。

MTD 裝置的分割以 erase block 為集合,不用 MBR/GPT,使用 MTD 特定的方法決定位置和大小,開機時可 discovering。

MTD 裝置不能 loop

  • erase NAND flash 的 MTD 分割。使用 flash_erase (erase one eraseblock) 或 flash_eraseall。如果分割用 JFFS2 檔案系統,建議用選項 -j 或 --jffs2,會將「clean-marker」寫到 out of band area,掛載時不需要 further 格式化。This is also necessary before you copy a filesystem image to the chip.

參考
  1. https://openwrt.org/docs/techref/flash.layout
  2. http://events17.linuxfoundation.org/sites/events/files/slides/An%20Introduction%20to%20SPI-NOR%20Subsystem%20-%20v3_0.pdf
  3. cat /proc/mtd
  4. ls -l /dev
  • 目前企業型的 SSD 都是 TLC 了,基本上也可以有 MLC 的耐用度,甚至更好,QLC 跟 PLC 比較慘一點,PLC 的寫入速度還可以比硬碟慢了。高速大容量的話至少需要 TLC,如果需要高耐用度的話還是 MLC,長期資料保存的話就是 SLC,QLC 跟 PLC 基本上寫速入速度跟硬碟不相上下甚至更慢。

•Provides char(/dev/mtdX) and block(/dev/mtdblockX) device support

•Abstracts flash specific properties like sector, page and ECC handling

•Wear and bad block handling using UBI

•Handles partitioning of flash storage space

•/proc/mtdlists all devices

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...