首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux 启动 大页内存

一、基础概念

  1. 大页内存(Huge Pages)
    • 在Linux系统中,大页内存是一种比普通页(通常为4KB)更大的内存页。它可以减少页表项的数量,从而提高内存管理的效率。例如,常见的2MB大页或者1GB大页。
    • 大页内存将多个连续的小页合并成一个大页,在内存分配和管理时,系统不需要像管理小页那样频繁地更新页表。
  • Linux启动与大页内存
    • 在Linux启动过程中,可以通过内核参数来启用和配置大页内存。内核在初始化内存管理系统时,会根据配置来确定是否使用大页内存以及大页内存的大小等参数。

二、优势

  1. 性能提升
    • 对于一些对内存访问性能要求较高的应用,如数据库管理系统(例如MySQL)、高性能计算应用等。减少页表查找的开销可以提高内存访问速度。
    • 因为大页内存减少了页表项数量,在内存映射操作(如虚拟地址到物理地址的转换)时,可以减少CPU在页表中的查找时间。
  • 内存利用率提高
    • 对于一些需要大量连续内存的应用,大页内存可以减少内存碎片。例如,在分配大块内存时,如果使用小页可能会因为内存碎片而无法分配到足够的连续空间,而大页内存可以更好地满足这种需求。

三、类型

  1. 标准大页(Standard Huge Pages)
    • 这是最常见的大页类型,其大小通常是固定的(如2MB)。在大多数Linux系统中都可以方便地配置和使用。
  • 透明大页(Transparent Huge Pages)
    • 这种大页类型对应用程序相对透明。内核会自动尝试将连续的小页合并成大页,在一定程度上不需要应用程序进行特殊的配置。但是,它在某些情况下可能会带来一些性能问题,比如在内存写操作频繁的场景下可能导致写放大。

四、应用场景

  1. 数据库系统
    • 数据库管理系统通常需要大量的内存来缓存数据和索引。例如,Oracle数据库和MySQL数据库在使用大页内存时,可以提高数据读取和写入的速度,减少内存管理的开销。
  • 高性能计算(HPC)
    • 在科学计算、模拟等高性能计算场景中,应用程序往往需要处理大量的数据并且对内存访问速度非常敏感。大页内存可以提高计算效率。

五、启动时配置大页内存的方法(以标准大页为例)

  1. 临时配置(在本次启动有效)
    • 可以在启动Linux系统时,在GRUB引导菜单中添加内核参数。例如,如果要启用2MB的大页内存,可以在GRUB命令行中添加“hugepagesz = 2M hugepages = N”(N为要启用的大页数量)。假设要启用1024个2MB的大页,命令行参数应为“hugepagesz = 2M hugepages = 1024”。
  • 永久配置
    • 编辑GRUB配置文件(通常是“/etc/default/grub”),在“GRUB_CMDLINE_LINUX”变量中添加相应的内核参数,如上述的“hugepagesz = 2M hugepages = 1024”。
    • 然后更新GRUB配置,执行“sudo update - grub”(对于基于Debian或Ubuntu的系统)或者“sudo grub2 - mkconfig -o /boot/grub2/grub.cfg”(对于基于Red Hat或CentOS的系统)。

如果在启动过程中遇到大页内存相关的问题:

一、可能的原因

  1. 内核不支持
    • 较旧版本的Linux内核可能不完全支持大页内存或者对某些类型的大页内存支持存在问题。
  • 硬件限制
    • 部分硬件平台可能对大页内存的大小或者数量有限制。例如,某些服务器的内存控制器可能不支持较大尺寸的大页内存。
  • 配置错误
    • 如果在GRUB中配置的大页内存大小或者数量超出了系统实际可支持的范围,可能会导致启动失败或者大页内存无法正常启用。

二、解决方法

  1. 检查内核版本
    • 查看当前系统内核版本(使用“uname -r”命令),如果是较旧版本,可以考虑升级内核到支持大页内存功能的版本。
  • 硬件检测
    • 查阅服务器硬件手册,确定其支持的大页内存大小和最大数量限制。如果存在限制,调整GRUB中的配置参数以符合硬件要求。
  • 正确配置
    • 仔细检查GRUB中的大页内存配置参数,确保“hugepagesz”(大页大小)和“hugepages”(大页数量)的值是合理的。例如,要根据系统总内存大小来确定合适的大页数量,避免设置过大导致内存不足或者其他冲突。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux申请大页内存(mmap)

