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

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

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

通過(guò)C代碼和Intel手冊(cè)詳細(xì)理解cache參數(shù)

SSDFans ? 來(lái)源:未知 ? 作者:李倩 ? 2018-08-15 14:25 ? 次閱讀

Cache的容量一般都很小,即使是最大的三級(jí) Cache(L3)也只有20MB ~30MB。cache加快了CPU對(duì)內(nèi)存的讀寫(xiě)速率,CPU第一次執(zhí)行需要將數(shù)據(jù)時(shí)候需要從主存-->L3 Cache--->L2 Cache -->L1 Cache傳遞到CPU的計(jì)算單元。cache分成多個(gè)組,每個(gè)組分成多個(gè)行,linesize是cache的基本單位,從主存向cache遷移數(shù)據(jù)都是按照l(shuí)inesize為單位替換的。下面通過(guò)C代碼和Intel手冊(cè)詳細(xì)理解cache參數(shù)。

Intel CPU可以通過(guò)CPUID命令獲取cpu相關(guān)信息,查詢(xún)Intel可以獲取到相應(yīng)的指令信息,獲取cache 參數(shù)有下面兩種方法:分別是當(dāng)CPUID指令I(lǐng)nitial EAX Value為0x02和0x04時(shí)候,由于方法一種CPUID指令的入口參數(shù)存放在EAX寄存器中,所以獲取cache信息需要給EAX寄存器賦值為0x02,然后分別讀取EAX、EBX、ECX、EDX四個(gè)寄存器得到Cache and TLB Information。查看Intel手冊(cè)(圖1)得到方法一的指令碼。

圖1

參考Linux內(nèi)核中header.c文件中的cpuid函數(shù)實(shí)現(xiàn)獲取cache代碼函數(shù),圖2有兩種方式實(shí)現(xiàn)獲取cache函數(shù),原理都是一樣,賦值然后讀取值。

圖2

本次試驗(yàn)采用gcc 4.7.2版本編譯程序并且運(yùn)行得到如下結(jié)果:

d_eax : 55035a01

d_ebx : f0b2de

d_ecx : 0

d_edx : 9ca212c

查看intel 手冊(cè)可以得到每個(gè)字節(jié)的解釋?zhuān)琫bx寄存器中低八位查表得到如圖3所示相關(guān)信息,3級(jí)cache 容量6M,12路組相連(每組有12個(gè)line),每個(gè)line大小為64 字節(jié)。其它信息查表得到如下:

EAX:

(55h) Instruction TLB: 2-MB or 4-MB pages, fully associative, 7 entries

(03h) Data TLB: 4-KB Pages, 4-way set associative, 64 entries

(5Ah) Data TLB0: 2-MB or 4-MB pages, 4-way associative, 32 entries

(01h) Instruction TLB: 4-KB Pages, 4-way set associative, 32 entries

EBX:

(F0h) 64-byte Prefetching

(B2h) Instruction TLB: 4-KB pages, 4-way set associative, 64 entries

(DEh) 3rd-level cache: 6-MB, 12-way set associative, 64-byte line size

EDX:

(09h) 1st-level Instruction Cache: 32-KB, 4-way set associative, 64-byte line size

(CAh) Shared 2nd-level TLB: 4-KB pages, 4-way set associative, 512 entries

(21h) 256KB L2 (MLC), 8-way set associative, 64-byte line size

(2Ch) 1st-level data cache: 32-KB, 8-way set associative, 64-byte line size

從上面信息得到當(dāng)前CPU的cache信息如下:

L1 Cache : 32KB , 8路組相連,linesize為 64Byte 64個(gè)組

L2 Cache:256KB 8路組相連,linesize為 64Byte 512個(gè)組

L3 Cache:6MB 12路組相連,linesize為 64Byte 8192個(gè)組

圖3

獲取cache參數(shù)的另外一種方法,查閱Intel手冊(cè)(圖4)得到當(dāng)CPUID的Initial EAX Value為0x04時(shí)得到cache十六進(jìn)制數(shù),在根據(jù)圖4中的編碼信息獲取cache詳細(xì)參數(shù),執(zhí)行該CPUID命令時(shí)還需要設(shè)置另外一個(gè)入口參數(shù)ECX,ECX寄存器設(shè)置我們需要查詢(xún)哪一個(gè)cache ,ECX的輸入與cache對(duì)應(yīng)如下:

