BeagleBoneBlackIndustrial进阶设置(性能优化以及延长板载eMMC存储寿命)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BeagleBoneBlackIndustrial进阶设置(性能优化以及延长板载
eMMC存储寿命)
前⾔
原创⽂章,转载引⽤务必注明链接。
⽔平有限,欢迎指正。
本⽂使⽤markdown写成,为获得更好的阅读体验,推荐访问我的博客原⽂:
系统环境:Windows 7 Home Pentium x64|Deepin Linux 15.2 x64;Debian 8.5 On BBB Industrial
关于板载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是开源硬件,有提供下载,可以很清楚地看到使⽤型号,然后去搜索。
⽽BBB Industrial暂时没有提供具体的BOM,但是在其第55页提到:
The device used is one of two different devices:
• Micron MTFC4GLDEA 0M WT
• Kingston KE4CN2H5A-A58
The package is a 153 ball WFBGA device on both devices.
然⽽我们仔细看两者的eMMC IC:
【ELNEC⽹站】如图所⽰,该⽹站可以查到很多设备的编号规则,例如镁光结尾WT代表⼯作温度-25°C to 85°C,IT代表-40°C to 85°C。
我们在镁光官⽹可以查到,注意需要注册micron后才能下载;
可以清楚地看到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原有的写⼊次数(寿命)。
这⾥提供了⼀些我搜集来的资料:
内容包括eMMC性能优化指南,eMMC 4.41和4.5差异介绍。
优化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擦写,具体参考我的⼜⼀篇⽂章。
总结
使⽤hdparm -t /dev/mmcblk0命令可以看到板载eMMC的读取速度⼤约30 MB/s,还算理想。
之前⼀直以为BBB Industrial也是使⽤4.41的eMMC,这次看了⼀下发现不是那么回事,希望后⾯Embest能释出BOM⽂件。
对⽐⼀下会发现原版BBB和BBB Industrial之间⽤料有很多不同,另外e14官⽅提供的⽤户⼿册⼀定要看,还是很有⽤的。