博文

目前显示的是标签为“Memory Management”的博文

How to deal with VIPT alias? – Page colour

为获得更好的阅读体验,请移步: http://tek-life.github.io/blog/how-to-deal-with-vipt-alias-page-color/ Agenda Introduction Cache aliases issue for VIPT How to solve alias Implement in Linux Introduction VIPT是Cache的一种Policy。如果 Cache_Size/numbers_of_way > Page_Size/Cache_Line_Size 就会产生alias问题。 Cache aliases issue for VIPT 何谓alias If the same PA is mapped into the different VAs, they could have different virtual indexes and certainly has the same physical tags, so multiple cacheline might have data for the single PA. Reference From: http://mail-index.netbsd.org/port-sh3/2006/09/07/0000.html alias会造成什么问题 由于相同的物理页在Cache中有多份拷贝,那么某一份拷贝更改而没有及时刷( clean )到Memory中,其他的Cache拷贝就不能获知其更改,而造成错误。 How to solve alias issue 解决alias问题的方法有以下三种 1. 存在多VA映射的物理页的PTE(page table entry)中的属性全部设置为 uncacheable. 2. flush cache 3. 多VA映射相同的物理页,如果能让VA在索引Cache的时候,都索引到相同的Cache sets中,那就不会产生alias问题了(因为在Cache set中识别Cache是否命中是用Physical Address Tag)。 第一种uncacheable的方法让memory不进Cache缓存的方式不可取,因为会导致系统的性能急剧下降。 ...

认识Linux物理内存管理系统--Buddy System

图片
Agenda 1.        Linux 如何管理物理内存 2.        什么是 Buddy System 3.        如何从 Buddy System 中分配内存 4.        如何释放页到 Buddy System 5.        冷热页 6.        关于 fall-back zone lists 1.        Linux 如何管理物理内存          为了有效的管理物理内存(分配、回收), Linux 将整个物理内存划分为若干个页,对每一个页,都有相关的数据结构来记录该页的状态和使用信息。在 Linux 中,每个页的大小是 4KB. 对于一个 512MB 的物理内存一共有( 512*1024*1024 ) / ( 4*1024 )个页。对于每一个页,在 Linux 中都有一个 struct page 数据结构来记录该物理页的使用情况。所有页的 struct page 结构组成一个连续的数组存放在物理内存的某个地方。某页在物理内存中的物理地址除以 4KB, 就得到该页是第几个物理页索引,然后索引就可以查询 struct page 数组得到该页的具体信息。 图 1. Memory Page          除了使用 struct page 来记录某个 4KB 物理页的状态和使用信息外, Linux 还将整个物理内存根据物理地址划分为不同的区域( zone )。 zone 的划分是与体系结构相关的,对于 X86 , ZONE 可以划分为 DMA 区 [0 , 16MB] 、 NORMAL ...

认识Linux/ARM 中的冷热页

Agenda 1. 何谓冷热页? 2. 冷热页到底起到什么作用? 3. 多大的冷热页最合适? 4. 在Linux / ARM中如何维护冷热页? 4.1 初始化 4.2 怎样增加冷热页库存 4.3 怎样分配冷热页 1. 何谓冷热页? 在Linux Kernel的物理内存管理的buddy system中,引入了冷热页的概念。冷页表示该空闲页已经不再高速缓存中了 ( 一般是指L2 Cache ) ,热页表示该空闲页仍然在高速缓存中。冷热页是针对于每CPU的,每个zone中,都会针对于所有的CPU初始化一个冷热页的per - cpu - pageset . 2. 冷热页到底起到什么积极作用? 作用有3点: 2.1 ). Buddy Allocator在分配order为0的空闲页的时候,如果分配一个热页,那么由于该页已经存在于L2 Cache中了。CPU写访问的时候,不需要先把内存中的内容读到Cache中,然后再写。如果分配一个冷页,说明该页不在L2 Cache中。一般情况下,尽可能用热页,是容易理解的。什么时候用冷页呢?While allocating a physical page frame , there is a bit specifying whether we would like a hot or a cold page ( that is , a page likely to be in the CPU cache , or a page not likely to be there ). If the page will be used by the CPU , a hot page will be faster . If the page will be used for device DMA the CPU cache would be invalidated anyway , and a cold page does not waste precious cache conten...