那曲檬骨新材料有限公司

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

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

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

Linux性能優(yōu)化:Cache對(duì)性能的影響

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux充電站 ? 作者: Vincent ? 2023-10-04 15:31 ? 次閱讀

Cache對(duì)性能的影響首先我們要知道,CPU訪問(wèn)內(nèi)存時(shí),不是直接去訪問(wèn)內(nèi)存的,而是先訪問(wèn)緩存(cache)。

當(dāng)緩存中已經(jīng)有了我們要的數(shù)據(jù)時(shí),CPU就會(huì)直接從緩存中讀數(shù)據(jù),而不是從內(nèi)存中讀。

CPU和緩存的關(guān)系如下:

圖片

緩存分為一級(jí)、二級(jí)、三級(jí),最靠近CPU的是一級(jí)緩存,最遠(yuǎn)的是內(nèi)存,離CPU越近速度越快。

訪問(wèn)速度上,L1》L2》L3》內(nèi)存,緩存比內(nèi)存速度要快得非常多。

如果CPU操作的數(shù)據(jù)在緩存中,則直接從緩存中讀取,這個(gè)過(guò)程就叫緩存命中。

因此提升性能的關(guān)鍵,就是要提高緩存命中率。下面來(lái)看如何提高緩存命中率。

提高數(shù)據(jù)緩存命中率來(lái)看一個(gè)實(shí)例,有一個(gè)N*N的二維數(shù)組,例如:

int array[N][N];

現(xiàn)在用兩個(gè)for循環(huán)遍歷這個(gè)數(shù)組,訪問(wèn)每個(gè)元素的內(nèi)容:

for(i = 0; i 《 N; i+=1) { for(j = 0; j 《 N; j+=1) { array[i][j] = 0;//速度快
//array[j][i] = 0;//速度慢 } }

有兩種訪問(wèn)方式:array[i][j]和array[j][i]。

在性能上,array[i][j]會(huì)比array[j][i]執(zhí)行地更快,并且速度相差8倍。

1、速度更快的原因

首先數(shù)組在內(nèi)存上是連續(xù)的,假設(shè)N等于2,則array[2][2]在內(nèi)存中的排布是:

array[0][0]、array[0][1]、array[1][0]、array[1][1]、

以array[i][j]方式訪問(wèn),即按內(nèi)存中的順序訪問(wèn),當(dāng)訪問(wèn)array[0][0]時(shí),CPU就已經(jīng)把數(shù)組的剩余三個(gè)數(shù)據(jù)(array[0][1]、array[1][0]、array[1][1])加載到了緩存當(dāng)中。

當(dāng)繼續(xù)訪問(wèn)后三個(gè)元素時(shí),CPU會(huì)直接從緩存中讀取數(shù)據(jù),而不需要從內(nèi)存中讀取(cache命中)。因此速度會(huì)很快。

如果以array[j][i]方式訪問(wèn)數(shù)組,則訪問(wèn)順序?yàn)椋?/p>

array[0][0]、array[1][0]、array[0][1]、array[1][1]

此時(shí)訪問(wèn)順序是跳躍的,并不是按數(shù)組在內(nèi)存中的的排布順序來(lái)訪問(wèn)。如果N很大的話,那么執(zhí)行array[j][i]時(shí),array[j+1][i]的內(nèi)容是沒法讀進(jìn)緩存里的,等到要訪問(wèn)array[j+1][i]時(shí)就只能從內(nèi)存中讀取。

所以array[j][i]的速度會(huì)慢于array[i][j]。

2、速度相差8倍的原因

剛剛提到,如果這個(gè)二維數(shù)組的N很大,array[j+1][i]的內(nèi)容是沒法讀到緩存里的,那CPU一次能夠?qū)⒍嗌贁?shù)據(jù)加載進(jìn)緩存里呢?

這個(gè)其實(shí)跟cache line有關(guān),cache line代表緩存一次載入數(shù)據(jù)的大小。可以通過(guò)以下命令查看cache line為多大:

cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size

圖片

cache line為64,代表CPU緩存一次數(shù)據(jù)的大小為64字節(jié)。

當(dāng)訪問(wèn)array[0][0]時(shí),該元素所占用的字節(jié)數(shù)不到64字節(jié),CPU就會(huì)按順序補(bǔ)足后續(xù)元素,就會(huì)把后面的array[0][1]、array[1][0]等內(nèi)容一起讀到緩存里,直到湊夠64字節(jié)。

正因如此,按順序訪問(wèn)的array[i][j]才會(huì)比不按順序訪問(wèn)的array[j][i]速度快。

