Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Hugepages你用了吗?–原理概念篇_创想鸟

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)去调用一个实际的物理内存地址

clip_image002

当Hugepage部署后,依然是调用普通的页表。 最大的不同是process pagetable和system pagetable增加了Hugepage属性。所以任何页表中的page条目可以是“regular page” 或者是“huge page”

clip_image004

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 **

闪念贝壳 闪念贝壳

闪念贝壳是一款AI 驱动的智能语音笔记,随时随地用语音记录你的每一个想法。

闪念贝壳 53 查看详情 闪念贝壳

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:检查设置是否生效

系统重启后,启动全部的数据库,通过以下命令检查

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/525844.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PHP框架如何增强电商网站的安全性和稳定性?
上一篇 2025年11月9日 08:02:32
iPhone 17 Pro如何快速优化夜间拍照
下一篇 2025年11月9日 08:02:33

相关推荐

  • VSCode编写Java代码方法_VSCode搭建Java开发环境实战教程

    答案:在VSCode中配置Java开发环境需安装JDK并设置环境变量,再安装VSCode及Java扩展包,即可实现Java项目的创建、编写、运行与调试。它轻量、启动快,支持多语言和丰富扩展,集成Maven/Gradle,适合日常开发。 在VSCode里编写Java代码,说白了,就是把这个轻量级的代码…

    2026年9月21日
    100
  • 在Linux中如何通过命令行安装Java JDK

    在Linux中安装Java JDK可通过包管理器或手动安装,推荐使用系统自带工具安装OpenJDK。对于Ubuntu/Debian系统,先更新软件包列表:sudo apt update,再搜索可用版本:apt search openjdk-*,然后安装指定版本如OpenJDK 17:sudo apt…

    2026年9月20日
    000
  • 如何配置Scala与Java混合开发环境 Scala环境与JDK整合方法

    配置Scala与Java混合开发环境的关键是安装JDK、Scala并统一管理依赖。1. 安装JDK 8或11,配置JAVA_HOME和PATH;2. 安装Scala并设置SCALA_HOME;3. 使用SBT创建项目,配置build.sbt,组织src目录;4. 在IntelliJ IDEA中安装S…

    2026年9月20日
    100
  • 如何在Laravel中实现数据加密

    在laravel中实现数据加密的最直接且推荐方式是使用内置的crypt门面,其基于openssl并默认采用aes-256算法,通过app_key进行加解密。1. 使用crypt::encryptstring()或crypt::encrypt()对字符串或数组/对象进行加密;2. 使用crypt::d…

    2026年9月13日
    100
  • 如何在mysql中迁移分区表数据

    答案:MySQL分区表数据迁移需确保结构兼容性和数据完整性,常用方法包括:1. 使用INSERT INTO…SELECT迁移数据,要求目标表已存在且WHERE条件匹配分区范围;2. 通过mysqldump导出导入,适用于跨实例迁移,操作简单但大表性能差;3. 模拟EXCHANGE PAR…

    2026年9月10日
    100
  • thinkphp8相比thinkphp6有哪些新特性

    ThinkPHP8在性能、架构、功能和开发体验上全面升级,采用全新模块化架构,优化路由解析与数据库查询,提升响应速度;支持PHP 8.0+新特性,代码更简洁高效;增强中间件、路由、模型及验证功能,强化安全防护;兼容TP6代码,无缝升级,降低迁移成本。 ThinkPHP8 相比 ThinkPHP6 进…

    2026年9月10日
    400
  • Oracle DATE类型的时间组件处理与日期存储策略

    Oracle数据库的`DATE`数据类型始终包含日期和时间组件,即使未明确指定时间,系统也会默认填充午夜(00:00:00)。因此,当期望只存储日期时,实际存储的仍会包含时间部分。本文将深入探讨这一特性,并提供在SQL查询和应用程序层面有效管理和显示日期(不含时间)的策略,强调应通过格式化而非尝试修…

    2026年9月9日
    200
  • mysql中如何审计用户操作

    答案:MySQL审计可通过企业版插件、通用日志、触发器或外部工具实现。使用MySQL Enterprise Audit插件可详细记录登录与操作行为;社区版可启用general_log记录所有SQL语句,但影响性能;关键表可创建审计表和触发器追踪DML变更;还可结合Percona、ProxySQL或E…

    2026年9月9日
    100
  • 如何在安装完成后配置表空间管理

    首先创建表空间并指定存储路径与大小,Oracle和PostgreSQL通过CREATE TABLESPACE命令实现;接着可为用户设置默认表空间,避免每次建表显式指定;然后在建表时可通过TABLESPACE子句指定对象存储位置;定期使用系统视图或函数监控表空间使用情况,防止空间不足;当空间紧张时,可…

    2026年9月9日
    000
  • 什么是mysql数据库及其基本概念

    MySQL是开源关系型数据库,基于SQL操作,用于Web开发;包含数据库、表、行、列等基本概念,支持主键唯一标识和外键关联表,常用SQL语句包括SELECT、INSERT、UPDATE、DELETE,广泛应用于电商、博客等需数据持久化与一致性的场景。 MySQL 是一种广泛使用的关系型数据库管理系统…

    2026年9月8日
    100
  • OpenJPA与Oracle:解决4000字节字符串限制警告

    当openjpa在oracle数据库环境中记录“warn: … is being mapped with a handler that may not be able to store values over 4000 bytes/chars long”警告时,这通常意味着实体中某个字符…

    2026年9月8日
    000
  • 数据量大的App制作,数据库如何选型?

    在开发处理大量数据的应用程序时,数据库的选择至关重要。选择一个合适的数据库不仅能确保数据的存储效率和安全性,还能提升应用程序的整体性能和用户体验。以下将从几个关键方面探讨如何为数据量大的app选择合适的数据库。 首先,考虑数据量的大小。 对于数据量庞大的应用程序,首要考虑的是数据库的存储能力和扩展性…

    2026年9月7日
    000
  • 最小化Java中的可变范围:安全有效代码的最佳实践

    本文探讨了缩小Java变量作用域以提升代码可读性、可维护性和安全性至关重要的问题。文章将Java的面向对象方法与C等语言进行了对比,并通过方法封装和受控访问等最佳实践示例,阐述了如何有效地限制变量的作用域。 在Java中,变量的作用域是指程序中可以访问该变量的区域(Mahrsee, 2024)。作用…

    2026年9月7日
    000
  • 解决SQL Server 2016 JRE7更新问题

    解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题解决SQL Server 2016 JRE7更新问题

    安装sql server 2016时,若系统中缺少必要的运行组件,可能会导致安装过程被中断。其中,未安装合适的java运行环境是较为常见的原因之一。为避免此类问题,应在安装前部署与sql server兼容的jre版本,并正确设置相关环境变量。完成配置后,重新启动sql server安装程序即可继续安…

    2026年9月7日 用户投稿
    000
  • Java开发入门必学技能清单

    Java开发入门必学技能清单Java开发入门必学技能清单Java开发入门必学技能清单Java开发入门必学技能清单

    java开发一般指的是javaee方向的开发,从事这一领域需要掌握一系列核心技术,如servlet、jsp、spring框架、hibernate、数据库操作以及web服务等相关知识。 1、 打好JavaSE基础是学习Java开发的前提,无论后续是走JavaEE路线还是转向安卓开发,这都是必不可少的一…

    2026年9月7日 用户投稿
    100
  • 什么是爪哇?为什么在后端开发中受欢迎?

    Java凭借其跨平台兼容性、处理大型应用的能力以及可靠性,成为后端开发领域举足轻重的编程语言。自1995年由Sun Microsystems发布以来,Java已广泛应用于各种后端系统。 其在后端开发中的流行,源于以下几个关键优势: 跨平台运行: Java遵循“一次编写,随处运行”(WORA)原则。借…

    2026年9月7日
    100
  • TypeORM中如何实现递归查询获取父ID?

    TypeORM递归查询:获取父ID及路径 TypeORM自身并不直接支持递归查询,需要借助数据库原生SQL语句或自定义逻辑实现。本文将介绍几种在TypeORM中实现递归查询的方法,以获取指定ID的父ID及完整路径。 场景: 假设数据库表结构如下,id为主键,pid为父ID: +—-+—–+…

    2026年9月5日
    000
  • Oracle和MySQL如何给表添加注释

    在mysql和oracle数据库中, 字段或列的注释是用属性comment来添加。创建新表的脚本中, 可在字段定义脚本中添加comment属性来添加注释。下面就来介绍添加注释的方法,有需要的可以参考一下。 Oracle添加注释(comment) 在Oracle数据库中,字段或列的注释是用属性comm…

    2026年9月5日
    100
  • Java技术受制于国外厂商,如何规避潜在的封锁风险?

    摆脱国外厂商依赖,保障Java技术自主可控 当前,许多Java开发者面临一个现实挑战:核心框架和中间件主要由国外厂商掌控,潜在的封锁风险不容忽视。一旦这些厂商停止更新或调整许可协议,国内开发者将面临巨大困境。如何有效规避这种风险,保障Java技术的自主可控性? 开源Java生态的可靠选择 Oracl…

    2026年9月4日
    300
  • Java技术面临封锁风险吗?如何应对潜在的风险?

    Java技术封锁风险及应对策略 Java凭借其跨平台优势和面向对象特性,在云计算和大数据时代广泛应用。然而,核心框架和中间件主要由国外企业掌控,引发了开发者对其潜在封锁风险的担忧:一旦国外厂商停止更新或调整授权,国内开发者将面临巨大挑战。 专家指出,需具体分析此类风险。历史上,开源软件因商业或法律原…

    2026年9月4日
    200

发表回复

登录后才能评论
关注微信