91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式中如何給內(nèi)存做壓力測(cè)試?

璟琰乀 ? 來(lái)源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2021-04-04 18:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是內(nèi)存讀寫(xiě)正確性壓力測(cè)試程序memtester。

嵌入式系統(tǒng)中,內(nèi)存(RAM)的重要性不言而喻,系統(tǒng)性能及穩(wěn)定性都與內(nèi)存息息相關(guān)。關(guān)于內(nèi)存性能有很多個(gè)不同指標(biāo),其中最基礎(chǔ)的指標(biāo)便是訪問(wèn)可靠性(即讀寫(xiě)的正確性),只有穩(wěn)定可靠的內(nèi)存訪問(wèn)才能確保系統(tǒng)正常運(yùn)行。很多時(shí)候簡(jiǎn)單地內(nèi)存讀寫(xiě)測(cè)試并不能發(fā)現(xiàn)隱藏的問(wèn)題,因此我們需要一個(gè)完備的內(nèi)存訪問(wèn)壓力測(cè)試程序,今天痞子衡就和大家詳細(xì)聊一聊memtester。

一、內(nèi)存性能測(cè)試程序集

在講memtester之前,痞子衡先給大家科普一下Linux系統(tǒng)下常用的內(nèi)存性能測(cè)試工具,它們分別是mbw、memtester、lmbench、sysbench。這幾個(gè)測(cè)試工具(程序)各有側(cè)重點(diǎn):

內(nèi)存帶寬測(cè)試工具 --mbw;內(nèi)存壓力測(cè)試工具 --memtester;內(nèi)存綜合性能測(cè)試工具 --lmbench;內(nèi)存申請(qǐng)與讀寫(xiě)速度測(cè)試工具 --sysbench;

二、memtester程序

memtester是Simon Kirby在1999年編寫(xiě)的測(cè)試程序(v1版),后來(lái)由Charles Cazabon一直維護(hù)更新(v2及之后版本),主要面向Unix-like系統(tǒng),官方主頁(yè)上介紹的是“A userspace utility for testing the memory subsystem for faults.”,其實(shí)就是為了測(cè)試內(nèi)存(主要DDR)的讀寫(xiě)訪問(wèn)可靠性(僅正確性,與速度性能無(wú)關(guān)),這是驗(yàn)證板級(jí)硬件設(shè)備必不可少的一項(xiàng)測(cè)試。

整個(gè)memtester測(cè)試的視角就是從用戶的角度來(lái)看的,從用戶角度設(shè)立不同的測(cè)試場(chǎng)景即測(cè)試用例,然后針對(duì)性地進(jìn)行功能測(cè)試,注意是從系統(tǒng)級(jí)來(lái)測(cè)試,也就是說(shuō)關(guān)注的不單單是內(nèi)存顆粒了,還有系統(tǒng)板級(jí)的連線、IO性能、PCB等等相關(guān)的因素,在這些因素的影響下,內(nèi)存是否還能正常工作。

2.1 獲取程序

memtester程序的最新版本是4.5.0,早期的v1/v2/v3版本目前下載不到了,2012年Charles Cazabon重寫(xiě)了程序并發(fā)布了全新v4.0.0,此后一直不定期更新,v4.x也是當(dāng)前最流行的版本。

核心程序下載:http://pyropus.ca/software/memtester/

核心程序包下載后,在\memtester-4.5.0\下可找到源代碼。詳細(xì)源文件目錄如下:

\memtester-4.5.0 \memtester.h \memtester.c --主程序入口 \sizes.h --關(guān)于系統(tǒng)位數(shù)(32/64bit)的一些定義 \types.h --所用數(shù)據(jù)類型的定義 \tests.h \tests.c --測(cè)試算法子程序

