從博客有了[瞎弄]這個分類,還沒有能一篇能稱得上[瞎弄]的文章。總該上點干貨了,這回,親自動手換給香蕉派 M3 換板子上的 eMMC。
有給 M3 換eMMC的想法,是因為在不久之前,嘗試在 M3 上面編譯 OpenCV3.0。M3的原配 8G eMMC,安裝完 Debian Jessie 之后,已經占用了 5G 多的空間,再嘗試編譯 OpenCV,編譯到一半,直接提示磁盤空間不足了。無奈之下換成了 16G 的 microSD 卡,雖然編譯過了,但是一直對 SD 卡的性能耿耿于懷,畢竟擺著讀取速度 50MB/s 的速度的 eMMC 不用,卻去用不到 25MB/s 的 SD 卡干嘛。。
0 扯有必要先來扯一下 M3 的 eMMC 接口跟 sd 卡插槽。
先來看看這兩個接口在 Banana Pi M3 (A83T處理器)上的區別 [1]。
[td]接口 | 總線頻率 (最大) | 總線寬度 | DDR模式 | 字節速度 | eMMC | 50 MHz | 8 bits | Yes | 50MB/s | SD | 50 Mhz | 4 bits | Unknown | 25MB/s | 注:以上數據僅僅代表我在M3上的測試結果
其實,這兩個接口在 A83T 上其實沒有區別,使用一樣的控制器,一樣的最大數據線上的時鐘為 50MHz,只是一個是 8 bits 的數據寬度,一個是 4 bits 的數據寬度 (SD卡本身的限制)。所以字節速度,也就是我們說的傳輸速度,一個是50MB/s 一個是25MB/s [2] [3]。
DDR (Double data rate) 是個好東西,與之對應的是SDR (Single data rate?),DDR 可以在時鐘不變的情況下,在時鐘上升沿和下降沿都讀取數據,總線帶寬翻倍(不過好像翻倍的時鐘,用來做上傳和下載用了,所以上傳/下載本身只能實現SDR的速度?)。但是,我嘗試過很多很多卡,都無法實現在 SD 卡槽上開啟 DDR 模式。而在 wiki 里面, 也沒有明確 SD 卡能開啟 DDR 模式[2]。
我推測 A83T 的 SD 卡槽理論上是支持 UHS-1 的SD卡的,即使有時鐘(50MHz)限制,至少也應該能工作在 25MB-4Bits-DDR模式,這樣的話SD接口與板載eMMC的區別,僅在于4bit 跟 8bit的區別了[3]。
總結一下,理論上,在我的 M3 上面,使用 eMMC 接口的情況下,eMMC 上帶寬會是 SD 卡的2倍(以上); eMMC 工作在 50MB-8bits-DDR 模式, SD 卡工作在 25MB-4bit-SDR 模式下。(我有一張坑爹的 32G C10 UHS-1 MicroSD 卡,在 M3 下只能工作在 12MB-4bits-SDR 模式,實際讀取速度只有10 MB/s)
為嘛要換?原因很簡單,板載 eMMC 理論上可以提供至少兩倍于SD卡的讀取性能,(對于12MB-4bits-SDR 模式的sd卡有4倍),可以自由選擇容量(我選了64G的 得意臉.jpg)。
1 準備工作高性能的 eMMC 芯片在手,成不成就看手藝了。
55586918.jpg (52.06 KB, 下載次數: 119)
下載附件
2016-9-8 19:26 上傳
eMMC 型號是 KLM8G1GEAC,我手上的 M3 原裝型號是 KLM8G1WEP。區別類似特斯拉的 S70 跟 P90 的區別。相對SD卡而言,都是極大的升級,而在eMMC內相比,一個是基礎款,一個是高性能大容量版本。
具體比較請看[三殤的宣傳手冊][4]: 區別還是很大的。不過數據看看就好,后面可以看到,在 A83T 上主要瓶頸是 A83T 的接口速度只有 50MHz。
3758214747.png (88.93 KB, 下載次數: 129)
下載附件
2016-9-8 19:26 上傳
先對周圍的電子元件做一些保護,我也是第一次用熱風吹BGA封裝的芯片,并沒有什么經驗,還是做一些盡可能的保護比較好,用的是國內帶過來的高溫膠帶
666778736.jpg (108.1 KB, 下載次數: 112)
下載附件
2016-9-8 19:26 上傳
然后,開始吹。。可是由于散熱太好還是怎么滴,把我的熱風槍吹壞了了(電源過熱啪啪啪地以工頻發出慘叫而且越來越大聲)。再吹下去我的熱風機壞掉了,群里的小伙伴說用煤氣爐。。我沒有煤氣爐,不過我有更方便的電爐!
46200172.jpg (93.89 KB, 下載次數: 118)
下載附件
2016-9-8 19:26 上傳
溫度就不說了額,功率開到一半,只過了1分鐘,鑷子一翹,輕松拿下來了。皂片是趁熱拍的。。
35996753.jpg (39.71 KB, 下載次數: 127)
下載附件
2016-9-8 19:26 上傳
左邊的是64G, 因為里面有8個 NAND 堆疊,所以相對要厚很多[4]。
然后開始上烙鐵,清除掉多余的焊錫。因為芯片自帶錫球,所以焊盤上的焊錫要清理干凈,不然會引起焊錫過多,錫球溢出導致短路啥的。還不小心蹭掉了幾個焊盤。。。還好都是NC焊盤,內部沒有引線鏈接,只是固定用。
3640513024.jpg (103.09 KB, 下載次數: 107)
下載附件
2016-9-8 19:26 上傳
清理完成后,抹上足夠多的助焊劑,放上新的芯片,再次上爐。又是1分鐘左右,熱風槍一吹,感覺芯片自己移動了一點然后用鑷子輕輕推一下,芯片真的自動復位了,說明芯片已經浮在錫球上面!趕緊關火拿下來。等冷卻
2337057195.jpg (113.02 KB, 下載次數: 124)
下載附件
2016-9-8 19:26 上傳
冷卻后,插上SD卡,從SD卡開機,輸出:
3810840188.png (69.61 KB, 下載次數: 115)
下載附件
2016-9-8 19:26 上傳
已經正確識別了 eMMC 接口,可以看到它的工作模式 50MB-8bits-DDR 模式。開心.jpg!
作為對比,這是系統盤(SD卡)本身的開機識別信息:
1530492746.png (30.7 KB, 下載次數: 106)
下載附件
2016-9-8 19:26 上傳
工作模式是 25MB-4bits-SDR (時鐘為 50MHz)
2 對比測試總的來說,略失望,但也感覺還是很值得的。
話說,這顆 eMMC 內部并不是空白的,開機后 Debian 便識別出了里面有引導,有 Windows 的恢復分區。內心各種草泥馬奔騰而過。。后來想想,它的的分區只占了28G,看來是一個還沒初始化過的 eMMC 那么還真可能是新的!誰能解釋下?
777902799.png (87.61 KB, 下載次數: 122)
下載附件
2016-9-8 19:26 上傳
然后,直接寫入原先備份的 16G SD卡鏡像,這里直接驚艷了我一下。。這寫入速度!!大約是我手上SD卡的 5倍!
768506583.jpg (13 KB, 下載次數: 117)
下載附件
2016-9-8 19:26 上傳
然而,這也是唯一驚艷的地方了。以下是詳細對比測試。包括
用 DD 命令在不同塊大小下讀寫測試
用 DD 命令,進行模擬 4k 塊 IO 測試 (讀取4k大小的塊,然后寫入4k大小的塊)
用 hdparm 命令進行讀測試
先看 hdparm 測試結果
使用的命令是:
1
| sudo hdparm -Tt /dev/mmcblk0
|
1138504892.png (10.16 KB, 下載次數: 114)
下載附件
2016-9-8 19:26 上傳
相比起 8G 來說,64G eMMC 略慢一些。但是 8G 和 64G eMMC,都達到了SD卡兩倍有余。
再來看 DD 命令的讀測試:
使用的命令是:
1
| time sudo dd if=/dev/mmcblk1 of=/dev/null bs=512 count=2097152
|
這條命令是指,從eMMC(SD 卡)里面從0扇區開始,以512字節的塊大小,讀取 2097152 個塊。其實總共就是1G Bytes 的數據。通過改變 bs 與 count 的值,我測試了不同塊大小下,讀取 1 GBytes 數據的速度。
1327126848.png (13.17 KB, 下載次數: 125)
下載附件
2016-9-8 19:26 上傳
基本上, eMMC 都達到或者超過(有系統緩沖的原因)了它們在 50MHz 時鐘下的理論速度(50MB/s),SD卡的速度就呵呵噠了。
再來看寫入速度測試:
使用的命令是
1
| time sudo dd if=/dev/zero of=/home/pi/test.dat bs=512 conv=fdatasync count=2097152
|
參數 conv=fdatasync 的意思是,不使用寫入緩沖,數據直接寫入到儲存卡里面。這樣可以測得實際速度。與讀取測試一樣,是在不同的塊大小下寫入1GBytes的數據。
176268501.png (14.11 KB, 下載次數: 121)
下載附件
2016-9-8 19:26 上傳
這回 64G 的優勢終于來了,終于爆發了!老子內部可是八片 NAND 疊出來的!主控再怎么簡化,并行寫入總該會吧?
64G eMMC 速度大約是 SD卡的6倍,8G eMMC的5.5倍。(這是除了容量之外唯一的一個(重量級)亮點了)
接下來看4k性能。
這個測試的來源,是在SSD硬盤,或者說2TB硬盤出來后,產生的[5]。Advance Format 是用4096字節代替以前磁盤以512字節為1塊的,如果操作系統能使用4k塊讀寫,將會有最佳性能,如果操作系統只能識別512字節,使用4k塊硬盤,需要用4k模擬512字節,將會產生很多不必要的寫操作。以上與本測試無關。。
不過SSD都用4k來衡量I/O性能,這個性能更多地會影響在小體積文件上。大家日常復制文件到U盤,會有一些體會,在復制大文件,例如電影,音樂(MB級別的文件)的速度總會比復制一堆文件夾里面的文檔/代碼/游戲等要快很多。其中的原因,便是I/O速度的區別。每復制一個小文件,都需要進行重新尋址,會有更多的讀寫操作,而大文件只需要一直寫入就好。I/O能力比磁盤的連續讀寫能力更影響系統的使用,特別是在程序加載,系統開機的時候,此時讀取的文件大部分都是小體積文件。
3519894170.png (12.75 KB, 下載次數: 129)
下載附件
2016-9-8 19:26 上傳
IOPS 即是每秒的I/O數量。(悄悄告訴你這性能已經超過機械硬盤一大截了,然而被SSD秒殺了[6])
可以看到,64G 的 eMMC 居然還差了一些,不應該啊,我買的可是高性能版本的 eMMC。誰能告訴我為嘛?
用 DD測試 4k IO 性能并不一定準確,因為我沒找到其他這么測試的例子。
最后,附上測試數據
2016-04-12 10:04:44 星期二 更新 硬盤測試工具 iozone 測試結果
測試工具為 iozone 安裝
sudo apt-get install iozone3
使用的測試指令是
iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2
分別在 4k 16k 512k 1024k 16384k 下做讀寫,重寫,隨機讀寫測試 數據的單位是kB/s.
8G 測試結果是 dragan 在論壇帖子里面發布的。關于次測試更新的討論可以看這里。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| 8G emmc test from Dragan ------------------------
random random
kB reclen write rewrite read reread read write
102400 4 4378 2626 5659 7929 8329 5106
102400 16 13302 13674 27495 27399 26636 13430
102400 512 22770 23383 54337 54592 52669 23046
102400 1024 23582 23381 60522 61165 61159 23364
102400 16384 24577 25005 72832 72809 72435 25216
64G emmc test ----------------------------------
random random
kB reclen write rewrite read reread read write
102400 4 5460 5798 9486 8208 8465 4594
102400 16 11906 13318 20516 20600 20284 13203
102400 512 27360 27617 38483 38391 38669 26293
102400 1024 28549 28699 45715 45694 45707 27767
102400 16384 32795 32879 61076 61130 61368 32698
16G SD ------------------------------------------
random random
kB reclen write rewrite read reread read write
102400 4 2111 2222 5653 5474 5297 787
102400 16 4835 5017 11486 11509 10643 1002
102400 512 15067 16210 15754 15805 15930 2081
102400 1024 11400 16488 17742 17774 17786 7059
102400 16384 18805 19184 21013 21042 21077 19062
|
最關鍵的參數為最后兩列,一個是隨機讀,一個是隨機寫。之前只做了dd的順序4k讀寫,這里的隨機讀寫才是比較能模擬實際使用的性能。 可見隨機讀的時候,64G eMMC 跟 8G 是有點差距的,隨機寫和連續寫的地方,64G優勢還是不錯的。不過,都處于比SD卡高很多的級別。
看來連續寫入雖然 SD 卡與8G eMMC 同為 6~8MB/s 的級別,但是隨機寫入和讀取方面的差距還是很大。8G eMMC 和 SD 卡的對比,實際操作時 eMMC 應該也能有比 sd 更好的體驗。
3 結問:換嗎?
我:必須換啊!
原裝 8G eMMC 玩桌面級 linux 實在是不夠,大容量是最大的優勢,大容量帶來的 NAND 疊層帶來了翻7倍的寫入速度十分感人。其他的并無亮點,是因為A83T自身接口的性能限制。但是需要注意的是,無論什么性能,eMMC 相比于 SD 卡都有非常大的提升,畢竟兩倍寬度的數據總線,是硬件上就擁有的優勢。
另外,沒有必要買高性能的 eMMC, 因為除了寫入速度以外,其他的性能瓶頸均為 A83T 接口的限制,與eMMC基礎款本身性能已經超越它了。
|