VM, TLB及hugetlbfs

Linux大页与小页:从TLB原理到配置实战 虚拟内存分页机制是操作系统的基石,Linux默认4KB小页在高并发、大内存场景下会导致TLB miss频繁,内存地址翻译开销急剧上升。大页(HugePages)通过将页表条目放大为2MB甚至1GB,有效减少页表体积和TLB miss,提升数据库、Java应用等高频内存访问的性能。透明大页THP虽可自动管理,但可能引发延迟抖动,需谨慎取舍。本文深入探讨大页与小页的分页原理、静态预留与THP的选型对比、hugetlbfs配置实操以及性能验证与排查技巧,帮助开发者在实际工程中合理运用大页优化内存访问路径。 阅读详情

VM是计算机体系结构中非常重要的一部分。其中涉及CPU、操作系统等。
除了一些嵌入式和某些Cray公司的CPU,现代CPU几乎全部使用了VM的概念。在CPU内部,与之相对应的两个部件分别为MMU和TLB。本文介绍VM,TLB及Linux系统中常会用到的hugetlbfs。

下面首先介绍何谓VM。
众所周知,计算机的存储由register, cache, memory和disk形成hiberarchy。为了更有效的进行内存管理和操作,比如代码共享、内存保护等,人们提出了VM的概念。VM是对物理内存的一种抽象。通过硬件异常,内存地址翻译,主存,磁盘文件和内核文件的交互,VM为每个进程提供了一个大的、一致的、私有地址空间。VM提供三个重要的功能:1.将主存看成磁盘地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存间传递数据,从而高效的使用主存;2.为每个进程提供一致的地址空间,从而简化存储器管理;3.保护了每个进程的地址空间不被其他进程破坏。

32位操作系统中,每个进程拥有4GB虚拟空间,其中3GB用于用户空间,1GB属于内核空间。用户空间从0x08048000地址开始存放应用程序的文本段和数据段,在0x40000000开始存放共享库,在0xc000000向下开始栈。这些虚拟地址按照默认4KB的大小进行分页,并以页为单位与内存进行映射。注意该映射并非连续,很多情况下是非连续的。这种映射需要虚拟地址到物理地址之间的地址翻译。这些操作由MMU完成。

对于一个虚拟地址,MMU首先根据地址中的PTE对TLB进行查询,如果命中,则根据页表中的物理地址首地址加上虚拟地址偏移量形成物理地址。如果不命中,则TLB从L1中查询页表,L1从主存查询页表,直至页表被放置在TLB中,从而完成虚拟地址到物理地址的翻译。

页表可能存放在TLB,L1和主存中。每个进程的控制数据结构里面都有一个当前页表的地址,并把此地址放在PDBR页表基址寄存器中。在进程切换的时候,该寄存器同时发生改变,从而实现每个进程虚拟空间的不同。

对于小的VM页面而言,可以有效的组织物理内存,避免物理内存的浪费。但如果我们申请的地址空间比较大,如几百兆的地址空间,这时如果对该地址空间进行持续的操作,会造成TLB的颠簸,即,页面不断的调入调出,造成VM页面调度的巨大压力。为了解决这个问题,产生了huge page的操作。即页面不再是默认的4K,而是4M甚至更多。这样虚拟地址在物理内存中的映射会变成较大的连续空间,并且每个页表对应的物理空间也更大,可以有效的解决页面调度问题。(如果页面过小,则会造成内存碎片,严重可能造成必须重启系统来解决应用程序的稳定)。

