快速连接
👉👉👉【精选】ARMv8/ARMv9架构入门到精通-目录 👈👈👈
序言
带着问题去学习,关于cache的一些思考:
1、L1/L2/L3 cache到底在哪里?L1/L2/L3 cache分别都是多大?
2、L1/L2/L3 cache的组织形式都是怎样的?n路组相连?
3、你见过VIVT的cache吗?你为什么要学习VIVT的cache? 非常干扰你对cache的理解,还不如不学呢.
4、那么cache是VIPT还是PIPT? 还是在一个core中既有VIPT,也有PIPT?
5、你要学习MESI的原理吗?你能记得住吗?你是不懂MESI,还是不懂cache架构?
6、MOESI又是啥玩意?现在主流的core是MESI,还是MOESI?
7、MESI仅仅是一个协议,总得有硬件来执行这个协议,硬件是谁?
8、MESI这个协议有4个状态,这4个状态记录在哪里?
9、L1/L2/L3 cache中,或者说core cache/cluster cache中,哪些cache的维护遵守了MESI协议,哪些没有遵守?为什么这样设计?
10、cache line中的data是多少个字节? 在分析问题时,你为什么总是按照条件分析,16bytes的cache line是怎样的,64bytes的cacheline是怎样的?难道你不知道,现在主流的arm core的cache line全部都是64bytes?
11、cache的TAG是什么玩意,里面都有什么?别说cache TAG是物理地址?
12、cache line中又都有什么? 为什么没有index?
13、L2 cache到底是在core中,还是在cluster中?
14、假设一块内存配置成了non-cacheable,为什么就不缓存到cache了?
15、页表entry的属性中定义了cache的缓存策略,那如果disable mmu后,那么cpu读写内存时候的缓存策略是什么?
16、做为一名软件工程师,对于L1/L2/L3 cache的缓存策略,哪些可以修改?哪些是硬件定死的不可以修改?
而这些的替换策略又都是怎样的?
17、什么是inclusive cache? 什么是exclusive cache? Strictly和Weakly呢?
18、一些概念的理解,如CCI、SCU、DSU、ACE、CHI ?
19、如何配置一个页面的cacheable属性? 如何配置页表的cacheable属性?
前言
做为一名底层安全工程师、一名一线支持客户的FAE,工作的内容涉及到TF-A、TEE、TA、Linux Kernel、Linux native程序等众多模块,也会涉及到一些硬件模块driver。在这些不同的硬件或系统软件之中,有着不同的memory属性的配置,不同的缓存策略,那么我们在这多硬件多软件通过share memory通信时,就会遇到各种各样的问题,其实很多时候,也都是客户的灵魂一问,为了给客户一个专业的感觉,身为FAE也不得不去弄懂底层深层次的原理....
本人不是什么专家,更不是什么的大佬,也就是看了一些arm文档,加上自己的理解,然后总结出如下文章,当然我在总结的时候,一切都以官方资料为准,尽量不瞎说不乱说,有些查不到的资料我求证了一些ASIC专家。其实cache同其它模块(如MMU、异常、gic...)相比,cache应该算上最难的,不过好在它的大多数行为都是硬件帮我们做好了,所以我们软件就简单了,但是越是硬件自动的行为,对于我们软件工程师理解起来就会吃力,因为看不到资料看不到设计,很多都得靠猜。
最后,希望这系列文章,能够对大家有所帮助。好好学习、天天向上,卷起来同志们。
说明:
- 本系列所讲述的,都是以armv8/armv9架构位基准,如有涉及执行状态,则是aarch64. 如有涉及具体core,则是A710和A53
- 大多数内容来自arm官方文档、少部分咨询了ASIC同事,再加上部分自己的理解...
路漫漫其修远兮,吾将上下而求索。还有太多太多的知识... 加油哈,朋友们!!
关注"Arm精选"公众号,备注进ARM交流讨论区。