飛凌課堂丨OK1046A-C內存交互測試,小白也能看懂

原創 2020-03-04 16:34:00 LS1046A 內存交互測試

筆者最近需要進行OK1046A-C內存部分的測試,linux相關的資料和方法紛雜繁多,但如鼠飲河,自得其量,還是找了如下軟件進行測試,也分享給大家。

01、工具簡介

 Bandwitdh工具簡介  

Bandwidth是一款內存帶寬基準測試程序,通過順序讀寫與隨機讀寫不同大小的數據塊,測試系統的內存帶寬性能。

它提供了一套匯編語言實現的支持庫,用來完成體系結構相關的特定操作,可以測量每個內存系統的最大內存帶寬,包括主內存,L1和L2緩存,framebuffer內存和寄存器的快速,連續的內存訪問。

Bandwidth也包括自動制圖的結果,存儲到一個BMP圖像文件。

 Mbw工具簡介  

Mbw是一個內存帶寬測試工具可以測試在字節拷貝,塊拷貝,整體拷貝三種不同方式下的內存拷貝速度,程序源碼比較簡單,便于理解。

? 獲取方式:git clone http://github.com/raas/mbw 

Memtester工具簡介  

Memtester是一款進行內存壓力測試的工具,通過對兩塊內存里的數據進行一系列的加減乘除亦或位與之類的算法后進行對比,用于檢查是否存在內存移位之類的問題出現

? 獲取方式:wget 點此處獲取>>

memtester的使用很簡單./memtester <memory> [runs]其中<memory>:內存大小,單位M,[runs]:運行次數。

02、編譯方法

 bandwidth來源   

? 下載并解壓bandwidth

源碼路徑:https://zsmith.co/archives/bandwidth-1.5.1.tar.gz

解壓并進入源碼目錄:

tar xvf bandwidth-1.5.1.tar.gz

cd bandwidth-1.5.1/

?  修改makefile文件并進行編譯

Vim Makefile

修改如下:

CC=arm-xxx-gcc -Wall

LD=arm-xxx-gcc

ARM_AS=arm-xxx-as

ARM_CC=arm-xxx-gcc

退出并make bandwidth-rpi32即可得到二進制程序(arm-xxx-gcc為交叉編譯工具)。

 Mbw   

? 下載并進入源碼目錄編譯

git clone 

https://github.com/raas/mbw.git

cd mbw

arm-xxx-gcc mbw.c –o mbw

? 在源碼目錄下得到mbw應用程序。

 Memteser   

? 下載并解壓源碼

wget 點此處獲取>>

tar xvf memtester-4.3.0.tar.gz

cd memtester-4.3.0/

? 修改配置文件:

分別把conf-ld和conf-cc文件中的"cc"(一般在文件首行)替換為“arm-xxx-gcc”

在conf-ld的第一行后面加上 -static

修改文件Makefile,更改 INSTALLPATH = `pwd`/INSTALL

執行make即可編譯成功,在源碼目錄下得到應用程序。

03使用方法和示例

 bandwidth工具的使用   

我們將bandwidth移植到開發板上運行(因OK1046A-C gcc版本過高存在兼容性問題未能編譯成功,此處以其它板卡數據結果做工具介紹,數據不做 OK1046A-C 的參考)./bandwidth –fastest 得出如下圖表:


這部分圖表我們可以得到一些cpu與內存之間互相訪問的數據傳輸和命令交互的性能,以及framebuffer的讀寫速度。

clip_image002.png

上表可見,內存的讀寫速度和順序還是隨機還是有很大關系的,在寫數據時尤為明顯。

其次我們可以觀察到,寫的數據塊的大小會影響讀寫速度,在兩個關鍵點會產生突變(32kb/256kb),這是由于各級cache的不同,進行內存讀寫時,較小的數據塊會存放在cache中,較大的數據塊則會經過cache存放在主存中。

突變的原因就是達到了cache的上限,而轉向了下層存儲。

 mbw工具的使用   

將mbw工具移植到開發板上,并執行./mbw -q -n 3 320

-q 隱藏日志,3 測試次數,64 內存大小(單位是M)結果如下:

我們只需要關注AVG平均值即可。

三種不同的測試方法分別對應的是memcpy(內存拷貝),dump(字符串拷貝),mcblock(內存塊拷貝)。

https://mmbiz.qpic.cn/mmbiz_png/6aVaON9Kibf6rNNoOpEpu2UHw2b0pqkRCGXtHycozFJMElusia6Giar9taX7nGbWwE4kEHM5wsfVKBibxm70xygicPw/640

我們可以看到,OK1046A-C的ddr4d的內存的運行速度是非??斓模賰却婵截惖乃俣冗_到了2GiB/s,甚至于接近我們的服務器的讀寫速度。

 memtester的使用   

? 先運行free –h 得出剩余內存:

https://mmbiz.qpic.cn/mmbiz_png/US10Gcd0tQEwx2fRgwiaw8fia8icdOibMck2hCaiaCkNwGteFjxb2EHvewkgzfEAB9yz6vkbz2AwF6LxyZVdvLsounA/640

? 可以看到,該開發板剩余1.2G可用內存,所以我使用1G內存大小運行內存檢錯程序memtester。

? ./me mtester 1G 3 截圖如下:

https://mmbiz.qpic.cn/mmbiz_png/TN05MmJLxMqhbWI0PTR7PVp5VGQZcyomQGqm9NOibAvmwWicWBCib5zPvibLjtoKNkxEkk7wcLmtG20phiaTvckRVBg/640

如此便是內存運行正常,筆者重復了三天,利用腳本反復調用memtester程序,最終均未發現內存報錯和移位的問題,可見內存穩定性基本達標。

 


 

結語

綜上我們可以看到,OK1046A-C板卡的ddr4內存讀寫速度非???,內存使用也非常穩定,可惜因為版本原因未能測得CPU內存交互的實際速度以及CPU一級二級緩存的使用速度,在后期經過修改后再進行追加。

下一期筆者將針對于OK1046A-C的萬兆網測試和網絡轉換方面,請各位保持關注。

 

相關產品 >

  • FET1046A-C核心板

    4核1.8GHz,原生8網口靈活擴展|LS1046A 系列ARM工控核心板基于 NXP公司的LS1046A高性能64位ARM四核處理器。LS1046A處理器將四個64位ARM Cortex-A72內核與數據包處理加速和高速外設相集成,CoreMark跑分高達45000,LS1046A強大的網絡處理能力和豐富的高速接口,適用于工業路由、邊緣計算網關、IP-PBX等產品,以及邊緣計算、 能源物聯網、智慧城市、工業自動化、視頻監控等應用領域。

    了解詳情
    FET1046A-C核心板
  • OK1046A-C2開發板

    4核1.8GHz,原生8網口,支持萬兆網絡|
    飛凌嵌入式LS1046a ARM工控主板系列LS1046開發板 基于 NXP LS1046A 四核Cortex A72 CPU,強大的萬兆網絡處理能力和豐富的高速接口,CoreMark跑分高達45000。飛凌不僅僅提供了LS1046A開發板套件,還提供了調試心得、LS1046A硬件數據手冊,并根據應用情況發布了 LS1046A 5G CPE 工業網關方案、邊緣計算網關方案,降低了客戶二次開發的難度。更多關于LS1046A的解決方案,產品詳情,您可以登入飛凌嵌入式官網了解。

    了解詳情
    OK1046A-C2開發板

推薦閱讀 換一批 換一批