linux操作系统中,对应的方法是使用hugetlbfs。通过mount一个大页文件系统,然后通过mmap的文件映射,使得该文件系统中的内存操作实现大页调度,从而解决TLB shrashing的问题

 
跨内核实时更新:如何实现 hugetlbfs 巨页的无缝保留与恢复? 本文探讨了Linux内核实时升级中的HugePages保留难题。随着6.19内核引入kexec切换和实时更新协调器,宿主机内核升级已能在不中断虚拟机的情况下进行,但基于hugetlbfs的大页内存仍无法保留。LSFMM&BPF峰会上提出的新架构通过三阶段方案解决该问题:冻结与固定内存页、序列化元数据、新内核重建恢复。设计面临巨页过度分配和CMA兼容性等挑战,目前采取预分配调整和禁用CMA等临时方案。首个补丁已提交,虽需重构部分底层架构,但该特性的实现将显著提升虚拟化环境下的内核热更新能力。 阅读详情

相关推荐

Linux大页内存与OpenSSL硬件加速:系统级性能优化实战

在计算机系统性能优化中,内存访问效率和加密计算开销是两个关键瓶颈。内存访问效率的核心在于虚拟地址到物理地址的转换速度,这依赖于TLB(Translation Lookaside Buffer)缓存。当处理海量数据时,频繁的TLB缺失会严重拖慢CPU。大页内存技术通过增大内存页尺寸,显著提升TLB命中率,从而优化内存密集型应用的性能。另一方面,TLS/SSL等加密操作是计算密集型任务,纯软件实现会消耗大量CPU资源。硬件加速技术通过专用加密协处理器(如NXP的CAAM模块)卸载这些计算,实现数量级的吞吐量提升

weixin_33937913的博客 440

TLB的那些事儿

这两天因为某些原因,好好地研究了一下Intel的手册,比较系统地学习了一下和TLB相关的知识。以下内容主要来自Intel手册第三卷的第4章,第11章和第28章。 我们知道,现在内存寻址基本采用的是页表翻译机制,即给定一个虚拟地址,经过2~4层页表,得到一个物理地址。虽然该过程一般由硬件(MMU)完成,但是也会有一定的延迟。因此,为了加速页表翻译的过程,一般的处理器都会有一个翻译信息的缓存机制

omnispace的博客 9051

Linux HugePages 快速配置:从页表原理到 MySQL/PostgreSQL 落地

Linux 内存管理以 4KB 页为基本单位,当进程常驻内存达到几十 GB 时,页表项数量激增,TLB 缓存压力导致内存访问延迟上升。HugePages 通过将物理内存页放大至 2MB 甚至 1GB,显著减少页表项数量,降低 TLB miss,同时可将大页锁定于物理内存避免 swap,是数据库、Java/Go 大堆服务及 DPDK 等高性能场景的常见优化手段。配置前需通过 /proc/meminfo 确认当前池状态,并检查 CPU 的 pse/pdpe1gb 标志及内核 HUGETLBFS 支持。实际操作涵

weixin_29248653的博客 206

Linux内核巨页代码解析和使用

前言 巨页的实现,涉及到两个模块:hugetlb 和 hugetlbfs。 hugetlb 相当于是 huge page 页面管理者,页面的分配及释放,都由此模块负责。 hugetlbfs 则用于向用户提供一套基于文件系统的巨页使用界面,其下层功能的实现,则依赖于 hugetlb。 目录 1、hugetlb模块 2、hugetlbfs模块 3、使用巨页 3.1、 mmap方式 3.2...

3593

Linux HugePages配置实战:从TLB优化到数据库调优

操作系统以分页机制管理内存,默认4KB小页在进程常驻内存巨大时极易造成TLB缓存失效,每次访问都需要内核遍历多级页表,导致CPU系统态飙升、性能骤降。HugePages(大页)通过将内存页扩展至2MB甚至1GB,大幅提升TLB覆盖范围,是解决这类问题的关键技术。为保障数据库、缓存等大内存应用的低延迟,合理配置HugePages可有效降低内存访问开销。然而,其配置涉及内核参数sysctl、hugetlbfs挂载、透明大页(THP)与NUMA节点预留等环节,一步不慎便可能陷入预留失败、应用OOM等陷阱。围绕需求

