内存那些事儿----Huge Page on Power-I

字数 1721阅读 444评论 0赞 0

系列文章,欢迎阅读

内存那些事儿----基础知识I

https://www.talkwithtrend.com/Article/255113

 

内存那些事儿----基础知识II

https://www.talkwithtrend.com/Article/255115

 

内存那些事儿----内存带宽

https://www.talkwithtrend.com/Article/255545

 

内存那些事儿----HBM和GPU算力

https://www.talkwithtrend.com/Article/255551

 

为什么需要Huge Page ?
了解CPU Cache大致架构的话,一定听过TLB Cache。Linux系统中,对程序可见的,

可使用的内存地址是Virtual Address。每个程序的内存地址都是从0开始的。而实际的数据访问是要通过Physical Address进行的。因此,每次内存操作,CPU都需要从page table中把Virtual Address翻译成对应的Physical Address,那么对于大量内存密集型程序来说page table的查找就会成为程序的瓶颈。所以现代CPU中就出现了TLB (Translation Lookaside Buffer)  Cache用于缓存少量热点内存地址的mapping关系。然而由于制造成本和工艺的限制,响应时间需要控制在CPU Cycle级别的Cache容量只能存储几十个对象。那么TLB Cache在应对大量热点数据Virtual Address转换的时候就显得捉襟见肘了。我们来算下按照标准的Linux页大小(page size) 4K,一个能缓存64元素的TLB Cache只能涵盖4K*64 = 256K的热点数据的内存地址,显然离理想非常遥远的。于是Huge Page就产生了。

什么是Huge Page ?
既然改变不了TLB Cache的容量,那么只能从系统层面增加一个TLB Cache entry所能

对应的物理内存大小,从而增加TLB Cache所能涵盖的热点内存数据量。假设我们把Linux Page Size增加到16M,那么同样一个容纳64个元素的TLB Cache就能顾及64*16M = 1G的内存热点数据,这样的大小相较上文的256K就显得非常适合实际应用了。像这种将Page Size加大的技术就是Huge Page。

 

大页(Huge Page ) 和 透明大页 (Transparent Huge Page )

Linux下的大页分为两种类型:标准大页(Huge Page)和透明大页(Transparent Huge Page)。

Huge Page有时候也翻译成 大页,标准大页,传统大页。Huge Page是从Linux Kernel 2.6后被引入的。目的是使用更大的内存页面(memory page size) 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。

透明大页(Transparent Huge Page) 缩写为THP, 这个是RHEL 6开始引入的一个功能。具体可以参考官方文档。这两者有啥区别呢?这两者的区别在于大页的分配机制,标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。相信有不少人将Huge Page和Transparent Huge Page混为一谈。目前透明大页与传统大页联用会出现一些问题,导致性能问题和系统重启。很多数据库,例如Oracle, MongoDB直接 建议禁用透明大页(Transparent Huge Page)。在 Oracle Linux 6.5 版本中, 已经删除了透明大页。

Huge Page 的劣势

ü  Huge Page使用的内存需要预先分配;

ü  Huge Page使用固定大小的内存区域,不会被释放;

ü  对于写密集型的场景,Huge Page会加大Cache写冲突的发生概率。

至此介绍了Huge Page相关的基础概念,后续将介绍如何在Power服务器上使用Huge Page。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表