Hugepages你用了吗?--原理概念篇
Hugepages你用了吗?----原理概念篇Hugepages你用了吗?----测试案例篇引子系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内
Hugepages你用了吗?----原理概念篇
引子
系统进程是通过虚拟地址访问内存,但是CPU必须把它转换程物理内存地址才能真正访问内存。为了提高这个转换效率,CPU会缓存最近的虚拟内存地址和物理内存地址的映射关系,并保存在一个由CPU维护的映射表中。为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。
而在Linux中,内存都是以页的形式划分的,默认情况下每页是4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。
一、hugepages及相关概念
hugepage是在Linux2.6内核被引入的,主要提供4k的page和比较大的page的选择。
有一些显示的概念需要澄清,香港虚拟主机,在我们继续讨论Hugepages之前, 如hugetlb, hugetlbfs
page table(页表)是操作系统上的虚拟内存系统的数据结构模型,用于存储虚拟地址与物理地址的对应关系。
当我们访问内存时,首先访问”page table“,然后Linux在通过“page table”的mapping来访问真实物理内存(ram+swap)
TLB: A Translation Lookaside Buffer (TLB)
TLB是在cpu中分配的一个固定大小的buffer(or cache),用于保存“page table”的部分内容,使CPU更快的访问并进行地址转换。
hugetlb: hugetlb 是记录在TLB 中条目并指向到Hugepage。所以HugePages 通过 hugetlb entries来调用的。
hugetlbfs: 这是一个新的基于2.6 kernel之上的内存文件系统,如同tmpfs。
在TLB中通过hugetlb来指向hugepage。这些被分配的hugepage作为内存文件系统hugetlbfs(类似tmpfs)提供给进程使用。
二、“regular page”和“huge page“的请求过程
当一个进程请求内存时,它需要访问文件系统的“页表”(Pagetable)去调用一个实际的物理内存地址
当Hugepage部署后,依然是调用普通的页表。 最大的不同是process pagetable和system pagetable增加了Hugepage属性。所以任何页表中的page条目可以是“regular page” 或者是“huge page”
HugePage 的尺寸根据内核版本和硬件架构从 2MB 到 256MB , 如下表
HW Platform
Source Code Tree
Kernel 2.4
Kernel 2.6
Linux x86 (IA32)
i386
4 MB
4 MB *
Linux x86-64 (AMD64, EM64T)
x86_64
2 MB
2 MB
Linux Itanium (IA64)
ia64
256 MB
256 MB
IBM Power Based Linux (PPC64)
ppc64/powerpc
N/A **
16 MB
IBM zSeries Based Linux
s390
N/A
N/A
IBM S/390 Based Linux
s390
N/A
N/A
三、 hugepage 优点
1. HugePages 会在系统启动时,直接分配并保留对应大小的内存区域
2. HugePages 在开机之后,如果没有管理员的介入,是不会释放和改变的。
3. Not swappable: HugePages 是不会swap.也就是没有page-in/page-out。HugePages一直被pin在内存中
4. Relief of TLB pressure:
在purge TLB的时候,减少了事物条目的加载,提高了性能。
使用Hugepages后TLB能覆盖更大的内存地址空间,加快地址转换的时间
更少的TLB条目,意味着有更大空间用来记录其他的地址空间
四. 如何配置Hugepages
根据下面的步骤来配置Hugepages,修改Hugepages需要重启机器,使用请计划停机时间。
Step 1: 需要在/etc/security/limits.conf 中设置memlock值(单位KB),该值小于内存大小,例如你的内存大小是64G,有可以设置以下的值
* soft memlock 60397977
* hard memlock 60397977
这个值大于SGA需求并没有什么害处。
如果是Exadata机器,参数要求请参考文档1284261.1
Step 2: 重新登录root和oracle用户,检查memlock limit
$ ulimit -l
60397977
Step 3: 如果你使用11G及以后的版本,AMM已经默认开启,但是AMM与Hugepages是不兼容的,必须先disable AMM。
-----------------------------------------------------------------
禁用memory_max_target和memory_target参数方法
这里注意,官方文档说的是“unset” ,直接alter system set memory_target=0 scope=spfile;是更改不成功的。直接设置为‘0’,就抱如下的错误
ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
ORA-00849: SGA_TARGET 35433480192 cannot be set to more than MEMORY_MAX_TARGET 0.
ORA-01078: failure in processing system parameters
通过创建pfile.ora文件,然后在文件里删除两个参数"MEMORY_TARGET/MEMORY_MAX_TARGET"。然后再创建spfile就可以了。
-----------------------------------------------------------------
Step 4:
确保你的全部实例都已经启动(包括ASM) ,然后根据Document 401749.1 的hugepages_settings.sh去评估需要设置的Hugepages的大小。
$ ./hugepages_settings.sh
...
Recommended setting: vm.nr_hugepages = 1496
注:也可以自己计算需要的Hugepages大小,其实就是Hugepages size> all of the SGA size
Step 5: 编辑/etc/sysctl.conf 设置 vm.nr_hugepages参数:
...
vm.nr_hugepages = 1496
...
Step 6: 停止实例并重启OS系统
Step 7:检查设置是否生效
系统重启后,启动全部的数据库,通过以下命令检查

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