如果是移植到ARM Cortex-M平臺(tái)下裸系統(tǒng)運(yùn)行,一般只需要簡(jiǎn)單修改memtester.c文件即可,其他源文件就是一些頭文件包含方面的改動(dòng),memtester本身并沒(méi)有太多移植工作,其源碼本是用作在Unix-like系統(tǒng)上運(yùn)行的,而在嵌入式系統(tǒng)里運(yùn)行僅需要把一些跟系統(tǒng)平臺(tái)相關(guān)的代碼刪除即可,此外就是打印函數(shù)的實(shí)現(xiàn)。

2.2 配置參數(shù)

memtester源碼里的配置選項(xiàng)主要是如下五個(gè)宏:

/* 如下需用戶自定義 */ULONG_MAX -- 確定系統(tǒng)是32bit還是64bitTEST_NARROW_WRITES -- 確定是否要包含8/16 bit寫(xiě)測(cè)試/* 如下借助linux頭文件 */_SC_VERSION -- posix system版本檢查_(kāi)SC_PAGE_SIZE -- 內(nèi)存page大小獲取MAP_LOCKED -- Linux里mmap里的swap特性

2.3 程序解析

讓我們嘗試分析memtester主函數(shù)入口main,main()函數(shù)最開(kāi)始都是一些輸入?yún)?shù)解析,其實(shí)主要就是為了獲取三個(gè)重要變量:內(nèi)存測(cè)試起始地址、內(nèi)存測(cè)試總長(zhǎng)度、壓力測(cè)試循環(huán)次數(shù),有了這三個(gè)變量值之后便開(kāi)始逐一跑tests.c文件里各項(xiàng)測(cè)試算法小函數(shù):

struct test { char *name; int (*fp)();};struct test tests[] = { { “Random Value”, test_random_value }, { “Compare XOR”, test_xor_comparison }, { “Compare SUB”, test_sub_comparison }, { “Compare MUL”, test_mul_comparison },

{ “Compare DIV”,test_div_comparison }, { “Compare OR”, test_or_comparison }, { “Compare AND”, test_and_comparison }, { “Sequential Increment”, test_seqinc_comparison },

{ “Solid Bits”, test_solidbits_comparison }, { “Block Sequential”, test_blockseq_comparison }, { “Checkerboard”, test_checkerboard_comparison }, { “Bit Spread”, test_bitspread_comparison },

{ “Bit Flip”, test_bitflip_comparison }, { “Walking Ones”, test_walkbits1_comparison }, { “Walking Zeroes”, test_walkbits0_comparison },#ifdef TEST_NARROW_WRITES { “8-bit Writes”, test_8bit_wide_random }, { “16-bit Writes”, test_16bit_wide_random },#endif { NULL, NULL }};/* Function definitions */void usage(char *me) { fprintf(stderr, “\n” “Usage: %s [-p physaddrbase [-d device]] 《mem》[B|K|M|G] [loops]\n”, me); exit(EXIT_FAIL_NONSTARTER);}int main(int argc, char **argv)

{ ul loops, loop, i; size_t bufsize, halflen, count; void volatile *buf, *aligned; ulv *bufa, *bufb; ul testmask = 0; // 省略若干變量定義代碼 printf(“memtester version ” __version__ “ (%d-bit)\n”, UL_LEN); printf(“Copyright (C) 2001-2020 Charles Cazabon.\n”); printf(“Licensed under the GNU General Public License version 2 (only)。\n”); printf(“\n”); // 省略若干初始檢查代碼 // 從輸入?yún)?shù)里獲取physaddrbase計(jì)算出內(nèi)存測(cè)試起始地址

aligned // 從輸入?yún)?shù)里獲取mem及B|K|M|G計(jì)算出內(nèi)存測(cè)試總長(zhǎng)度

bufsize halflen = bufsize / 2; count = halflen / sizeof(ul); bufa = (ulv *) aligned; bufb = (ulv *) ((size_t) aligned + halflen); // 壓力測(cè)試的重要變量, loops即重復(fù)次數(shù) for(loop=1; ((!loops) || loop 《= loops); loop++) { printf(“Loop %lu”, loop); if (loops) { printf(“/%lu”, loops); } printf(“:\n”); printf(“ %-20s: ”, “Stuck Address”); fflush(stdout); // 第一個(gè)測(cè)試

stuck_address if (!test_stuck_address(aligned, bufsize / sizeof(ul))) { printf(“ok\n”); } else { exit_code |= EXIT_FAIL_ADDRESSLINES; } // 遍歷tests.c里的所有測(cè)試子程序 for (i=0;;i++) { if (!tests[i].name) break; if (testmask && (?。ǎ? 《《 i) & testmask))) { continue; } printf(“ %-20s: ”, tests[i].name); // 可以看到將內(nèi)存測(cè)試總空間一分為二,傳給子程序做處理的

if (!tests[i].fp(bufa, bufb, count)) { printf(“ok\n”); } else { exit_code |= EXIT_FAIL_OTHERTEST; } fflush(stdout); /* clear buffer */ memset((void *) buf, 255, wantbytes); } printf(“\n”); fflush(stdout); }}