再看看為什么速度相差8倍。我們知道,二維數(shù)組中,第一維元素放的是地址,第二維元素才是數(shù)據(jù)。64位系統(tǒng)中,地址占用8個(gè)字節(jié),cache
line為64的話,地址已經(jīng)占用了8字節(jié),那每個(gè)cache line最多能載入不到8個(gè)二維數(shù)組元素,N很大的情況下,他們的性能平均下來(lái)就會(huì)相差將近8倍。

結(jié)論:按內(nèi)存布局順序訪問(wèn),可以提高數(shù)據(jù)緩存命中率。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10904

    瀏覽量

    213023
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210400
  • Cache
    +關(guān)注

    關(guān)注

    0

    文章

    129

    瀏覽量

    28433
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux性能優(yōu)化大全!

    高并發(fā)和響應(yīng)快對(duì)應(yīng)著性能優(yōu)化的兩個(gè)核心指標(biāo):吞吐和延時(shí)
    發(fā)表于 11-21 11:23 ?714次閱讀

    NAS存儲(chǔ)系統(tǒng)性能優(yōu)化攻略

    無(wú)論是程序員,DBA還是網(wǎng)管,似乎所有的ITer都會(huì)遭遇同一問(wèn)題:性能優(yōu)化。NAS從業(yè)者也不例外,而且NAS的問(wèn)題更加棘手,因?yàn)樗婕暗膮f(xié)議和設(shè)備很多。本系列博文將從共享協(xié)議入手,再到網(wǎng)絡(luò),最后
    發(fā)表于 12-29 13:52

    HBase性能優(yōu)化方法總結(jié)

    HBase是Hadoop生態(tài)系統(tǒng)中的一個(gè)組件,是一個(gè)分布式、面向列的開源數(shù)據(jù)庫(kù),可以支持?jǐn)?shù)百萬(wàn)列、超過(guò)10億行的數(shù)據(jù)存儲(chǔ),因此,對(duì)HBase性能提出了一定的要求,那么如何進(jìn)行HBase性能優(yōu)化
    發(fā)表于 04-20 17:16

    Linux系統(tǒng)的性能優(yōu)化策略

    近年來(lái),世界上許多大軟件公司紛紛推出各種Linux服務(wù)器系統(tǒng)及Linux下的應(yīng)用軟件。目前,Linux 已可以與各種傳統(tǒng)的商業(yè)操作系統(tǒng)分庭抗禮,在服務(wù)器市場(chǎng),占據(jù)了相當(dāng)大的份額。本文分別從磁盤調(diào)優(yōu),文件系統(tǒng),內(nèi)存管理以及編譯
    發(fā)表于 07-16 06:23

    Linux和Android系統(tǒng)故障和優(yōu)化性能的方法和流程探討

    作為一名Linux 或 Android 平臺(tái)的系統(tǒng)工程師,在開發(fā)系統(tǒng)新功能外,主要工作就是優(yōu)化系統(tǒng)性能,使系統(tǒng)上以最優(yōu)的狀態(tài)運(yùn)行,但是由于硬件問(wèn)題、軟件問(wèn)題、網(wǎng)絡(luò)環(huán)境等的復(fù)雜性和多變性,導(dǎo)致對(duì)系統(tǒng)
    發(fā)表于 07-22 06:48

    linux性能問(wèn)題

    最主要的工作是優(yōu)化系統(tǒng)配置,使應(yīng)用在系統(tǒng)上以最優(yōu)的狀態(tài)運(yùn)行,但是由于硬件問(wèn)題、軟件問(wèn)題、網(wǎng)絡(luò)環(huán)境等的復(fù)雜性 和多變性,導(dǎo)致對(duì)系統(tǒng)的優(yōu)化變得異常復(fù)雜,如何定位性能問(wèn)題出在哪個(gè)方面,是性能
    發(fā)表于 07-22 06:50

    基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化

    基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化 隨著Intenet的日益發(fā)展和普及,網(wǎng)絡(luò)在嵌入式系統(tǒng)中應(yīng)用非常廣泛,越來(lái)越多的嵌入式設(shè)備采用Linux操作系統(tǒng)。
    發(fā)表于 10-22 20:48 ?1098次閱讀
    基于<b class='flag-5'>Linux</b>的Socket網(wǎng)絡(luò)編程的<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>

    你知道linuxcache memory?

    當(dāng)你讀寫文件的時(shí)候,Linux內(nèi)核為了提高讀寫性能與速度,會(huì)將文件在內(nèi)存中進(jìn)行緩存,這部分內(nèi)存就是Cache Memory(緩存內(nèi)存)。即使你的程序運(yùn)行結(jié)束后,Cache Memory
    發(fā)表于 04-26 15:49 ?1257次閱讀

    Linux CPU的性能應(yīng)該如何優(yōu)化

    Linux系統(tǒng)中,由于成本的限制,往往會(huì)存在資源上的不足,例如 CPU、內(nèi)存、網(wǎng)絡(luò)、IO 性能。本文,就對(duì) Linux 進(jìn)程和 CPU 的原理進(jìn)行分析,總結(jié)出 CPU 性能
    的頭像 發(fā)表于 01-18 08:52 ?3428次閱讀

    Linux內(nèi)核文件Cache機(jī)制

    Linux內(nèi)核文件Cache機(jī)制(開關(guān)電源技術(shù)與設(shè)計(jì) 第二版)-Linux內(nèi)核文件Cache機(jī)制? ? ? ? ? ? ? ??
    發(fā)表于 08-31 16:34 ?4次下載
    <b class='flag-5'>Linux</b>內(nèi)核文件<b class='flag-5'>Cache</b>機(jī)制

    cache的排布與CPU的典型分布

    對(duì)cache的掌握,對(duì)于Linux工程師(其他的非Linux工程師也一樣)寫出高效能代碼,以及優(yōu)化Linux系統(tǒng)的
    的頭像 發(fā)表于 10-18 09:01 ?2001次閱讀

    Cache性能優(yōu)化精彩問(wèn)答38條

    占用非常大的面積,大概在一半以上,而且一個(gè)好的 Cache 的設(shè)計(jì)復(fù)雜度非常高,可能比較 CPU 的 Pipeline 還要復(fù)雜。這里要考慮成本,設(shè)計(jì)復(fù)雜度,或者其他方面的考慮。你知道 L1
    的頭像 發(fā)表于 01-11 09:34 ?1409次閱讀

    影響Linux性能的因素與優(yōu)化方法

    ,那么linux作為一個(gè)開源平臺(tái),最終要實(shí)現(xiàn)的是通過(guò)這些開源軟件的支持,以最低廉的成本,達(dá)到應(yīng)用最優(yōu)的性能。因此,談到性能問(wèn)題,主要實(shí)現(xiàn)的是linux操作系統(tǒng)和應(yīng)用程序的最佳結(jié)合。
    的頭像 發(fā)表于 04-12 09:18 ?874次閱讀

    Linux內(nèi)核slab性能優(yōu)化的核心思想

    今天分享一篇內(nèi)存性能優(yōu)化的文章,文章用了大量精美的圖深入淺出地分析了Linux內(nèi)核slab性能優(yōu)化的核心思想,slab是
    的頭像 發(fā)表于 11-13 11:45 ?688次閱讀
    <b class='flag-5'>Linux</b>內(nèi)核slab<b class='flag-5'>性能</b><b class='flag-5'>優(yōu)化</b>的核心思想

    如何優(yōu)化Linux服務(wù)器的性能

    優(yōu)化Linux服務(wù)器的性能是一個(gè)綜合性的任務(wù),涉及硬件、軟件、配置、監(jiān)控等多個(gè)方面。以下是一個(gè)詳細(xì)的指南,旨在幫助系統(tǒng)管理員和運(yùn)維人員提升Linux服務(wù)器的
    的頭像 發(fā)表于 09-29 16:50 ?404次閱讀
    线上百家乐官网是如何作弊| 威尼斯人娱乐城老| 百家乐官网平投注法| 海尔百家乐的玩法技巧和规则| 属虎和属猴牛人做生意| 菲律宾百家乐官网娱乐场| 平博百家乐官网游戏| 棋牌游戏源码| 威尼斯人娱乐城真钱游戏| 十三张百家乐的玩法技巧和规则| 百家乐赌博代理荐| 澳门百家乐官网经历| 抚顺县| 八大胜备用网址| 大发888 dafa888 大发官网| 百家乐筹码桌布| 百家乐路单下注| 真人百家乐官网蓝盾娱乐平台| 申请百家乐官网会员送彩金| 百家乐官网开户平台| 富易堂百家乐官网娱乐城| 余江县| 星际娱乐城| 棋牌易发| 大发888优惠红利代码| 免费百家乐统计工具| 德晋百家乐的玩法技巧和规则| 喜力百家乐的玩法技巧和规则| 真人百家乐软件云南景| 百家乐赌博在线娱乐| 百家乐任你博娱乐网| 百家乐技论坛| 澳门百家乐鸿运| 乐宝百家乐娱乐城| 7位百家乐官网扑克桌| 金界百家乐官网的玩法技巧和规则| 百家乐官网实时赌博| 百家乐官网官网游戏| 澳门百家乐官网官网站| 百家乐官网技巧秘| 百家乐官网视频画面|