weixin_27102543的博客 315

Linux HugePages配置实战:原理、步骤与避坑指南

Linux内存管理中,传统4KB页面对大内存应用会造成大量页表项,导致TLB命中率下降,进而拖累数据库、虚拟化等场景的性能。HugePages通过将内存页扩大为2MB甚至1GB,显著缩减页表项数量,提升TLB命中率,是Oracle、MySQL、Java堆及KVM等负载的常见调优手段。透明大页THP虽零配置,但自动内存规整可能引发卡顿,通常建议关闭。本文从原理与适用场景切入,系统讲解静态HugePages的检查、计算、配置及验证流程,并梳理memlock、cgroup、NUMA等常见坑点,帮助DBA与运维稳妥

weixin_29597551的博客 123

hugetlbfs的使用测试

hugetlbfs CPU缓存中有一组缓存专门用于缓存TLB,但其大小是有限的。当采用的默认页面大小为 4KB,其产生的TLB较大,因而将会产生较多 TLB Miss 和缺页中断,从而大大影响应用程序的性能。操作系统以 2MB 甚至更大作为分页的单位时,将会大大减少 TLB Miss 和缺页中断的数量,显著提高应用程序的性能。这也正是 Linux 内核引入大页面支持的直接原因。好处是很明显的,假设应用程序需要 2MB 的内存,如果操作系统以 4KB 作为分页的单位,则需要 512 个页面,进而在 TL

weixin_48101150的博客 4618

Linux HugePages配置实战:从TLB原理到数据库性能优化

Linux内存管理中,默认4KB小页在数据库、嵌入式等内存密集场景下,容易引发TLB(页表缓存)频繁未命中,导致访问延迟抖动、内存分配失败等问题。HugePages通过将页表粒度提升至2MB甚至1GB,显著减少TLB miss,提升内存访问效率与系统稳定性。这一技术广泛应用于Oracle、PostgreSQL等数据库的SGA/共享内存配置,也常见于嵌入式Linux的大内存分配场景。掌握HugePages的原理、预算估算、sysctl配置、hugetlbfs挂载及应用接入方法,并规避透明大页干扰、NUMA分配

weixin_33585822的博客 247

数据库修仙秘境篇五——linux巨页内存编程

