英創公司針對目前銷售的工控主板,都推出了一些擴展存儲的方案,比如所有型號的板卡都可以通過usb外接存儲器件(U盤、移動硬盤等),還有大部分的主板都可以支持TF卡,所以也可以根據實際需求使用相應大小的TF卡。同時i.MX6系列的主板ESM6800H、ESM6800V、ESM6802和ESM7000系列主板都已經板載了4GB大小的EMMC,而ESM8000和ESM6400系列主板最高支持到了16GB大小的EMMC。根據實際測試,板載的EMMC存儲讀盤速度最高可達78MB/s,寫盤速度最高為29MB/s,而常用的TF卡(SDHC格式,最大32GB)讀盤速度最高約10M/s,寫盤速度最高為4.3MB/s,盡管這些存儲方式已可以滿足大部分常規的應用需求,但對一些對存儲容量、存儲速度有特殊要求的應用,就顯得不夠了。
本文將介紹一種基于英創主板的PCIe接口的高速大容量存儲方案。經過實際的評估和測試,本方案可完全滿足客戶對于存儲大小和速度有特殊要求的應用。目前能夠支持PCIe接口的主板為ESM6802G(ESM6802帶有PCIe接口的版本)、ESM7100、ESM8100以及即將推出的ESM6400主板。主板如下圖所示:
ESM7100 ESM6802G
本方案使用的是符合NVMe規范的M.2接口固態硬盤。M.2接口前身為Next Generation Form Factor (NGFF),是一種計算機內部擴展卡及相關連接器規范,M.2有兩種接口定義:Socket 2和Socket 3。Socket 2支持SATA、PCI-EX2通道的SSD,Socket 3專為高性能存儲設計,支持PCI-EX4,而主板支持的是Socket3類型。NVMe(NVM express)為易失性內存主機控制器接口規范,該規范依托于PCIe總線,比起SATA3的AHCI規范性能有著較大的提升,所以使用主板的PCIe總線配合Socket3類型的M.2接口就能夠和符合NVMe規范的固態硬盤鏈接。
為了方便客戶評估,ESMARC通用評估底板(V9.0及以上版本)上將增加支持NVME協議的M.2接口,用戶可以將固態硬盤直接連上方便的進行測試。固態硬盤的尺寸比較常見的有兩種,寬度都為統一的22mm,長度一種是42mm規格稱為2242,另一種為80mm規格稱為2280,在這次的測試中就選擇了一款三星2280的固態硬盤進行測試。另外,在選擇固態硬盤的時候需要注意,主板支持的M.2的Socket3接口類型都是M-key,有一些固態硬盤是B-key類型的接口,這種類型是不能在英創的板卡上使用的,可以參考下圖:
M key和B key的區別
ESM6802G主板上的PCIe總線為1.0版本,理論最高傳輸速度為250 MB/s,ESM7100主板的PCIe總線為2.0標準,理論最高速度為500MB/s。本次測試選擇ESM6802G作為平臺,而固態硬盤選用了一款128GB大小的SSD,硬件連接非常簡單,如下圖:
固定好后即可進行上電,一旦PCIe總線識別到M.2存儲設備,系統會自動加載驅動模塊,如果沒有自動加載輸入命令modprobe nvme即可。進入系統后可以使用lspci命令查看PCIe總線下的設備,這時在終端應該能看到有固態硬盤的設備信息,同時驅動加載后在/dev目錄下應該會生成相應的設備節點,因為是使用的nvme驅動,所以設備節點會以nvme開頭:
SSD設備信息
如果是新的硬盤沒有分區,只會看到nvme0和nvme0n1兩個設備節點,可以使用fdisk或者sfdisk命令操作nvme0n1設備節點進行分區操作,具體的分區操作可以查詢這兩個命令的詳細使用方法。如果只有一個分區,就會和上圖一樣,多出現一個nvme0n1p1節點,多個分區的話就會有多個設備節點,即nvme0n1pn1~nvme0n1pn。對于存儲容量較大的設備,建議客戶使用ext4格式的文件系統,ext4為日志型的文件系統,在每次文件系統操作的時候都會生成相應的日志,一旦出現實際內容和日志不匹配,就會通過日志內容進行恢復,安全性很高,是目前Linux系統中使用最廣泛的文件系統。格式化ext4文件系統可以使用mkfs.ext4命令,參數為對應的分區設備節點,比如要把上圖中的分區格式化為ext4,輸入命令mkfs.ext4 /dev/ nvme0n1p1即可:
制作ext4分區
文件系統格式制作好之后,可以通過mount命令掛載到需要的目錄下,這樣就能通過訪問這個目錄來訪問主板連接的固態硬盤了,mount會自動識別ext4格式,所以不需要修改文件系統格式,只需要對應的設備節點和掛載目錄即可,以這次的測試為例,把固態硬盤掛載到/mnt/nvme這個目錄下,使用命令mount /dev/nvme0n1p1 /mnt/nvme,掛載好之后,可以使用df –h命令查看空間大小:
掛載SSD
可以看到硬盤總的大小為118GB,這個時候在/mnt/nvme這個目錄中讀取或者寫入文件,就相當于在固態硬盤中讀取和寫入文件了。接下來測試ESM6802G上連接固態硬盤的讀寫速度,使用的測試工具為fio,這是一款專業測試固態硬盤的工具,因為fio的使用較為靈活需要設置的參數較多,這里就不一一介紹了,有興趣的客戶可以查詢fio命令的詳細資料來了解。首先測試讀取速度,設置讀取塊大小為64K,隊列深度為32,測試大小為5GB,采用順序讀取的方式,并且繞過系統緩存,測試結果如下:
測試順序讀
可以看到順序讀的速度為160MB/s,這應該是可達到的最高讀取速度,接下來測試隨機讀取的速度,其他的參數都不改變:
測試隨機讀取
根據上圖的結果,隨機讀取的速度大約為140MB/s,對于隨機讀寫還有個指標iops是比較重要的,這個參數代表了每秒的讀取次數,但是這個參數僅僅是用來衡量硬盤本身的性能,所以在這里就不做參考了。然后是測試寫盤速度,采用順序寫的方式,其他參數不變:
順序寫盤測試
根據上圖結果,順序寫盤的速度大約為165MB/s,這也應該是可達到的最高寫盤速度,最后測試隨機寫的性能,同樣其他參數不變:
隨機寫盤測試
根據上圖結果,隨機寫盤的速度大約為158MB/s。
最后總結一下測試結果,ESM6802G外接NVMe規范的M.2接口固態硬盤讀寫速度如下表:
測試平臺 | 讀寫操作 | 測試文件 | 讀寫方式 | 測試結果 |
ESM6802G | 讀盤 | 5GB | 順序 | 160MB/s |
ESM6802G | 讀盤 | 5GB | 隨機 | 140MB/s |
ESM6802G | 寫盤 | 5GB | 順序 | 165MB/s |
ESM6802G | 寫盤 | 5GB | 隨機 | 158MB/s |
ESM7100 | 讀盤 | 5GB | 順序 | 262MB/s |
ESM7100 | 讀盤 | 5GB | 隨機 | 262MB/s |
ESM7100 | 寫盤 | 5GB | 順序 | 284MB/s |
ESM7100 | 寫盤 | 5GB | 隨機 | 307MB/s |
ESM8100 | 讀盤 | 5GB | 順序 | 239MB/s |
ESM8100 | 讀盤 | 5GB | 隨機 | 238MB/s |
ESM8100 | 寫盤 | 5GB | 順序 | 390MB/s |
ESM8100 | 寫盤 | 5GB | 隨機 | 320MB/s |
ESM6400 | 讀盤 | 5GB | 順序 | 174MB/s |
ESM6400 | 讀盤 | 5GB | 隨機 | 175MB/s |
ESM6400 | 寫盤 | 5GB | 順序 | 185MB/s |
ESM6400 | 寫盤 | 5GB | 隨機 | 159MB/s |
這個結果應該能夠滿足對讀寫速度要求很高的客戶了,并且對于存儲空間也沒有太大的限制,從128GB到1TB的存儲空間都有很多硬盤模塊可以選擇。在體積上采用NVMe規范的硬盤比SATA接口的硬盤要小很多,可以通過固定孔方便的固定在底板上,非常適合作為嵌入式設備,目前我們也已經測試過了一些硬盤,下圖是測試通過的硬盤,供客戶在購買硬盤的時候參考:
有興趣的客戶可以和英創公司的工程師聯系,了解更詳細的情況。
成都英創信息技術有限公司 028-8618 0660