Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1269461
  • 博文数量: 389
  • 博客积分: 2874
  • 博客等级: 少校
  • 技术积分: 3577
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 10:34
文章分类

全部博文(389)

文章存档

2020年(2)

2018年(39)

2017年(27)

2016年(3)

2015年(55)

2014年(92)

2013年(54)

2012年(53)

2011年(64)

分类: LINUX

2017-12-19 14:55:35

内存大页提升性能的方法是通过增大操作系统页的大小来减小页表,从而避免快表(TLB)缺失。
该技术是一种系统优化方法,说白了就是在os层面优化,所以应用范围较广。

稍微介绍下程序优化分类:业务优化,设计优化,系统优化。
业务层面优化就是将软件系统能别干的尽量别干,干的事越少性能越高 等等。
设计优化主要是架构层面,集中式还是分布式,尽量减少io或网络通信,选择合适的算法和数据结构,使用缓存等等。
系统优化就是在操作系统层面针对业务系统的特性作优化,比如linux的调度(cpu亲和性,设置实时处理),磁盘调度算法,内存大页就是在这个层面的。
大页内存也有适用范围,下面这个情况就不适合内存大页:程序耗费内存很小或程序访问内存的局部性较好
了解了局限性,内存大页适用的情况也就明确了:程序耗费内存较大(G级别)并且乱序访问

描述一下内存大页为什么能够避免TLB缺失:
程序访问内存时需要先从页表计算内存的物理地址,再从该地址进行读写,当然中间过程隐藏在os内部。但是程序访问内存是很频繁的,每次都这样计算也太麻烦了(就是说执行速度会很慢),intel为了解决这个问题增设了一个具有并行查找能力的特殊高速缓存,即TLB,用以存放当前访问的那些页表项。因为是缓存,tlb不可能做得很大,通常只存放16~512个页表项。
有了缓存也就有了缓存命中问题,对于常规4K内存页,如果512个表项全用上也就能访问2M的大小,也就是访问这2M大小是最快的,如果再访问其他的2M,就会出现完全不命中(点太背了)。
而对于大型程序这种情况太普遍了,也就是程序一直处于点背状态。
可是使用内存大页基本就能完全避免这种情况,假设页面是2M,也就是说tlb能够缓存1G的内存地址,访问这1G都是最快的。

参考:http://blog.csdn.net/yutianzuijin/article/details/41912871
阅读(3807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~