tests.c文件里才是最核心的壓力測(cè)試算法子程序,一共17個(gè)函數(shù),涉及各種內(nèi)存訪問(wèn)經(jīng)驗(yàn)操作

pIYBAGBZwO6ARHMRAAKGI8SbWWo030.jpg

2.4 結(jié)果格式

在Unix-like系統(tǒng)下使用make && make install命令進(jìn)行編譯可得到一個(gè)可執(zhí)行的memtester,可以隨便執(zhí)行memtester 10M 1,即申請(qǐng)10M的內(nèi)存測(cè)試1次,結(jié)果如下:

[root@as150 ~] memtester 10M 1memtester version 4.5.0 (64-bit)Copyright (C) 2001-2020 Charles Cazabon.Licensed under the GNU General Public License version 2 (only).pagesize is 4096pagesizemask is 0xfffffffffffff000want 10MB (10485760 bytes)got 10MB (10485760 bytes),

trying mlock 。。.locked.Loop 1/1: Stuck Address: ok Random Value: ok Compare XOR: ok Compare SUB: ok Compare MUL: ok Compare DIV: ok Compare OR: ok Compare AND: ok Sequential Increment: ok Solid Bits: ok Block Sequential: ok Checkerboard: ok Bit Spread: ok Bit Flip: ok Walking Ones: ok Walking Zeroes: ok 8-bit Writes: ok 16-bit Writes: okDone.

