每CPU页框高速缓存

在“Linux页框级内存管理处理细节”一篇博文中,我们谈到内核调用alloc_pages等系列函数分配一个或一片连续的页框。这一系列函数本质上是使用伙伴算法从指定zone_t中取到一个或一片连续的空闲的页框。

正如我们将在以后重点博文“slab分配器”所看到的,内核经常请求和释放单个页框。为了提升系统性能,如果请求单个或释放单个页框时,内核在使用伙伴算法之前多添了一个步骤,即每CPU页框高速缓存。

每个内存管理区定义了一个“每CPU”页框高速缓存,所有“每CPU”高速缓存包含一些预先分配的页框,它们被用于满足本地CPU 发出的单个页内存请求。

更进一步,内核为每个内存管理区和每个CPU提供了两个高速缓存:一个热高速缓存,它存放的页框中所包含的内容很可能就在CPU 硬件高速缓存中;还有一个冷高速缓存。

如果内核或用户态进程在刚分配到页框后就立即向页框写,那么从热高速缓存中获得页框就对系统性能有利。什么意思?我们知道,CPU中的硬件高速缓存存在有最近使用过的页框。而我们每次对页框存储单元的访问将都会导致原来一个存在于硬件高速缓存的一页被替换掉。当然,除非硬件高速缓存包含有一行:它映射刚被访问的 “热”页框单元,那么我们称为“命中”。

反过来,如果页框将要被DMA操作填充,那么从冷高速缓存中获得页框是方便的。在这种情况下, 不会涉及到CPU,并且硬件高速缓存的行不会被修改。从冷高速缓存获得页框为其他类型的内存分配保存了热页框储备。

如果实在理解不了上面对热缓存和冷缓存的定义,那我们就干脆这样理解:热缓存跟CPU有关,要使用到对应CPU的高速缓存,当我们读写一个页面时,如果没有命中硬件高速缓存就替换一个页;冷缓存跟CPU无关,当我

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值