0:L1D

1:L1I

2:L2

3:L3

圖4

執(zhí)行CPUID Initial EAX Value 等于0x04時(shí),返回的EAX、EBX、ECX、EDX寄存器值得位信息如圖5所示。

圖5

EAX[4:0]=1,表示這是一個(gè)數(shù)據(jù)Cache。EAX[7:5]=1,表示該Cache的級(jí)別為1,即為L(zhǎng)1D。EAX[8]=1表示該Cache處于自初始化的Cache層(Seache Level)。EAX[9]=0,表示此Cache不是全相聯(lián)Cache。EAX[25:14]=1表示能夠共享此Cache的最大線(xiàn)程數(shù)為2。EAX[31:26]=15,表示這個(gè)處上,最多支持16個(gè)核心。EBX[11:0]=63表示Cache LineSize為64字節(jié)。EBX[21:12]表示此Cache不支持硬件Cache Line分區(qū)。EBX[31:22]=7,表示此Cache為8路組相聯(lián)

7表示此Cache的組數(shù)為8組。

獲取L3 cache詳細(xì)參數(shù)代碼如圖6所示:

圖6

代碼運(yùn)行結(jié)果如下:

d_eax : 163

d_ebx : 2c0003f

d_ecx : 1fff

d_edx : 6

計(jì)算L3 cache容量公式如下:

Size = (Ways + 1) * (Partitions + 1) * (Line_Size + 1) * (Sets + 1)

= (EBX[31:22] + 1) * (EBX[21:12] + 1) * (EBX[11:0] + 1) * (ECX + 1)

=(0x2c0003f>>22+1)*((0x2c0003f&0x003FF000)>>12+1)*(0x2c0003f&0x00000FFF+1)*(0x1fff+1)

= 6291456 B=6144 K=6M

獲取其它c(diǎn)ache 只需要修改傳入cpuid的ecx參數(shù),如果需要獲取CPU的其它信息,可以查看Intel 指令手冊(cè)修改傳入EAX參數(shù)的值

聲明:本文內(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)投訴
  • Cache
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    28232
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4700

    瀏覽量

    68106

原文標(biāo)題:幾行C代碼剖析Cache參數(shù)

