精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

cache背后的軟思考

Linux閱碼場 ? 來源:Linux閱碼場 ? 2023-03-02 10:34 ? 次閱讀

1.前言

Cache在體系架構(gòu)中占據(jù)半邊山,讀者又多為軟件從業(yè)者、學(xué)者,個人在碰到項目瓶頸時,研讀一些ARM手冊,以及業(yè)內(nèi)技術(shù)論文,發(fā)現(xiàn)cache在架構(gòu)中發(fā)揮著被軟件工程師低估的能力,本文從其設(shè)計角度和軟件角度闡述一二;

2.Cache的設(shè)計思考

Cache的基礎(chǔ)資料很多,多是圍繞如下展開說明:cache line,組/全相連,VIVT/VIPT/PIPT等概念,一般初學(xué)者閱讀后也會云里霧里,cache技術(shù)也很少被直接關(guān)注到;

所以在linux初級開發(fā)者接觸cache時,腦海里會不自覺的思考:硬件行為,都是被ICer設(shè)計好的;所以他們也并沒有深究cache的層次結(jié)構(gòu),也沒有繼續(xù)挖掘cache和驅(qū)動軟件的千絲萬縷的關(guān)系,腦海里想象的拓?fù)鋱D,大致是這樣:

5f4abe14-b813-11ed-bfe3-dac502259ad0.jpg

認(rèn)為cache的設(shè)計就是cpu和memory之間單一的存在,從而忽略了那些ICer對cache的研究和優(yōu)化,直接影響就是軟件層面的優(yōu)化,以及軟件層面的疑難bug;這也是初學(xué)者進(jìn)階時的第一道阻礙;

那么在原廠工程師的腦海里,cache最基礎(chǔ)的樣子是這樣的:

5f60ae90-b813-11ed-bfe3-dac502259ad0.jpg

它是現(xiàn)在處理器基本的形態(tài),也是最簡單的形態(tài),在ICer們的設(shè)計上,其內(nèi)在協(xié)議直接影響著指令的流轉(zhuǎn):load,store等;其內(nèi)在存在的load buffer和store buffer影響著你的數(shù)據(jù)一致性,你的讀寫指令運(yùn)行速度,數(shù)據(jù)的共享屬性等等,極其簡單的實例:

5f6df00a-b813-11ed-bfe3-dac502259ad0.jpg

5f7f9062-b813-11ed-bfe3-dac502259ad0.jpg

一個load執(zhí)行,一個store執(zhí)行,哪個快?顯然prefetch最快,再深一層次思考:如果工程中,在多cpu和多thread都有數(shù)據(jù)訪問需求,但是CPU和memory直接又有cache這一層大buffer,硬件和軟件都做了什么,能夠保證實時或訪存速度?

硬件上,制定cache的各種參數(shù)時,在保證滿足設(shè)計需求時,ICer們也會做這種動作:即對cache的benchmark;比如cache size和直接映射、組相連帶來的收益:

5f8d1688-b813-11ed-bfe3-dac502259ad0.jpg

L2 cache的benchmark:

5f9bd696-b813-11ed-bfe3-dac502259ad0.jpg

各種參數(shù)的測試結(jié)果呈現(xiàn)就是市面上大家可以查到的某種處理器L1 cache,L2 cache,L3 cache,以及system cache的大小,所以在大家認(rèn)為很小size的cache,ICer以及架構(gòu)師們,甚至是學(xué)者,都在為其能夠發(fā)揮出更佳性能,更低功耗的能力,夜以繼日的做研究,做實驗;

進(jìn)一步思考:現(xiàn)在處理器設(shè)計越來越復(fù)雜,越來越強(qiáng),比如NUMA,大小核等等,其呈現(xiàn)效果又如下簡單示例:

5face80a-b813-11ed-bfe3-dac502259ad0.jpg

硬件層面帶來了考驗和升級,直接的影響給軟件層面也帶了考驗,比如:你的數(shù)據(jù)一致性問題,IP驅(qū)動設(shè)計等等,ARM的內(nèi)存模型又是弱一致性的,那么你設(shè)計的驅(qū)動,可能被動存在著潛在bug,所以進(jìn)一步帶來的是我們在工程問題上的思考。

1.Cache的工程思考