要查询 Oracle 表空间大小,请遵循以下步骤:确定表空间名称,方法是运行查询:SELECT tablespace_name FROM dba_tablespaces;查询表空间大小,方法是运行查询:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

在 Oracle 中获取时间有以下方法:CURRENT_TIMESTAMP:返回当前系统时间,精确到秒。SYSTIMESTAMP:比 CURRENT_TIMESTAMP 更准确,精确到纳秒。SYSDATE:返回当前系统日期,不含时间部分。TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'): 将当前系统日期和时间转换为特定格式。EXTRACT:从时间值中提取特定部分,如年份、月份或小时。

Oracle 视图加密允许您加密视图中的数据,从而增强敏感信息安全性。步骤包括:1) 创建主加密密钥 (MEk);2) 创建加密视图,指定要加密的视图和 MEk;3) 授权用户访问加密视图。加密视图工作原理:当用户查询加密视图时,Oracle 使用 MEk 解密数据,确保只有授权用户可以访问可读数据。

在 Oracle 中查看实例名的方法有三种:命令行中使用 "sqlplus" 和 "select instance_name from v$instance;" 命令。在 SQL*Plus 中使用 "show instance_name;" 命令。通过操作系统的任务管理器、Oracle Enterprise Manager 或检查环境变量 (Linux 上的 ORACLE_SID)。

Oracle 安装失败的卸载方法:关闭 Oracle 服务,删除 Oracle 程序文件和注册表项,卸载 Oracle 环境变量,重新启动计算机。若卸载失败,可使用 Oracle 通用卸载工具手动卸载。

Oracle 无效数字错误可能由数据类型不匹配、数字溢出、数据转换错误或数据损坏引起。排查步骤包括检查数据类型、检测数字溢出、检查数据转换、排查数据损坏,并探索其他可能的解决方案,如配置 NLS_NUMERIC_CHARACTERS 参数和启用数据验证日志记录。

在 Oracle 中创建用户需遵循以下步骤:使用 CREATE USER 语句创建新用户。使用 GRANT 语句授予必要权限。可选:使用 RESOURCE 语句设置配额。配置其他选项,如默认角色和临时表空间。

解决 Oracle 游标关闭问题的方法包括:使用 CLOSE 语句显式关闭游标。在 FOR UPDATE 子句中声明游标,使其在作用域结束后自动关闭。在 USING 子句中声明游标,使其在关联的 PL/SQL 变量关闭时自动关闭。使用异常处理确保在任何异常情况下关闭游标。使用连接池自动关闭游标。禁用自动提交,延迟游标关闭。
