在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

璟琰乀 ? 來源:痞子衡嵌入式 ? 作者:痞子衡嵌入式 ? 2021-04-04 18:20 ? 次閱讀

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是內(nèi)存讀寫正確性壓力測試程序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)定可靠的內(nèi)存訪問才能確保系統(tǒng)正常運(yùn)行。很多時(shí)候簡單地內(nèi)存讀寫測試并不能發(fā)現(xiàn)隱藏的問題,因此我們需要一個(gè)完備的內(nèi)存訪問壓力測試程序,今天痞子衡就和大家詳細(xì)聊一聊memtester。

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

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

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

二、memtester程序

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

整個(gè)memtester測試的視角就是從用戶的角度來看的,從用戶角度設(shè)立不同的測試場景即測試用例,然后針對(duì)性地進(jìn)行功能測試,注意是從系統(tǒng)級(jí)來測試,也就是說關(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重寫了程序并發(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 --測試算法子程序

如果是移植到ARM Cortex-M平臺(tái)下裸系統(tǒng)運(yùn)行,一般只需要簡單修改memtester.c文件即可,其他源文件就是一些頭文件包含方面的改動(dòng),memtester本身并沒有太多移植工作,其源碼本是用作在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寫測試/* 如下借助linux頭文件 */_SC_VERSION -- posix system版本檢查_SC_PAGE_SIZE -- 內(nèi)存page大小獲取MAP_LOCKED -- Linux里mmap里的swap特性

2.3 程序解析

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

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

bufsize halflen = bufsize / 2; count = halflen / sizeof(ul); bufa = (ulv *) aligned; bufb = (ulv *) ((size_t) aligned + halflen); // 壓力測試的重要變量, 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è)測試

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

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文件里才是最核心的壓力測試算法子程序,一共17個(gè)函數(shù),涉及各種內(nèi)存訪問經(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)存測試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)存讀寫正確性壓力測試程序memtester痞子衡便介紹完畢了,掌聲在哪里~~~

責(zé)任編輯:haq

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

    關(guān)注

    5096

    文章

    19227

    瀏覽量

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

    關(guān)注

    8

    文章

    3074

    瀏覽量

    74460
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何提高嵌入式代碼質(zhì)量?

    有著明顯的區(qū)別,主要體現(xiàn)在以下幾個(gè)方面: 1. 資源受限:嵌入式系統(tǒng)通常具有有限的內(nèi)存和處理能力,因此代碼效率和內(nèi)存占用是關(guān)鍵考量因素。 2. 實(shí)時(shí)性要求:某些嵌入式系統(tǒng)需要實(shí)時(shí)響應(yīng),
    發(fā)表于 01-15 10:48

    嵌入式主板的概述與發(fā)展

    隨著科技的迅猛發(fā)展,嵌入式系統(tǒng)在現(xiàn)代電子產(chǎn)品扮演著越來越重要的角色。嵌入式主板作為嵌入式系統(tǒng)的核心組件之一,承擔(dān)著控制、處理和通訊等多種功能。本文將對(duì)
    的頭像 發(fā)表于 01-13 16:30 ?386次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發(fā)展

    新手怎么學(xué)嵌入式?

    嵌入式系統(tǒng)的發(fā)展,嵌入式操作系統(tǒng)也變得越來越重要。學(xué)習(xí)嵌入式操作系統(tǒng)可以幫助你更好地管理嵌入式系統(tǒng)的資源和任務(wù)。了解操作系統(tǒng)的任務(wù)調(diào)度、
    發(fā)表于 12-12 10:51

    嵌入式系統(tǒng)開發(fā)測試方法 嵌入式系統(tǒng)開發(fā)與AI結(jié)合應(yīng)用

    嵌入式系統(tǒng)開發(fā)測試方法 嵌入式系統(tǒng)開發(fā)是一個(gè)復(fù)雜的過程,涉及到硬件和軟件的緊密結(jié)合。測試是確保系統(tǒng)可靠性和性能的關(guān)鍵步驟。以下是一些常用
    的頭像 發(fā)表于 12-09 10:22 ?632次閱讀

    嵌入式系統(tǒng)開發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)開發(fā)常見問題解決

    嵌入式系統(tǒng)開發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)是專為特定應(yīng)用設(shè)計(jì)的計(jì)算機(jī)系統(tǒng),它們通常嵌入在所控制的設(shè)備。這些系統(tǒng)的關(guān)鍵特點(diǎn)是它們與硬件的緊密集成,這意味著軟件必須為特定的硬件平臺(tái)量身定制。
    的頭像 發(fā)表于 12-09 09:38 ?499次閱讀

    mmc卡在嵌入式系統(tǒng)的使用

    隨著科技的發(fā)展,嵌入式系統(tǒng)在我們的日常生活扮演著越來越重要的角色。從智能手機(jī)到家用電器,再到工業(yè)控制系統(tǒng),嵌入式系統(tǒng)無處不在。存儲(chǔ)設(shè)備作為嵌入式系統(tǒng)
    的頭像 發(fā)表于 11-25 09:58 ?484次閱讀

    ARM嵌入式系統(tǒng)內(nèi)存對(duì)齊的重要性

    嵌入式系統(tǒng)軟件開發(fā),經(jīng)常在代碼中看到各種各樣的對(duì)齊,很多時(shí)候我們都是知其然不知其所以然,知道要做好各種對(duì)齊,但是不明白為什么要對(duì)齊,不對(duì)齊會(huì)有哪些后果,這篇文章大概總結(jié)了內(nèi)存對(duì)齊的理由。
    的頭像 發(fā)表于 11-11 17:17 ?1123次閱讀
    ARM<b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>中</b><b class='flag-5'>內(nèi)存</b>對(duì)齊的重要性

    什么是嵌入式?一文讀懂嵌入式主板

    在現(xiàn)代科技浪潮嵌入式技術(shù)已成為支撐各種智能設(shè)備和系統(tǒng)運(yùn)行的核心力量。那么,究竟什么是嵌入式嵌入式系統(tǒng),顧名思義,是將計(jì)算機(jī)的硬件和軟件嵌入
    的頭像 發(fā)表于 10-16 10:14 ?1790次閱讀

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統(tǒng)的核心組件,是一種用于控制和數(shù)據(jù)處理的計(jì)算機(jī)硬件,其設(shè)計(jì)旨在嵌入特定設(shè)備執(zhí)行專門任務(wù)。嵌入式主板如同是設(shè)備
    的頭像 發(fā)表于 09-30 10:05 ?1103次閱讀

    嵌入式常用數(shù)據(jù)結(jié)構(gòu)有哪些

    嵌入式編程,數(shù)據(jù)結(jié)構(gòu)的選擇和使用對(duì)于程序的性能、內(nèi)存管理以及開發(fā)效率都具有重要影響。嵌入式系統(tǒng)由于資源受限(如處理器速度、內(nèi)存大小等),
    的頭像 發(fā)表于 09-02 15:25 ?682次閱讀

    AI普及嵌入式設(shè)計(jì)人員帶來新挑戰(zhàn)

    探討了人工智能(AI)的普及嵌入式設(shè)計(jì)人員帶來的新挑戰(zhàn)。在創(chuàng)建“邊緣機(jī)器學(xué)習(xí)(ML)”應(yīng)用時(shí),設(shè)計(jì)人員必須確保其能有效運(yùn)行,同時(shí)最大限度地降低處理器和存儲(chǔ)開銷,以及物聯(lián)網(wǎng)(IoT)設(shè)備的功耗
    發(fā)表于 08-22 14:20 ?750次閱讀
    AI普及<b class='flag-5'>給</b><b class='flag-5'>嵌入式</b>設(shè)計(jì)人員帶來新挑戰(zhàn)

    嵌入式系統(tǒng)的實(shí)時(shí)操作系統(tǒng)

    嵌入式RTOS是嵌入式應(yīng)用程序運(yùn)行、相互交互和與外界通信的底層軟件機(jī)制。在本節(jié),您將了解嵌入式軟件開發(fā)人員使用哪些流行RTOS以及它們運(yùn)行的嵌入式
    的頭像 發(fā)表于 08-20 11:28 ?580次閱讀

    如何提升嵌入式編程能力?

    如何提升嵌入式編程能力? 要提升嵌入式編程的能力,可以從以下幾點(diǎn)學(xué)習(xí): 1. 理解硬件:熟悉你正在編程的硬件平臺(tái),包括微控制器、處理器、內(nèi)存、輸入/輸出設(shè)備等基礎(chǔ)理論與應(yīng)用。 2. 學(xué)習(xí)基本原理
    發(fā)表于 06-21 10:01

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術(shù)集成到嵌入式系統(tǒng)的一種解決方案。嵌入式系統(tǒng)是一種為特定應(yīng)用而設(shè)計(jì)的計(jì)算機(jī)系統(tǒng),它通常包括處理器、內(nèi)存、外設(shè)
    的頭像 發(fā)表于 03-15 14:29 ?1468次閱讀

    嵌入式軟件設(shè)計(jì)的原則分享

    嵌入式軟件開發(fā)如果具有更好的閱讀性、擴(kuò)展性以及維護(hù)性,就需要考慮很多因素。今天大家分享幾個(gè)嵌入式軟件設(shè)計(jì)的原則。
    發(fā)表于 02-25 10:54 ?777次閱讀
    <b class='flag-5'>嵌入式</b>軟件設(shè)計(jì)的原則分享
    主站蜘蛛池模板: 欧美一区亚洲二区 | 天天狠天天天天透在线 | 你懂的网站在线观看网址 | 男男污肉高h坐便器调教 | 高清午夜线观看免费 | 香港三澳门三日本三级 | 能在线观看的一区二区三区 | 国产成人mv在线观看入口视频 | 亚洲骚片 | 色天使色护士 | 免费视频网站在线看视频 | 人人射人人草 | 亚洲bt欧美bt高清bt777 | 日本不卡高清免费 | 国产精品午夜免费观看网站 | 毛片高清一区二区三区 | 狠狠干狠狠搞 | 美女拍拍拍免费视频观看 | 四虎影院在线观看免费 | 特黄一级| 永久免费看mv网站入口 | 午夜免费视频福利集合100 | 日本欧美午夜 | 97视频人人| 清冷双性被cao的合不拢腿 | 四虎成人免费网站在线 | jiuse在线 | 久久青草国产免费观看 | 高清色本在线www | 日韩在线网 | 国产农村一级特黄α真人毛片 | 手机看片福利盒子久久青 | 亚洲黄色三级 | 色两性网欧美 | 色婷婷激情 | 老师受年下高h男 | 午夜激情啪啪 | 日本国产高清色www视频在线 | 日本免费视频 | 亚洲网站免费观看 | 永久免费的拍拍拍网站 |