至此,內(nèi)存讀寫(xiě)正確性壓力測(cè)試程序memtester痞子衡便介紹完畢了,掌聲在哪里~~~

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20470

    瀏覽量

    334419
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    9

    文章

    3212

    瀏覽量

    76389
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式驅(qū)動(dòng)開(kāi)發(fā),需要掌握哪些技能?

    。 4、 熟悉驅(qū)動(dòng)開(kāi)發(fā)常用工具驅(qū)動(dòng)開(kāi)發(fā),會(huì)牽涉到很多軟硬件工具。比如:VS Code、Keil、 J-Link、Git等。 5、 調(diào)試和故障排除嵌入式軟件的測(cè)試和調(diào)試非常重要,需要掌握各種
    發(fā)表于 01-20 16:46

    什么是嵌入式應(yīng)用開(kāi)發(fā)?

    、實(shí)現(xiàn)和部署,還包括硬件選擇、軟件設(shè)計(jì)、測(cè)試、集成和維護(hù)等流程?。 定義和背景 嵌入式應(yīng)用開(kāi)發(fā)是指將軟件部署到嵌入式系統(tǒng),這些系統(tǒng)廣泛應(yīng)用于消費(fèi)電子和工業(yè)自動(dòng)化
    發(fā)表于 01-12 16:13

    嵌入式系統(tǒng),動(dòng)態(tài)分配內(nèi)存可能發(fā)生的問(wèn)題是什么?

    盡管不像非嵌入式計(jì)算機(jī)那么常見(jiàn),嵌入式系統(tǒng)還是有從堆(heap)動(dòng)態(tài)分配內(nèi)存的過(guò)程的。 那么嵌入式系統(tǒng)
    發(fā)表于 12-22 09:42

    C語(yǔ)言單元測(cè)試嵌入式軟件開(kāi)發(fā)的作用及專業(yè)工具的應(yīng)用

    平臺(tái)和操作系統(tǒng)上運(yùn)行,無(wú)需進(jìn)行大量的修改 二、C語(yǔ)言單元測(cè)試嵌入式開(kāi)發(fā)的關(guān)鍵作用 嵌入式系統(tǒng)對(duì)實(shí)時(shí)性和可靠性要求極高,單元測(cè)試是確保代碼
    發(fā)表于 12-18 11:46

    嵌入式應(yīng)掌握的幾種能力

    1. 編程語(yǔ)言 基本掌握嵌入式必備的編程語(yǔ)言。C語(yǔ)言為主,C++為輔。在資源有限的情況下,大多數(shù)嵌入式產(chǎn)品還是使用C語(yǔ)言為主的,特別是底層驅(qū)動(dòng)開(kāi)發(fā)。上層應(yīng)用開(kāi)發(fā)大多用C,在一些資源比較充足的平臺(tái)
    發(fā)表于 12-08 06:05

    醫(yī)療嵌入式軟件研發(fā)以后好跳槽嗎?

    醫(yī)療嵌入式軟件研發(fā),以后想跳槽一點(diǎn)兒也不難。別看醫(yī)療行業(yè)門(mén)檻高、規(guī)矩多,你手里攢下的那套本事,到哪兒都吃得開(kāi)。嵌入式這東西,甭管在哪個(gè)行當(dāng)里折騰,說(shuō)到底六個(gè)基本部分跑不掉:嵌入式C、
    的頭像 發(fā)表于 12-03 11:04 ?740次閱讀
    <b class='flag-5'>做</b>醫(yī)療<b class='flag-5'>嵌入式</b>軟件研發(fā)以后好跳槽嗎?

    嵌入式開(kāi)發(fā)的關(guān)鍵點(diǎn)介紹

    嵌入式開(kāi)發(fā)在現(xiàn)代科技扮演著非常重要的角色。隨著物聯(lián)網(wǎng)的發(fā)展,嵌入式系統(tǒng)的需求也越來(lái)越大。嵌入式開(kāi)發(fā)不僅需要開(kāi)發(fā)人員具備深入的硬件知識(shí)和編程經(jīng)驗(yàn),還需要不斷學(xué)習(xí)新的技術(shù)和工具,以滿足不
    發(fā)表于 11-13 08:12

    嵌入式C/C++回歸測(cè)試四大最佳實(shí)踐(附自動(dòng)化測(cè)試工具TESSY使用教程)

    嵌入式開(kāi)發(fā),一次微小的代碼改動(dòng)都可能引發(fā)“蝴蝶效應(yīng)”,如何守護(hù)系統(tǒng)的穩(wěn)???推薦專業(yè)的自動(dòng)化測(cè)試工具#TESSY,源自戴姆勒-奔馳,是嵌入式C/C++單元/集成
    的頭像 發(fā)表于 10-31 14:21 ?422次閱讀
    <b class='flag-5'>嵌入式</b>C/C++回歸<b class='flag-5'>測(cè)試</b>四大最佳實(shí)踐(附自動(dòng)化<b class='flag-5'>測(cè)試</b>工具TESSY使用教程)

    嵌入式軟件測(cè)試與專業(yè)測(cè)試工具的必要性深度解析

    性能的要求尤為苛刻。 ?資源高度受限?:嵌入式系統(tǒng)通常在有限的內(nèi)存、存儲(chǔ)空間和處理能力下運(yùn)行,測(cè)試需關(guān)注內(nèi)存管理、算法效率等資源優(yōu)化問(wèn)題。內(nèi)存
    發(fā)表于 09-28 17:42

    嵌入式達(dá)到什么水平才能就業(yè)?

    工具定位問(wèn)題具備嵌入式軟件模塊化設(shè)計(jì)能力:能按功能劃分代碼模塊,編寫(xiě)規(guī)范的頭文件與源文件,實(shí)現(xiàn)模塊間低耦合調(diào)用會(huì)使用Git 進(jìn)行版本管理:能提交代碼、解決沖突、回滾版本,熟悉敏捷開(kāi)發(fā)流程需求拆解與任務(wù)分配邏輯
    發(fā)表于 09-15 10:20

    油介質(zhì)損耗及電阻率測(cè)試儀的嵌入式系統(tǒng)架構(gòu)與抗干擾設(shè)計(jì)

    油介質(zhì)損耗及電阻率測(cè)試儀的精準(zhǔn)檢測(cè)能力,不僅依賴于核心的電氣測(cè)量模塊與溫控系統(tǒng),更離不開(kāi)穩(wěn)定可靠的嵌入式系統(tǒng)作為“中樞神經(jīng)”。嵌入式系統(tǒng)承擔(dān)著數(shù)據(jù)采集、運(yùn)算處理等核心功能,其架構(gòu)設(shè)計(jì)與抗干擾設(shè)計(jì)共同
    的頭像 發(fā)表于 09-02 13:57 ?562次閱讀
    油介質(zhì)損耗及電阻率<b class='flag-5'>測(cè)試</b>儀的<b class='flag-5'>嵌入式</b>系統(tǒng)架構(gòu)與抗干擾設(shè)計(jì)

    如何在嵌入式RF測(cè)試實(shí)施多域信號(hào)分析

    射頻(RF)測(cè)試嵌入式系統(tǒng)開(kāi)發(fā)與驗(yàn)證的關(guān)鍵環(huán)節(jié),尤其是在電信、航空航天、汽車(chē)以及物聯(lián)網(wǎng)等行業(yè)。隨著嵌入式系統(tǒng)的日益復(fù)雜,傳統(tǒng)RF測(cè)試方法
    的頭像 發(fā)表于 08-15 16:32 ?2880次閱讀
    如何在<b class='flag-5'>嵌入式</b>RF<b class='flag-5'>測(cè)試</b><b class='flag-5'>中</b>實(shí)施多域信號(hào)分析

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    :使用Linux操作系統(tǒng),可以運(yùn)行各種復(fù)雜的應(yīng)用程序和驅(qū)動(dòng)程序。 4. 資源需求 : 單片機(jī)嵌入式 :對(duì)硬件資源的需求較低,通常只需要一個(gè)單片機(jī)芯片,內(nèi)存和存儲(chǔ)空間較小。 Linux嵌入式 :對(duì)硬件資源的需求
    發(fā)表于 06-20 09:46

    嵌入式軟件單元測(cè)試的必要性、核心方法及工具深度解析

    一、為什么嵌入式軟件必須重視單元測(cè)試? ?嵌入式系統(tǒng)的特殊性? 在汽車(chē) ECU、醫(yī)療設(shè)備控制器等場(chǎng)景,軟件直接操控硬件,?單比特錯(cuò)誤可能導(dǎo)致剎車(chē)失靈或呼吸機(jī)故障?。不同于 PC?軟件
    的頭像 發(fā)表于 03-21 14:53 ?1445次閱讀

    Python在嵌入式系統(tǒng)的應(yīng)用場(chǎng)景

    你想把你的職業(yè)生涯提升到一個(gè)新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開(kāi)發(fā)更多地依賴于C和C++語(yǔ)言,Python的優(yōu)勢(shì)在于其簡(jiǎn)潔的語(yǔ)法、豐富的庫(kù)和快速的開(kāi)發(fā)周期,這使得它在某些嵌入式場(chǎng)景
    的頭像 發(fā)表于 03-19 14:10 ?1513次閱讀