前言
原創文章,轉載引用務必注明鏈接。水平有限,歡迎指正。
本文使用markdown寫成,為獲得更好的閱讀體驗,推薦訪問我的博客原文:
http://www.omoikane.cn/2016/09/15/bbb_adv_settings/
系統環境:Windows 7 Home Pentium x64|Deepin Linux 15.2 x64;Debian 8.5 On BBB Industrial
關於板載eMMC存儲
關於eMMC存儲的基本知識可以看我之前的文章《板載eMMC初探》,總而言之就是:
- eMMC讀寫速度比一般的MicroSD卡快很多
- eMMC有擦寫壽命,難於更換,所以如何延長其使用壽命值得重視
- eMMC|NAND存儲,SLC|MLC|TLC區別
- trim功能
大觸的文章里提到這么一句:
大的這顆鎂光(Micron) IC 是 eMMC ,型號為 MTFC2GMVEA-0M WT ,為了控制成本只給了 2GB ,可以說聊勝於無(還不如多給個 TF 卡槽)。這玩意標稱的速度為連續讀取 30MB/s ,連續寫入 6.6MB/s ,在 2GB 的 MLC NAND 中算是很不錯的了。另外需要注意的是這片 eMMC 的界面版本是 MMC 4.41 ,而在 MMC 4.5 之前 discard 的行為和 ATA 的 TRIM 不一樣,會強制擦除,所以,千萬不要試圖在 Beaglebone 上開 discard / TRIM ,如果開了閃存可能會很快耗盡擦寫壽命。
那么問題來了,我們要確定BBB Industrial板載eMMC存儲的型號,界面版本。
如何確定eMMC型號
一般IC上都有型號碼,直接去廠商官網一搜就行了,比如海力士那種。而Micron鎂光一般只有簡單的標號,好在BBB是開源硬件,有物料清單(Bill of Material, BOM)提供下載,可以很清楚地看到使用型號,然后去鎂光官網搜索。而BBB Industrial暫時沒有提供具體的BOM,但是在其用戶手冊中第55頁提到:
The device used is one of two different devices:
• Micron MTFC4GLDEA 0M WT
• Kingston KE4CN2H5A-A58The package is a 153 ball WFBGA device on both devices.
然而我們仔細看兩者的eMMC IC:
原版BBB是JW896,BBB Industrial是JWA58,從 https://www.elnec.com 查詢可知,前者是WFBGA153,后者是VFBGA153封裝,而MTFC2GMVEA-0M WT(2G)和MTFC4GLDEA 0M WT(4G)都是采用WFBGA153封裝,懷疑是手冊沒有及時更新。
【ELNEC網站】如圖所示,該網站可以查到很多設備的編號規則,例如鎂光結尾WT代表工作溫度-25°C to 85°C,IT代表-40°C to 85°C。
我們在鎂光官網可以查到JWA58的手冊,注意需要注冊micron后才能下載;MTFC2GMVEA-0M系列的手冊
可以清楚地看到JWA58支持eMMC界面4.51版本,JW896僅支持4.41版本。
eMMC界面版本4.4x到4.5x變化很大嗎?!
是的,eMMC 4.5x相比eMMC 4.41而言有很重要的改動:
eMMC 4.5 further defines a "discard" sub-operation that more closely matches ATA TRIM in that the contents of discarded blocks can be considered indeterminate.(wiki)
原版BBB板載JW896 eMMC (2G、4G)的界面版本是4.41,而在MMC 4.5之前discard的行為和ATA的TRIM不一樣,會強制擦除,所以在4.5之前開啟discard/TRIM,閃存可能會很快耗盡擦寫壽命,這也就是為什么大觸講到不要開啟discard / TRIM。
什么是TRIM以及開啟TRIM之后有什么好處?
系統刪除文件的機制是把這個文件標記為已刪除,而不是真的把這個文件從硬盤上抹除。由於閃存(NAND)的文件刪除機制與機械磁盤(Disk)有區別,這對於傳統的硬盤這類使用磁記錄的沒有影響,傳統硬盤可以直接用磁頭覆蓋寫入而不用考慮盤面上已經有了什么記錄。但對於固態硬盤這類使用存儲芯片的就不行了,所以TRIM技術可以在設備空閑時自動抹除記錄,使得寫入數據的時候能直接寫入,而不是等到要寫入的時候再去臨場操作抹除數據,使得長時間使用后寫入速度不會大幅下降。所以我們可以說,TRIM技術保證速度不下跌的真正秘密是:把將來要做的事提前做掉了。但是這件事遲早要做,所以基本不會影響SSD原有的寫入次數(壽命)。
這里提供了一些我搜集來的資料:
—— 鏈接:http://pan.baidu.com/s/1c0QBcas 密碼:dovc ——
內容包括eMMC性能優化指南,eMMC 4.41和4.5差異介紹。
優化eMMC性能
可以參看我之前的文章《優化Guitar性能,延長eMMC壽命》,原理在那邊講過了,不再贅述。
更改系統I/O調度(安全)
I/O調度算法簡單理解就是讀寫順序。試想十字路口在車流量大的時候沒有一個交警,那交通狀況肯定好不了。Linux I/O調度有四種,分別是CFQ(Completely Fair Queuing, 完全公平排隊)、NOOP(電梯式調度程序,最適合NAND存儲設備)、Deadline(截止時間調度程序)、AS(預料I/O調度程序)。通過以下命令可以查看系統支持以及當前所使用的算法:
dmesg | grep scheduler
cat /sys/block/mmcblk0/queue/scheduler
【BBB Industrial I/O支持】可見支持noop、deadline、cfq三種算法,默認cfq。
Debian Jessie使用systemd接管系統啟動,這里我們創建一個服務設置noop為默認模式並開機啟動:
nano /etc/systemd/system/io-scheduler.service # 創建一個系統服務
輸入以下內容:
[Unit]
Description=I/O Scheduler Setter
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c ‘echo noop > /sys/block/mmcblk0/queue/scheduler’
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Ctrl+O保存,Ctrl+X退出。測試並設置開機啟動:
#增加可執行權限
chmod 755 /etc/systemd/system/io-scheduler.service
#設置開機啟動
systemctl enable io-scheduler.service
#啟動服務
systemctl start io-scheduler.service
#查看服務狀態,顯示active (exited)表示啟動成功
systemctl status io-scheduler.service
重啟之后可以看到I/O調度算法已經設置為NOOP。
使用fstrim(安全)
略過,參考原文
延長eMMC壽命
關閉ext4日志功能,禁用時間戳記錄(可選)
這個其實就相當於犧牲突發情況下的安全性換取性能和減少eMMC擦寫,適合搭建Web服務器等情況,前面的文檔也有對比,顯示使用ext4+禁用日志+discard之后,eMMC性能表現非常優秀。
但是我們這里保守一下,不關閉文件系統日志,僅啟用WriteBack模式(參考Armbian Project的寫法):
更改/etc/fstab
文件內容如下:
root@beaglebone:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
UUID=a3d27d61-33ba-475e-a334-4dacedc191a2 / ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
root@beaglebone:~# ls -al /dev/disk/by-uuid/a3d27d61-33ba-475e-a334-4dacedc191a2
lrwxrwxrwx 1 root root 15 Sep 15 21:52 /dev/disk/by-uuid/a3d27d61-33ba-475e-a334-4dacedc191a2 -> ../../mmcblk0p1
root@beaglebone:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 10M 0 10M 0% /dev
tmpfs tmpfs 99M 8.4M 91M 9% /run
/dev/mmcblk0p1 ext4 3.5G 3.2G 165M 96% /
tmpfs tmpfs 247M 4.0K 247M 1% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 247M 0 247M 0% /sys/fs/cgroup
tmpfs tmpfs 50M 0 50M 0% /run/user/1000
后面倆命令指示看一下那個uuid是誰的,果然是掛載為根目錄的mmcblk0p1。
使用RAMlog將系統日志移到內存中(可選)
相信很多人都記得將某些讀寫頻繁的目錄掛載為tmpfs,其實日常使用過程中最頻繁的就是系統日志文件了(注意系統日志和文件系統日志的區別)。我們通過RAMlog將日志文件放到內存里,可以設置定時清理,從而減少eMMC擦寫,具體參考我的又一篇文章使用RAMlog減少eMMC讀寫,延長使用壽命。
總結
使用hdparm -t /dev/mmcblk0
命令可以看到板載eMMC的讀取速度大約30 MB/s,還算理想。之前一直以為BBB Industrial也是使用4.41的eMMC,這次看了一下發現不是那么回事,希望后面Embest能釋出BOM文件。對比一下會發現原版BBB和BBB Industrial之間用料有很多不同,另外e14官方提供的用戶手冊一定要看,還是很有用的。