linux大页内存 HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。 概念 Page Table: page table也就是一种用于内存管理的实现方式,用于物理地址到虚拟之间的映射。因此对于内存的访问,先是访问Page Table,然后根据Page Table 中的映射关系,隐式的转移到物理地址来存取数据。 TLB: Translation Lookaside Buffer (TL

growdu的网络博客 1958

HugePages配置与故障排查:Linux大页内存优化实践指南

在Linux内存管理中,页大小直接影响应用性能。传统4KB内存页在数据库、Java堆等大内存场景下,容易因页表项过多导致TLB miss和缺页中断频繁,进而引发系统抖动和性能瓶颈。HugePages通过将内存页放大到2MB或1GB,显著降低TLB压力,提升内存访问效率。理解内存分页原理、掌握大页选型与内存预留估算,是优化数据库、中间件及Java后端服务的关键基础。本文将详解HugePages的快速配置流程,包括sysctl参数、hugetlbfs挂载、应用侧memlock调整,并结合NUMA架构与透明大页干

weixin_31960565的博客 302

Linux HugePages配置实战:从页表开销到数据库性能优化,彻底解决CPU高占用

在Linux系统调优中,内存管理机制直接影响数据库与中间件的运行效率。操作系统默认以4KB大小的页帧管理物理内存,当服务器内存容量增大时,页表项数量随之膨胀,导致CPU的TLB缓存频繁失效,产生大量TLB miss,进程访问内存时不得不反复查询页表,造成内核态CPU占用居高不下。HugePages技术将内存页粒度提升至2MB甚至1GB,显著压缩页表规模,提升TLB命中率,从而降低CPU开销。该技术尤其适合Oracle、PostgreSQL等共享内存型数据库,以及配置了大堆内存的JVM服务。通过合理配置大页池

weixin_33462927的博客 233

【性能】Linux 页表、透明大页|大页内存|TLB和大页测试工具和指令

目录 页表与MMU CPU访问的是什么地址(虚拟地址,物理地址)? MMU如何工作 MMU对内存的保护 多级页表 一、 内存映射与页表 1. 内存映射 2. 页表 4. 页表的简单工作原理 大页 什么是大内存页huge page? 为什么使用“大内存页”? 1. 大页的优点 2. 大页的缺点 大内存页适用范围 3. 大页的...

小鱼菜鸟的博客 2645

PostgreSQL中idle in transaction状态的5个隐藏危害及实战解决方案

本文深入剖析了PostgreSQL中`idle in transaction`连接状态的五大隐藏危害,包括内存与锁泄漏、VACUUM受阻导致表膨胀、事务ID加速消耗、连接池资源耗尽以及增加故障排查复杂度。文章提供了基于`pg_stat_activity`视图的监控方法、识别高危事务的SQL脚本,并给出了从数据库参数调优(如设置`idle_in_transaction_session_timeout`)到应用层编码规范与连接池配置的完整实战解决方案。

zzz56的博客 237

Linux 大页面使用与实现简介

引言 随着计算需求规模的不断增大,应用程序对内存的需求也越来越大。为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面。 4KB 大小的页面在“分页机制”提出的时候是合理的,因为当时的内存大小不过几十兆字节,然...

1327

机器学习 线性回归 头歌实训

第1关:简单线性回归与多元线性回归 第2关:线性回归的正规方程解 第3关:衡量线性回归的性能指标 第4关:scikit-learn线性回归实践 - 波斯顿房价预测

weixin_57270536的博客 1万+

浅谈声发射振动复合传感器

浅谈声发射振动复合传感器 随着全球经济和自动化工业的迅速发展,人们对设备故障特别是轴承类的故障诊断也日益重视起来了。 为满足客户对旋转仪器轴承异常的精准诊断,单一的依靠振动信号或声信号分析,是很难兼顾轴承的多种异常情况的。 为此,市面上开始着手研发出了可同时分析机械设备的振动信号和声信号的复合型传感器。 初期的复合型传感器主要有 2 种类型,下面以 A、B 来举例说明。 A 型是在被测物表面不同的 2 个位置分别放置声发射(AE)传感器和加速度(ACC)传感器,它虽能一定程度...

pxtech的博客 1152

Oracle HugePages

翻译自https://docs.oracle.com/database/121/UNXAR/appi_vlm.htm#UNXAR391 G.1HugePages概述 HugePages是集成到Linux内核2.6中的功能。启用HugePages使操作系统可以支持大于默认值(通常为4 KB)的内存页。使用非常大的页面大小可以通过减少访问页面表条目所需的系统资源量来提高系统性能。HugePages对于32位和64位配置都是有用的。HugePage的大小从2 MB到256 MB不等,具体取决于内核版本和硬件体.

阿甘修行的专栏 930

Laravel 结合 jwt-auth 实现无状态 API 认证(实战解析)

本文详细解析了如何在Laravel框架中结合jwt-auth实现无状态API认证,包括JWT的优势、环境搭建、Token签发与刷新、API路由保护等实战内容。通过具体代码示例和优化技巧,帮助开发者高效解决跨域认证问题,提升系统安全性。

weixin_29315569的博客 211

Linux Hugetlbfs内核源码简析-----(一)Hugetlbfs初始化

一、引言   为了实现虚拟内存管理机制,操作系统对内存实行分页管理。自内存“分页机制”提出之始,内存页面的默认大小便被设置为 4096 字节(4KB),虽然原则上内存页面大小是可配置的,但绝大多数的操作系统实现中仍然采用默认的 4KB 页面。当某些应用的需要使用的内存达到几G、甚至几十G的时候,4KB的内存页面将严重制约程序的性能。   CPU缓存中有一组缓存专门用于缓存TLB,但其大小是有限...

weixin_30881367的博客 500

逆向工程实战:如何用Frida和IDA破解AppleAccount的X-MMe-Nas-Qualify签名机制

本文通过逆向工程实战,详细解析了如何利用Frida动态Hook和IDA静态分析技术,破解AppleAccount服务中关键的X-MMe-Nas-Qualify签名机制。文章从环境搭建、动态追踪NSMutableURLRequest的签名注入点开始,逐步深入到AuthKit框架的静态剖析与算法还原,最终实现独立的签名生成,为安全研究和自动化测试提供了完整的技术路径。

bush的博客 696

zemax显微镜设计

光学显微镜(Optical Microscope,简写OM)是利用光学原理,把人眼所不能分辨的微小物体放大成像,以供人们提取微细结构信息的。我这里是插入进来之后才反转,如果之前已经在目镜的单独文件夹反转过了就不用了。将目镜的焦距设定为25mm,通过缩放,然后将镜头调转过来。镜头数据中的曲率半径、物距像距都设置为变量。将镜头的焦距整体变为16.25mm。将孔径类型设置为按照光阑尺寸浮动。打开物镜的文件,选择插入镜头。由英国物理学家虎克制作。2、像空间孔径0.25。3、像面大小-0.9。

fendoudecheng的博客 8547

关于PG与Linux的HUGEPAGE/HUGETLBFS

1. PostgreSQL与HUGEPAGE/HUGETLBFS: 当PostgreSQL使用大量连续的内存块时,使用大页面会减少开销,特别是在使用较大的shared_buffers时。要在PostgreSQL中使用此特性,你的内核必须下面两个参数: CONFIG_HUGETLBFS=y CONFIG_HUGETLB_PAGE=y 你还必须调整内核来设置vm.nr_hugepages参数。要估计所需的巨大页面的数量,请启动PostgreSQL,但不启用巨大页面,并使用/proc文件系统来检查postmas

肉啃肉 - 摇滚的IT灵魂 1124

【Bug已解决】Request timed out / API Timeout — Claude Code 请求超时解决方案

方案适用场景推荐指数难度方案一:增加超时大任务处理⭐⭐⭐⭐⭐低方案二:切换 SonnetOpus 太慢⭐⭐⭐⭐⭐低方案三:缩小范围大代码库⭐⭐⭐⭐⭐低方案四:优化网络网络延迟高⭐⭐⭐⭐中方案五:减少 MCPMCP 超时⭐⭐⭐中方案六:流式响应长生成任务⭐⭐⭐低根本原因:请求超时最常见原因是请求体过大(35%)和 Opus 模型推理慢(25%),默认 60 秒超时阈值对大型任务不够最佳实践。

一键难忘的博客 5164

HugeTLBfs

The CPU’s Translation Lookaside Buffer (TLB) is a small cache used for storing virtual-tophysical mapping informat...

cimomi8748的博客 291

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Linux HugePage原理与性能优化实战

内存分页是操作系统管理物理内存的核心机制,传统4KB页面对现代大内存应用存在显著性能瓶颈。通过分析TLB缓存原理可知,增大页尺寸能指数级减少页表项数量,从而降低地址转换开销。HugePage技术提供2MB/1GB大页规格,在数据库、虚拟化等场景中实测可提升31%吞吐量并降低78%TLB缺失率。本文详解Linux内核的hugetlbfs实现机制,包含从系统配置到应用层使用的完整实践方案,特别针对MySQL、Redis等内存敏感型服务给出生产环境调优公式与混合页策略。

weixin_30267785的博客 445

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: What is SWIG
下一篇: 解决Outlook运行慢的问题
DigBug
博客等级 码龄20年 15粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值