本人工作于ARM體系架構(gòu)之上,所以日常在查閱arm官方公開的文檔時,知道的愈多,疑問也愈多,思考的也愈多,但是借助linux這個開源社區(qū),眾多疑惑也慢慢得到解答,特此在工作之余將一小部分所得分享于大家,比如:cache的多個讀寫策略在影響著指令行為,直接導(dǎo)致數(shù)據(jù)的行為不一,如何在工程中認(rèn)識它們?解決它們?

Cache的策略有如下:write-allocate,no write-allocate,read-allocate,read-through;

上述策略在驅(qū)動設(shè)計時,也是幾乎被忽略的存在,其發(fā)揮的作用就是data是否被緩存在cache中,還是 pass到內(nèi)存中,若兩者皆存在,那么你的DMA在搬運(yùn)數(shù)據(jù)前,有個動作就是sync,即刷新cache,保持?jǐn)?shù)據(jù)在cache與內(nèi)存中的一致性;

當(dāng)然在內(nèi)核驅(qū)動設(shè)計時,并不會指定使用哪個cache策略,因為kernel已經(jīng)在某些接口中,潛在的做了相關(guān)操作,譬如大家用的ioremap_xxx這類接口就是和cache聯(lián)系緊密;

可以思考:如果我不需要使用ioremap_xxx這類接口,還需要關(guān)注什么cache策略嗎?

思考后的結(jié)果:dirty數(shù)據(jù)帶來的不同步就是你解決不了問題的噩夢;

Dirty數(shù)據(jù)怎么處理?借助linux的驅(qū)動設(shè)計,可以給各位呈現(xiàn)出如下一個接口:

gic_flush_dcache_to_poc();

POC(Pointof Coherency):全局緩存一致性,即系統(tǒng)中所有可以發(fā)起內(nèi)存訪問的硬件單元的視角:CPU,DMA等;

所以雖然cache分為:L1 cache,L2 cache,L3cache,以及system cache,但是需要軟件設(shè)計者必須知道的是:你想干什么?是刷新部分master所感測到的數(shù)據(jù),還是所有master都要關(guān)注到的數(shù)據(jù)變化,這就是cache帶來的可操作性;

即在不同cache層級的設(shè)計中,data的可觀測性是不一樣的,這也是為什么在我的腦海里,cache一直是多層級,多策略的,所以在驅(qū)動設(shè)計時,保證IP的視角看到的數(shù)據(jù)就是我設(shè)計的結(jié)果;

思考:如果只是CPU之間的data是可觀測的,有沒有什么指令作用域比POC更小的?

思考后的結(jié)果:POC視角太寬泛了,比POC作用域小的,即 POU:Pointof Unification;即處理器看到的視角,比如虛擬內(nèi)存和物理內(nèi)存映射的頁表數(shù)據(jù):TLB,MMU;

進(jìn)一步思考:POC和POU又太大了,有沒有只操作我dword數(shù)據(jù)的?

因為ARM的內(nèi)存模型是弱一致性的,所以其在指令排序上有所行為,直接影響就是控制數(shù)據(jù)的亂序,內(nèi)存屏障指令運(yùn)勢而生:dmb,dsb,isb;(PS:宋寶華老師的分享文章有詳解);

該內(nèi)存屏障指令宋老師有過介紹,不再贅述,需要關(guān)注的是:在使用上述指令時,也有作用域的區(qū)別;

Cache帶給處理器的是極致性能,帶給開發(fā)者是一個又一個的隱藏問題,所以剖析cache很有必要;

2.總結(jié)

本文因為篇幅問題,分享的是cache的冰山一角。cache又是體系架構(gòu)中的一角,體系架構(gòu)又是內(nèi)核技術(shù)的一角,我又是眾多讀者的一角。

文獻(xiàn)參考:論文《WhatEvery Programmer Should Know About Memory》。

審核編輯 :李倩

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

    關(guān)注

    134

    文章

    9046

    瀏覽量

    366816
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10825

    瀏覽量

    211148
  • Cache
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    28298

