在“Linux页框级内存管理处理细节”一篇博文中,我们谈到内核调用alloc_pages等系列函数分配一个或一片连续的页框。这一系列函数本质上是使用伙伴算法从指定zone_t中取到一个或一片连续的空闲的页框。
正如我们将在以后重点博文“slab分配器”所看到的,内核经常请求和释放单个页框。为了提升系统性能,如果请求单个或释放单个页框时,内核在使用伙伴算法之前多添了一个步骤,即每CPU页框高速缓存。
每个内存管理区定义了一个“每CPU”页框高速缓存,所有“每CPU”高速缓存包含一些预先分配的页框,它们被用于满足本地CPU 发出的单个页内存请求。
更进一步,内核为每个内存管理区和每个CPU提供了两个高速缓存:一个热高速缓存,它存放的页框中所包含的内容很可能就在CPU 硬件高速缓存中;还有一个冷高速缓存。
如果内核或用户态进程在刚分配到页框后就立即向页框写,那么从热高速缓存中获得页框就对系统性能有利。什么意思?我们知道,CPU中的硬件高速缓存存在有最近使用过的页框。而我们每次对页框存储单元的访问将都会导致原来一个存在于硬件高速缓存的一页被替换掉。当然,除非硬件高速缓存包含有一行:它映射刚被访问的 “热”页框单元,那么我们称为“命中”。
反过来,如果页框将要被DMA操作填充,那么从冷高速缓存中获得页框是方便的。在这种情况下, 不会涉及到CPU,并且硬件高速缓存的行不会被修改。从冷高速缓存获得页框为其他类型的内存分配保存了热页框储备。
如果实在理解不了上面对热缓存和冷缓存的定义,那我们就干脆这样理解:热缓存跟CPU有关,要使用到对应CPU的高速缓存,当我们读写一个页面时,如果没有命中硬件高速缓存就替换一个页;冷缓存跟CPU无关,当我
每CPU页框高速缓存
最新推荐文章于 2022-02-10 19:52:46 发布
这篇博文介绍了Linux内核如何利用每CPU页框高速缓存来提升系统性能,特别是在分配和释放单个页框时。文章详细阐述了热高速缓存和冷高速缓存的概念,以及它们在CPU读写操作和DMA操作中的作用。内容涵盖数据结构、分配页框的过程以及释放页框到高速缓存的机制。
摘要由CSDN通过智能技术生成