[转帖] 学习 Linux 大页的内存知识

一、在解释什么情况下需要开启大页和为啥需要开启大页前先了解下Linux下页的相关的知识:
以下的内容是基于32位的系统,4K的内存页大小做出的计算
1)目录表,用来存放页表的位置,共包含1024个目录entry,每个目录entry指向一个页表位置,每个目录entry,4b大小,目录表共4b*1024=4K大小
2)页表,用来存放物理地址页的起始地址,每个页表entry也是4b大小,每个页表共1024个页表entry,因此一个页表的大小也是4K,共1024个页表,因此页表的最大大小是1024*4K=4M大小
3)每个页表entry指向的是4K的物理内存页,因此页表一共可以指向的物理内存大小为:1024(页表数)*1024(每个页表的entry数)*4K(一个页表entry代表的页大小)=4G
4)操作系统将虚拟地址映射为物理地址时,将虚拟地址的31-22这10位用于从目录表中索引到1024个页表中的一个,将虚拟地址的12-21这10位用于从页表中索引到1024个页表entry中的一个。从这个页表entry中获得物理内存页的起始地址,然后将虚拟地址的0-12位用作4KB内存页中的偏移量,那么物理内存页起始地址加上偏移量就是进出所需要访问的物理内存地址。

由于32位操作系统不会出现4M的页表,因为一个进程不能使用到4GB的内存空间,有些空间被保留使用,比如用来做操作系统内核的内存。而且页表entry的创建出现在进程访问到一块内存的时候,而不是一开始就创建。

在32位系统下,一个进程访问1GB的内存,会产生1M(1*1024*1024/4*4/1024/1024)的页表,如果是在64位系统,将会增大到2M。
很容易推算,如果一个SGA设置为60G,有1500个Oracle用户进程(在Linux中每个进程页表独立,都有自己的页表),64位linux的系统上,最大的页表占用内存为:60*2*1500/1024=175G,是的,你没看错,是175G!
二、为什么使用大页?什么时候使用大页?
而在Redhat Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。这种增大的内存页尺寸在Linux 2.1中,称为Big page;在AS 3/4中,称为Hugepage
在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage。
当你主机的物理内存为64G,设SGA>=32G时,建议开启大页

hugepage 优点

对于较大的系统内存以及sga,使用hugepage可以极大程度的提高Oracle数据库性能。

a、Not swappable

无需交换。也就是不存在页面由于内存空间不足而存在换入换出的问题

b、Relief of TLB pressure

减轻TLB的压力,也就是降低了cpu cache可缓存的地址映射压力。由于使用了huge page,相同的内存大小情况下,管理的虚拟地址数量变少。

TLB entry可以包含更多的地址空间,cpu的寻址能力相应的得到了增强。

c、Decreased page table overhead

降低page table负载,对于普通的page,每个entry需要64bytes进行管理,对于50gb的内存,管理这些entry,需要800mb的大小

(50*1024*1024)kb/4kb*64bytes/1024/1024=800mb。

d、Eliminated page table lookup overhead

消除page table查找负载

e、Faster overall memory performance

提高内存的整体性能

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/9207025.html

时间: 2024-08-22 07:23:35

[转帖] 学习 Linux 大页的内存知识的相关文章

【翻译自mos文章】在使用Linux大页内存的配置中,使用drop_cache时导致的ORA-600 [KGHLKREM1]问题

在使用Linux大页内存的配置中,使用drop_cache时导致的ORA-600 [KGHLKREM1]问题 来源于: ORA-600 [KGHLKREM1] On Linux Using Parameter drop_cache On hugepages Configuration (文档 ID 1070812.1) 适用于: Oracle Database - Enterprise Edition - Version 10.2.0.1 and later Generic Linux ***C

Linux大页内存管理等---菜鸟初学

1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 kBHugePages_Total: 0HugePages_Free: 0HugePages_Rsvd: 0HugePages_Surp: 0Hugepagesize: 2048 kB 含义 HugePages_Total: 0 总共大页数目HugePages_Free: 0 空闲数目HugePage

linux 段页式内存管理

http://blog.chinaunix.net/uid-24227137-id-3723898.html 页是信息的物理单位,分页是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率从:或者说,分页是由于系统管理的需要,而不是用户的需求.短是信息的逻辑单位,它含有一组其意义相对完整的信息.分段的目的是为了能更好的满足用户的需求. 进程是如何使用内存的 对于任意一个普通的进程都会涉及到5种不同的数据段, 代码段:存放代码 数据段:存放程序静态分配的变量和全局变量 BSS:未初始化的全局

[转载]linux段页式内存管理技术

原始博客地址: http://blog.csdn.net/qq_26626709/article/details/52742470 一.概述 1.虚拟地址空间 内存是通过指针寻址的,因而CPU的字长决定了CPU所能管理的地址空间的大小,该地址空间就被称为虚拟地址空间,因此32位CPU的虚拟地址空间大小为4G,这和实际的物理内存数量无关.Linux内核将虚拟地址空间分成了两部分: 一部分是用户进程可用的,这部分地址是地址空间的低地址部分,从0到TASK_SIZE,称为用户空间 一部分是由内核保留使

马哥学习linux第2天总结知识

虚拟终端:ctrl +alt +F(1-6)查看当前终端 tty 显示当前使用的shell echo $SHELL 显示当前所有shell cat/etc/shells 输入命令后系统做了哪些 请shell程序找到键入命令所对应得可执行程序或代码并其分析后提交给内核分配资源将其运行起来 在shell中可执行命令有两类 内建命令:由shell自带,而且通过某命令形式提供 外部命令:在当前系统某文件系统路径下对应的可执行文件 由which查找 shell程序搜索可执行程序文件的路径定义在PATH环境

LINUX下为ORACLE数据库设置大页--hugepage

在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage. 为什么 使用大页? LINUX内存的默认块大小是4K如果SGA为:128Gselect 128*1024*1024/4 from dual;33554432个(三千多万),select 128*1024/2 from dual; 65536个每个内存页,有一个页表项(大概10个字节),记录页的状态.位置默认块大小是4K时--页表大小:320M.在大页下2M时,页表只

转:// LINUX下为ORACLE数据库设置大页--hugepage

在Linux中配置hugepage可以提高oracle的性能,减少oracle sga的页交换,类似于aix中的lagepage. 为什么 使用大页? LINUX内存的默认块大小是4K如果SGA为:128Gselect 128*1024*1024/4 from dual;33554432个(三千多万),select 128*1024/2 from dual; 65536个每个内存页,有一个页表项(大概10个字节),记录页的状态.位置默认块大小是4K时--页表大小:320M.在大页下2M时,页表只

第一天-学习linux运维

今天购买了老男孩教育的linux运维课程,决定系统学习linux运维相关技术知识,每天晚上至少看一个知识点相关的文件目录,一共有120个目录左右,坚持四个月基本上就学完了,加油,你可以的. 今天是学习的第一天. 今天老师讲了一些关于如何学习的内容,学会如何学习很重要,坚持整理总结很重要.老师希望我们不仅要学到技术,更要学习如何思考,学到老师的思想. 老师强调的学好linux运维四项基本原则: 1.设定目标 2.寻找方法 3.勤奋努力 4.持之以恒 李瑞中,加油

Linux HugePages及MySQL 大页配置

http://blog.csdn.net/dba_waterbin/article/details/9669929 ㈠ HugePages简介             HugePages是kernel 2.6引入以便适应越来越大的物理内存        在Linux下.page size默认是4K.如果使用HugePages.默认是2M             再看2个术语:        page table 映射表:物理内存和swap的对应关系.访问内存是先读page table.根据表里的