cpu cache line学习

cpu cache line 原理:blog.csdn.net/zdl1016/article/details/8882092

关于CPU Cache:cenalulu.github.io/linux/all-about-cpu-cache/

CPU和内存的那些事:www.tuicool.com/articles/mUR3Er

关于cpu的cache:blog.csdn.net/gogdizzy/article/details/9384153

1、cpu的结构


cpu主要包括registers,load/store buffers,L1 cache,L2 cache和多core共享的 L3 cache。

2、各级存储的性能

3、cache分类

按功能划分,缓存可以分为指令缓存(code cache或instruction cache指令缓存)、数据缓存(data cache)、TLB缓存(translation lookaside buffer,加速虚拟地址转物理地址)。按速度划分,当前主流CPU都有二级甚至三级缓存(分别称之为L1,L2,L3)。大部分CPU都把指令缓存和数据缓存分开,以提高性能;也有合并到一起的,降低硬件开销。一般只把数据缓存分级别。

4、cache相关概念

cache line:每次内存和CPU缓存之间交换数据都是固定大小,cache line就表示这个固定的长度。

cache set:一个或多个cache line组成cache set,也叫cache row。

cache entry:缓存条目,包含cache line内容(value)和对应的地址(key),可以看做是哈希表中的一项。

cache hit:缓存命中,查找的地址在cache中。

cache miss:缓存未命中,查找的地址不在cache中。

hit rate:命中率,cache hit /(cache hit + cache miss)。

5、cache entry

cache由若干个cache entry组成(个人理解),cache entry由以下三部分组成。

tag:包含部分内存地址

data block:就是一个cache line的内容

flag bits:一般包含数据是否有效(valid bit)和数据是否被写(dirty bit),指令缓存因为只读,只需要valid bit,但是不知道具体实现是怎样的。

6、N-way associative

内存数据到cache line的映射策略主要有fully associative,Direct Mapped Cache,N-way associative,N-way associative是fully associative和Direct Mapped Cache的折中。N-way associative将cache划分成2维矩阵,每一行包含N个cache entry,它们对应的内存地址的后几位都是相同的,可以把cache line想象成hashmap,每一个hash link有N个cache line,这N个cache line组成一个cache set。

7、内存地址到cache的映射

一个有效内存地址可以分为

tag:与cache entry中的tag相同

index:表示装入cache set的索引号,对应N-way associative的一个cache set(cache row)。

block offset:表示这个地址在数据块(data block)中的偏移量

举例来说:

对于32位地址总线的系统,如果L1 cache大小为8k(个人理解只算了cache line的大小),每个cache line是64 bytes,4个cache line组成一个cache set。那么总共就有8k / 64 bytes = 128个cache line,每4个组成一组,那就有128 / 4 = 32个cache set,所以block offset占6个bit(2^6=64),index占5个bit(2^5=32),tag占21个bit(32 - 5 - 6)。

那么映射过程(1)根据内存地址中间的5bit计算出index,找到对应的cache set(2)根据最前面的21bit计算出tag,然后遍历cache set找到对应的cache line(3)根据内存地址最后的6bit计算出数据在cache line中的offset,按照数据长度读取cache中的数据。

8、cpu读内存与cache淘汰策略

cpu从来都不直接访问内存, 都是通过cache间接访问内存,每次访问内存时先查看cache中是否有对应地址的数据,如果cache中没有则先分配一个cache entry,然后再把内存中的数据copy到刚刚分配的cache entry的cache line中,再从cache line中读取数据。

cache中包含的cache entry的数目是有限的,并且远小于内存,当cache entry全部都被占用的时候,就需要一个淘汰策略将部分cache entry淘汰掉,一般使用LRU策略。

9、cpu写内存与数据一致性问题

cache中的数据更新后,需要回写到内存,考虑性能和数据一致性,主要有3种回写策略(1)每次更新都回写,也叫write-through cache(2)更新后不回写,标记为dirty,仅当cache entry被evict时才回写(3)更新后,把cache entry送如回写队列,待队列收集到多个entry时批量回写。

有两种情况可能导致cache中的数据过期(1)DMA,有其他设备直接更新内存的数据(2)SMP,同一个cache line存在多个CPU各自的cache中,其中一个CPU对其进行了更新。数据同步一般使用MESI协议和MOESI协议。

10、超线程技术

当发生cache miss时(特别是read cache miss,在cpu运行命令时,read只能是同步的,write可以是异步的),cpu在等待数据从内存读进cache期间,没事可做,CPU在硬件层面,把一个CPU模拟成两个CPU,在上层看来是两个CPU,并发的执行两个线程.,这样当一个线程因cache miss在等待时,另一个线程可以执行。

在64位数据总线的系统中,只有操作的数据小于64bit并且在内存中是64bit对齐且cache在同一个cache line中才能保证是原子操作,如果cache line大于等于64bit并且是64bit的整数倍,那么基本可以认为在内存中是64bit对齐的数据也会保存在同一个cache line中,可以认为是原子的。

在编码中尽量利用cache,减少直接访问内存,减少多个共享变量在同一个cache line中,降低False Sharing现象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,293评论 18 399
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,634评论 0 11
  • Cache entries 数据在主存和缓存之间以固定大小的”块(block)”为单位传递,也就是每次从main ...
    yuwh_507阅读 36,690评论 3 23
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,635评论 0 9
  • 最近事情比较多, 所有搁了些日子才写, 此篇主要讲技术, 不喜绕开。 先声明此篇文章和具体的语言无关,语言之间的比...
    企开老K阅读 4,394评论 0 214