原文標(biāo)題:cache背后的軟思考

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    (分享設(shè)計)顯示器上的思考

    ` 本帖最后由 白菜蟲蟲 于 2013-5-30 10:23 編輯 昨天無聊,用倆回形針彎了個思考者,晚上加了個LED,用一根舊USB數(shù)據(jù)線取電。廢話少說,上圖:加個動態(tài)的回復(fù)關(guān)于參數(shù)
    發(fā)表于 05-29 10:33

    為什么需要cachecache是如何影響code的呢

    是如何影響這2段code的呢?為什么需要cache思考為什么需要cache之前,我們首先先來思考另一個問題:我們的程序是如何運(yùn)行起來的?我們應(yīng)該知道程序是運(yùn)行在 RAM之中,RAM
    發(fā)表于 04-21 11:10

    Cache中Tag電路的設(shè)計

    摘要:在SoC系統(tǒng)中,片上緩存(Cache)的采用是解決片上處理器和片外存儲器之間速度差異的重要方法,Cache中用來存儲標(biāo)記位并判斷Cache是否命中的Tag電路的設(shè)計將會影響到整個Cach
    發(fā)表于 05-08 09:26 ?11次下載

    什么是Cache/SIMD?

    什么是Cache/SIMD?   Cache :即高速緩沖存儲器,是位于CPU與主內(nèi)存間的一種容量較小但速度很高的存儲器。由于CPU的速度遠(yuǎn)高于主內(nèi)存
    發(fā)表于 02-04 11:29 ?533次閱讀

    什么是Instructions Cache/IMM/ID

    什么是Instructions Cache/IMM/ID  Instructions Cache: (指令緩存)由于系統(tǒng)主內(nèi)存的速度較慢,當(dāng)CPU讀取指令的時候,會導(dǎo)致CPU停下來
    發(fā)表于 02-04 11:51 ?626次閱讀

    什么是Cache

    什么是Cache  英文縮寫: Cache 中文譯名: 高速緩存器 分  類: IP與多媒體 解  釋: 信息在本地的臨時存儲
    發(fā)表于 02-22 17:26 ?1012次閱讀

    高速緩存(Cache),高速緩存(Cache)原理是什么?

    高速緩存(Cache),高速緩存(Cache)原理是什么? 高速緩存Cache是位于CPU和主存儲器之間規(guī)模較小、存取速度快捷的靜態(tài)存儲器。Cache一般由
    發(fā)表于 03-26 10:49 ?6819次閱讀

    cache基本知識培訓(xùn)教程[2]

    cache基本知識培訓(xùn)教程[2] 相聯(lián)度越高(即 n 的值越大), Cache 空間的利用率就越高,塊沖突概率就越低,因而 Cache 的失效率就越低。塊沖突是指一
    發(fā)表于 04-13 16:25 ?2240次閱讀

    什么是 Cache? Cache讀寫原理

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

    CPU Cache偽共享問題

    當(dāng)CPU想要訪問主存中的元素時,會先查看Cache中是否存在,如果存在(稱為Cache Hit),直接從Cache中獲取,如果不存在(稱為Cache Miss),才會從主存中獲取。
    的頭像 發(fā)表于 12-12 09:17 ?654次閱讀

    深入理解Cache工作原理

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

    Cache的原理和地址映射

    cache存儲系統(tǒng)中,把cache和主存儲器都劃分成相同大小的塊。 主存地址由塊號B和塊內(nèi)地址W兩部分組成,cache地址由塊號b和塊內(nèi)地址w組成。 當(dāng)CPU訪問cache時,CPU
    的頭像 發(fā)表于 10-31 11:21 ?1566次閱讀

    Cache分類與替換算法

    根據(jù)不同的分類標(biāo)準(zhǔn)可以按以下3種方法對Cache進(jìn)行分類。 ?1)數(shù)據(jù)cache和指令cache ?● 指令cache:指令預(yù)取時使用的cache
    的頭像 發(fā)表于 10-31 11:26 ?922次閱讀
    <b class='flag-5'>Cache</b>分類與替換算法

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

    “鎖定”在cache中的塊在常規(guī)的cache替換操作中不會被替換,但當(dāng)通過C7控制cache中特定的塊時,比如使某特定的塊無效時,這些被“鎖定”在cache中的塊也將受到相應(yīng)的影響。
    的頭像 發(fā)表于 10-31 11:31 ?720次閱讀

    Cache寫入方式原理簡介

    提高高速緩存命中率的最好方法是盡量使Cache存放CPU最近一直在使用的指令與數(shù)據(jù),當(dāng)Cache裝滿后,可將相對長期不用的數(shù)據(jù)刪除,提高Cache的使用效率。 為保持Cache中數(shù)據(jù)與
    的頭像 發(fā)表于 10-31 11:43 ?1204次閱讀