文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C6678芯片CACHE設(shè)置問(wèn)題

    1 在文檔《C66x CorePac User's Guide》中描述“Defines the size of the L1P cache. The L1PMODE field powers-up
    發(fā)表于 06-21 14:00

    如何理解C6678中關(guān)于cache的描述?

    在TMS320C6678中,有這樣對(duì)cache的描述:“L1D memory cannot be cached within L1D cache, L1P cache, or L2
    發(fā)表于 06-21 16:07

    關(guān)于C6747的cache

    )用做片上RAM,將一些實(shí)時(shí)要求高的代碼和數(shù)據(jù)放在這部分內(nèi)存中?,F(xiàn)在的現(xiàn)象是程序會(huì)跑飛,.text區(qū)和L2前半部分的數(shù)據(jù)(包括代碼部分)會(huì)被修改,而且是大面積修改。不知道是不是因?yàn)長(zhǎng)2的前半部分被用作cache了,使用L2CFG
    發(fā)表于 08-02 06:44

    關(guān)于芯片數(shù)據(jù)手冊(cè)參數(shù)理解的問(wèn)題

    最近用到一個(gè)集成四與門(mén)的芯片:SN54AHC08看數(shù)據(jù)手冊(cè)的時(shí)候遇到一些疑惑,有前輩能幫忙解惑嗎。1. 這里是芯片的一些參數(shù)的最大值,里邊第七個(gè)參數(shù)規(guī)定了連續(xù)通過(guò)電流或地的電流,這樣是
    發(fā)表于 12-16 11:02

    降低Cache失效率的方法[1]

    降低Cache失效率的方法[1]  學(xué)習(xí)目標(biāo):     理解失效的三種類(lèi)型(3C);
    發(fā)表于 04-13 16:32 ?4197次閱讀

    代碼編譯器Studio V2.3版本的Cache詳細(xì)資料分析概述

    Cache分析是一個(gè)代碼編寫(xiě)器Studio插件,它為您的程序在一個(gè)固定的時(shí)間內(nèi)提供內(nèi)存引用模式的圖形化可視化。此工具可以幫助您提高程序的緩存性能。
    發(fā)表于 05-07 09:48 ?0次下載
    <b class='flag-5'>代碼</b>編譯器Studio V2.3版本的<b class='flag-5'>Cache</b><b class='flag-5'>詳細(xì)</b>資料分析概述

    DSP上CacheC64+ 系列中的應(yīng)用(1)

    C64+ 系列DSP上Cache 的應(yīng)用(第一部分)
    的頭像 發(fā)表于 06-13 01:08 ?4073次閱讀
    DSP上<b class='flag-5'>Cache</b> 在 <b class='flag-5'>C</b>64+ 系列中的應(yīng)用(1)

    DSP上CacheC64+ 系列中的應(yīng)用(2)

    C64+ 系列DSP上Cache 的應(yīng)用(第二部分)
    的頭像 發(fā)表于 06-13 01:01 ?3875次閱讀
    DSP上<b class='flag-5'>Cache</b> 在 <b class='flag-5'>C</b>64+ 系列中的應(yīng)用(2)

    MPU6050陀螺儀通過(guò)I2C傳遞數(shù)據(jù)的C語(yǔ)言源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是MPU6050陀螺儀通過(guò)I2C傳遞數(shù)據(jù)的C語(yǔ)言源代碼免費(fèi)下載。
    發(fā)表于 06-10 17:54 ?44次下載
    MPU6050陀螺儀<b class='flag-5'>通過(guò)</b>I2<b class='flag-5'>C</b>傳遞數(shù)據(jù)的<b class='flag-5'>C</b>語(yǔ)言源<b class='flag-5'>代碼</b>免費(fèi)下載

    SPI總線(xiàn)驅(qū)動(dòng)的C語(yǔ)言源代碼詳細(xì)概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是SPI總線(xiàn)驅(qū)動(dòng)的C語(yǔ)言源代碼詳細(xì)概述。
    的頭像 發(fā)表于 09-26 11:36 ?7059次閱讀

    cache對(duì)寫(xiě)好代碼真的有那么重要嗎

    CACHE基礎(chǔ) 對(duì)cache的掌握,對(duì)于Linux工程師(其他的非Linux工程師也一樣)寫(xiě)出高效能代碼,以及優(yōu)化Linux系統(tǒng)的性能是至關(guān)重要的。簡(jiǎn)單來(lái)說(shuō),cache快,內(nèi)存慢,硬盤(pán)
    的頭像 發(fā)表于 07-26 15:18 ?1725次閱讀
    <b class='flag-5'>cache</b>對(duì)寫(xiě)好<b class='flag-5'>代碼</b>真的有那么重要嗎

    Page Cache是什么 一文帶你深入理解Linux的Page Cache

    是什么? 為了理解 Page Cache,我們不妨先看一下 Linux 的文件 I/O 系統(tǒng),如下圖所示: Figure1. Linux 文件 I/O 系統(tǒng) 上圖中,紅色部分為 Page Cache??梢?jiàn) Page
    的頭像 發(fā)表于 10-20 14:12 ?5839次閱讀
    Page <b class='flag-5'>Cache</b>是什么 一文帶你深入<b class='flag-5'>理解</b>Linux的Page <b class='flag-5'>Cache</b>

    什么是 Cache? Cache讀寫(xiě)原理

    由于寫(xiě)入數(shù)據(jù)和讀取指令分別通過(guò) D-Cache 和 I-Cache,所以需要同步 D-Cache 和 I-Cache,即復(fù)制后需要先將 D-
    發(fā)表于 12-06 09:55 ?2119次閱讀

    深入理解Cache工作原理

    按照數(shù)據(jù)關(guān)系劃分:Inclusive/exclusive Cache: 下級(jí)Cache包含上級(jí)的數(shù)據(jù)叫inclusive Cache。不包含叫exclusive Cache。舉個(gè)例子,
    的頭像 發(fā)表于 05-30 16:02 ?734次閱讀
    深入<b class='flag-5'>理解</b><b class='flag-5'>Cache</b>工作原理

    Cache內(nèi)容鎖定是什么

    “鎖定”在cache中的塊在常規(guī)的cache替換操作中不會(huì)被替換,但當(dāng)通過(guò)C7控制cache中特定的塊時(shí),比如使某特定的塊無(wú)效時(shí),這些被“鎖
    的頭像 發(fā)表于 10-31 11:31 ?657次閱讀