---- 1.为什么要使用大页内存   了解操作系统内存管理的人一般都知道操作系统对内存采用多级页表和分页进行管理,操作系统每个页默认大小为4KB。...操作系统默认支持的大页是2MB,当使用1GB内存时,在页表中将占用 1GB / 2MB = 512个页表项,可以大大提升TLB命中率,进而提升应用性能。...---- 2.怎样使用大页内存 2.1 先预留一定量的大页内存 #先查看系统有多少已经预留的大页内存 # cat /proc/meminfo |grep -i huge #预留192个大页 # sysctl...\n"); getchar(); munmap(m, s); return 0; } ---- 3.最后的话 大页内存的好处不仅是减少TLB未命中次数,而且大页内存分配的是物理内存,不会被操作系统的内存管理换出到磁盘上...,因此不会出现缺页中断,也就不会引入访问磁盘的时延,另外,大页内存在物理上是连续的,对于大内存访问也有一定的加速效果。

11.9K110
  • Linux 标准大页和透明大页

    Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 ) 在 Linux 中大页分为两种:Huge pages ( 标准大页 ) 和 Transparent...内存是以块即页的方式进行管理的,当前大部分系统默认的页大小为 4096 bytes 即 4K。1MB 内存等于 256 页;1GB 内存等于 256000 页。...Huge Pages Huge pages 是从 Linux Kernel 2.6 后被引入的,目的是通过使用大页内存来取代传统的 4kb 内存页面, 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能...这两者最大的区别在于: 标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。...标准大页的页面大小 [root@localhost ~]# grep Hugepagesize /proc/meminfo Hugepagesize: 2048 kB 注:THP 目前只能映射异步内存区域

    5.8K50

    Linux 透明大页 THP 和标准大页 HP

    作者 | JiekeXu 大家好,我是JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Linux 透明大页 THP 和标准大页 HP 目 录 标准大页(HugePages) 透明大页(Transparent...在 Linux 中大页分为两种: Huge pages (标准大页) 和 Transparent Huge pages(透明大页)。...标准大页(HugePages) 标准大页(HugePages)是从 Linux Kernel 2.6 后被引入的,Huge Pages 可以称为大内存页或者大页面,有时候也翻译成大页/标准大页/传统大页...当数据库启动时会分配共享内存段大小,即数据库启动状态时可以使用官方推荐的 hugepages_settings.sh 脚本计算 nr_hugepages 大小。...标准大页只能用于共享内存段等少量类型的内存,一旦将物理内存作为标准大页分配,就不能再将其作为私有内存使用,故不能占用过大的内存,一般情况下以 Oracle 数据库的 SGA 为参考,一个基本公式为:

    3.1K20

    DPDK巨页地址管理Linux内核内存管理内存映射pagemaprdma内存注册

    DPDK巨页地址管理/Linux内核内存管理/内存映射/pagemap/rdma内存/注册术语PFN: 物理地址对应的页帧号:pfn = pte_pfn(*pte)INFINIBAND_USER_MEM...请阅读有关大页的 Linux 内核文档,以获取有关如何保留大页的更多信息。...,也可以通过该文件配置大页面的数目,如:  echo 20 > /proc/sys/vm/nr_hugepages另外,hugepage的默认大小也可以通过配置内核启动参数“default_hugepagesz...不用担心交换——在 Linux 中,大页面无论如何都不能被换出。...请求特定大小的大页面您可以在调用 mmap() 时通过传递一个标志来手动指定所需的页面大小:mmap内存映射原理mmap内存映射的实现过程,总的来说可以分为三个阶段:(一)进程启动映射过程,并在虚拟地址空间中为映射创建虚拟映射区域

    88110

    【Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )

    文章目录 一、物理页释放 __free_pages 函数 一、物理页释放 __free_pages 函数 ---- 页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理页 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理页 的 " 阶数 " , 也就是 要释放的物理页大小 ; 阶 ( Order ) : 物理页 的 数量单位 ,...n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

    12.7K20

    【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

    文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体...SPARSEMEM */ // 页描述数组 struct page *node_mem_map; #endif } 参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构

    6.9K10

    零拷贝内存 or 页锁定内存

    这是一个小实验,在于验证GPU上使用零拷贝内存和页锁定内存的性能差别。使用的是点积计算,数据量在100M左右。...实验步骤很简单,分别在主机上开辟普通内存,页锁定内存以及进行零拷贝内存的操作,看三者哪个完成的时间比较快,具体的代码在最后,这里是实验结果: ?...但是,页锁定内存相比于零拷贝内存到底慢在哪里呢,当然是慢在从主机内存拷贝到显存的时间了,注释掉页锁定的拷贝语句之后,可以得到以下结果: ?...ps:但是,奇怪的是,如果只将a,b内存拷贝的语句注释掉,页锁定内存仍旧可以得到正确的结果,暂时想不明白是为什么 这时就要问了,看起来零拷贝比页锁定要快啊,那还要这个页锁定干嘛呢,当然是有用的,因为...,零拷贝的内容不能缓存在显存里,如果内容要被反复使用,零拷贝就要不停地从内存里取值,增加总线压力,这样相比页锁定也就处于劣势。

    2.1K50

    性能优化:Linux环境下合理配置大内存页

    实际上32位Linux中的进程通常不会那么大的页表。进程不可能用完所有的4GB大小地址空间,甚至有1GB虚拟地址空间分给了内核。...同时Linux不会为进程一次性建立那么大的页表,只有进程在分配和访问内存时,操作系统才会为进程建立相应地址的映射。 这里只描述了最简单情况下的分页映射。实际上页表目录连同页表一共有四级。...因此,决定先使用大内存页来调优系统的内存使用。 大内存页是一种统称,在低版本的Linux中为Large Page,而当前主流的Linux版本中为Huge Page。...那么数据库启动后,会根据SGA_MAX_SIZE分配HugePage内存,这里为10GB,真正Free的HugePage内存为11-10=1G。...另外值得高兴的是,新版本的Linux内核提供了Transparent Huge Pages,以便运行在Linux上的应用能更广泛更方便地使用大内存页,而不仅仅是只有共享内存这类内存才能使用大内存页。

    5.1K50

    【Linux 内核 内存管理】内存管理架构 ③ ( Linux 内核中的内存管理模块 | 页分配器 | 不连续页分配器 | 内存控制组 | 硬件设备内存管理 | MMU | 页表缓存 | 高速缓存 )

    文章目录 一、Linux 内核中的内存管理模块 二、硬件设备内存管理 一、Linux 内核中的内存管理模块 ---- Linux 内核还需要处理如下内容 : ① 页错误异常处理 ② 页表管理 ③ 引导内存分配器...: 页分配器 , 块分配器 , 不连续页分配器 , 连续内存分配器 , 每处理器内存分配器 ; " 页分配器 " 负责分配 内存物理页 , 使用的是 " 伙伴分配器 " ; " 不连续页分配器 " 提供了...vmalloc 函数 用于分配内存 , vfree 函数 用于 释放内存 ; 申请的 " 不连续物理页 “ 可以 映射到 ” 连续的虚拟页 " ; ④ 内存碎片整理 ⑤ 内存耗尽处理 ⑥ 内存控制组...: 控制管理 被 进程 占用的 内存 ; 碎片整理 : 如果 " 内存碎片化 " 严重 , 没有连续物理页 , 需要通过 整理内存碎片 并迁移数据 得到 连续的 物理页 ; 内存回收 : 内存不足时 ,...回收内存 ; ⑦ 页回收处理 二、硬件设备内存管理 ---- 硬件设备内存管理 : ① CPU 处理器 中的 " 内存管理单元 " ( MMU ) 和 高速缓存 ; ② 物理内存 在 " 内存管理单元

    1.5K40

    高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

    1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块....分配到其中的页可能位于物理内存中的任何地方. 通过修改负责该区域的内核页表, 即可做到这一点. ? ?...因为用于vmalloc的内存页总是必须映射在内核地址空间中, 因此使用ZONE_HIGHMEM内存域的页要优于其他内存域. 这使得内核可以节省更宝贵的较低端内存域, 而又不会带来额外的坏处....其中依次映射了3个(假想的)物理内存页, 在物理内存中的位置分别是1 023、725和7 311....接下来从物理内存分配各个页 最后将这些页连续地映射到vmalloc区域中, 分配虚拟内存的工作就完成了.

    3K10

    系统内存管理:虚拟内存、内存分段与分页、页表缓存TLB以及Linux内存管理

    内存分页内存分页是将整个虚拟和物理内存空间划分为固定大小的连续内存块,称为页(Page)。在Linux下,每一页的大小通常为4KB。...如果有100个进程,就需要400MB的内存来存储页表,这对于内存来说是相当大的开销,更不用说64位环境下了。...这是因为程序执行过程中,访问的页表项相对固定。通过利用TLB,可以大大提高地址转换的速度,加快程序的执行效率。Linux内存管理Linux内存管理涉及逻辑地址和线性地址的转换。...逻辑地址是程序使用的地址,而线性地址是通过段式内存管理映射的地址,也称为虚拟地址。Linux的虚拟地址空间分为内核空间和用户空间两部分。...Linux的内存管理涉及逻辑地址和线性地址的转换,将虚拟地址空间分为内核空间和用户空间,方便进程访问内核空间内存。我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    83180

    【Linux 内核 内存管理】内存映射原理 ② ( 内存映射概念 | 文件映射 | 匿名映射 | 内存映射原理 | 分配虚拟内存页 | 产生缺页异常 | 分配物理内存页 | 共享内存 | 进程内存 )

    文章目录 一、内存映射概念 二、内存映射原理 1、分配虚拟内存页 2、产生缺页异常 3、分配物理内存页 三、共享内存 四、进程内存段的内存映射类型 一、内存映射概念 ---- 内存映射 概念 : "..." 物理内存空间 “ 映射到 ” 虚拟内存空间 " , 其中的数据是随机值 ; 二、内存映射原理 ---- 1、分配虚拟内存页 分配 虚拟内存页 : 在 Linux 系统中 创建 " 内存映射 “ 时..., 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ; 2、产生缺页异常 缺页异常 : Linux 内核在分配 " 物理内存 “ 时 , 采用了 ” 延迟策略 “ , 即进程第一次访问...缺页异常 " 后 , 会 分配 " 物理内存页 “ , 并且将 要映射的文件 的 部分数据 读取到 该 ” 物理内存页 " 中 ; 匿名映射 : 对于 " 匿名映射 " , 直接分配 " 物理内存页 “..., 并且在 " 页表 “ 中 , 将 ” 虚拟内存页 " 映射到 ” 物理内存页 " ; 三、共享内存 ---- 内存映射 与 共享内存 关系 : 文件映射 : 在进程间的 " 共享内存 " 就是使用

    8.5K21

    Linux-3.14.12内存管理笔记【建立内核页表(3)

    前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_range_init...temporary kernel mappings */ FIX_KMAP_END = FIX_KMAP_BEGIN+(KM_TYPE_NR*NR_CPUS)-1, 其中KM_TYPE_NR表示“窗口”数量,在高端内存的任意一个页框都可以通过一个...“窗口”映射到内核地址空间,调用kmap_atomic可以搭建起“窗口”到高端内存的关系,即建立临时内核映射。...,是从页表缓冲空间中申请还是通过memblock算法申请页表内存。...值得注意的是,与低端内存的页表初始化不同的是,这里的页表只是被分配,相应的PTE项并未初始化,这个工作将会交由以后各个固定映射区部分的相关代码调用set_fixmap()来将相关的固定映射区页表与物理内存关联

    1.6K11

    全网最硬核 JVM 内存解析 - 3.大页分配 UseLargePages

    开始) Linux 大页分配方式 - Huge Translation Lookaside Buffer Page (hugetlbfs) Linux 大页分配方式 - Transparent...我们要么缩小程序所需内存,要么增大页大小。我们一般会考虑增加页大小,这就大页分配的由来,JVM 对于堆内存分配也支持大页分配,用于优化大堆内存的分配。那么 Linux 环境中有哪些大页分配的方式呢?...UseHugeTLBFS:明确指定是否使用前面第一种大页分配方式 hugetlbfs 并且通过 mmap 系统调用分配内存。在 linux 下默认为 false。...UseSHM:明确指定是否使用前面第一种大页分配方式 hugetlbfs 并且通过 shmget,shmat 系统调用分配内存。在 linux 下默认为 false。...如果启动参数明确指定 UseLargePages 不启用,那么也不会启用大页分配。

    1.1K10
    领券