首页 > 其他分享 >页表的再学习

页表的再学习

时间:2024-05-26 10:55:56浏览次数:16  
标签:大页 字节 学习 大小 页表 次方 内存

页表的再学习


背景

昨天研究了一下 不使用大页内存可能会导致宕机的场景
但是一些数据自己还是没有太弄明白
所以早上在小区走路的时候又看了下 页表和页的关系
感觉多少理解了一些. 所以想着在尝试总结一下.

关于页的来源

现代操作系统基本上都是段页式的内存管理
段主要是区分用途, 比如代码段,数据段,堆区,栈区等. 
页主要是进行虚拟地址与物理地址的映射和管理

段式管理在进行OOM分析,安全分析时很关键
页式管理在进行性能分析,调优时很关键

操作系统的内存管理的核心其实就是如何更少更快的进行内存管理.
现代操作系统默认的内存页大小一般是 4K字节 4096字节
这一个其实与硬盘的block大小是类似的
页大小时操作系统管理内存的一个最小单元
但是并不是分配内存的最小单元, 还可以分配更小的内存容量. 

内存大小与页表大小

一般情况下内存页面的大小是 4KB 
32位操作系统用来定位这个页面应该就需要 32个bit 也就是 4字节进行位置确定. 
然后通过内存偏移量进行具体内存地址的寻址.
64位的操作系统应该就需要 64个bit 也就是8个字节进行位置确定

这样的话 如果是 1G内存, 那么需要 2的30次方 除以 2的 12次方 也就是 2的18次方个页表项目
2的18次方个页表项目也就是 256K个页表
32位系统就需要 2的2次方 乘以 2的 18次方 也就是 2的20次方字节的 总页表
也就是 1MB 
64位系统翻倍 是2MB
说明 2的2次方是 4字节 2的3次方是 8字节 根据自己转换最容易计算内存大小

对应的如果是一个 600GB的堆区. 
如果使用 4KB的页大小, 那么需要 600*2MB = 1.2GB的页表大小

如果使用 大页内存 使用2MB的大小
那么页表的大小会降低 2的9次方的大小
如果600GB的大页内存区域,也就是需要 2MB左右的大小页表大小

关于大页的性能优化

1. 像是刚才计算的
    大页内存会减少内存页表项目, 查找页时的速度会更快
    因为需要检索的内存减少了, 速度会快, 并且管理成本会低.

2. 减少页表项目大小
    可以减少总的内存使用, 避免内存不足,产生swap导致卡顿
    因为页表项目每个进程是独立的资源, 会导致内存使用量激增.
    因为进程需要隔离, 不同的进程针对相同物理内存地址的虚拟页表项目应该是不同的
    一方面防止有人根据自己的页表项目去猜测别人的页表项目
    另一方面也是为了隔离性提高性能. 

3. 减少TLB的miss    
    页表项目使用TLB 进行快速查找, TLB大小有限,能够映射越多的内存页
    他的性能会也好, 减少TLBmiss 是提高数据库性能的重要方式和方法

标签:大页,字节,学习,大小,页表,次方,内存
From: https://www.cnblogs.com/jinanxiaolaohu/p/18203238

相关文章

  • Z 算法 学习笔记
    问题引入寻找字符串\(T\)在字符串\(S\)中的出现位置。暴力算法暴力枚举\(S\)的每一位作为开头,向后匹配,若能将\(T\)匹配完毕就为\(T\)在\(S\)中的一次出现。记\(S\)的长度为\(n\),\(T\)的长度为\(m\),则时间复杂度最劣为\(O(nm)\)。优化上面的算法有很多冗......
  • 基于Kaggle学习MONAI(三)2D-Segmentation例程代码详解1
    1简介         MONAI网站提供了2D分类/分割、3D分类/分割等例程代码如下图所示,通过学习例程代码,初学者能够尽快掌握MONAI框架,但是由于开源框架软件版本更新较快、各模块功能难以协调等原因,这些例程往往无法在Kaggle平台直接运行。本文对MONAI官网第二个例程,即2D分割......
  • 机器学习 - toad库
    toad是一个Python库,用于数据预处理和特征工程,特别是在金融风控和信用评分建模中应用广泛。以下是toad库中主要函数的详细说明,包括它们的参数和作用:数据转换与预处理1.toad.transformer.WOETransformer作用:将分类变量转换为WOE(WeightofEvidence)值,以便更好地用于模......
  • 关于对于Java中Entity以及VO,以及DTO中Request对象序列化的学习
    关于Serializable的探讨前提引入是由于软件测试上有同学提到说,什么该字段在程序刚运行时,导致jvm激增,所以吸引了我的注意回顾代码MybatisPlusGenerator自动生成的entity中就经常带有这个,而且我在开发代码的时候VO,以及DTO常常是直接复制对应的entity,所以也保不齐我对应......
  • 【python】requests库学习
    一、GET请求1、当使用requests.get(url)方法发送GET请求时,它会向指定的URL发送一个HTTPGET请求,并返回一个包含服务器响应的Response对象。例如:​url="https://api.example.com/data"response=requests.get(url)2、添加URL参数:可以通过将参数作为字典传递给params参数......
  • 视差背景,GODOT游戏引擎学习笔记(五)
    背景图片资源今天周六玩了一天,现在晚上来更新一下帖子。前面几节我们学习了创建一个人物精灵节点使其移动。这节我们来学习创建背景。会用到三个图片文件。我已经上传到csdn了,链接如下:https://download.csdn.net/download/weixin_66990397/89356894?spm=1001.2014.3001.5501......
  • 开坑开坑,GODOT游戏引擎学习笔记(一)
    前言         本人重度游戏玩家,计科专业学生,玩了许多游戏已经逐渐电子羊尾,于是打算学习几个游戏引擎,一个方面是爱好,另一方面也是多掌握点技术。先打算从2D游戏开始学,目前引擎确定为GODOT,一个开源且适合新手的引擎。后续学习unity和虚幻等引擎也会继续更新,同时也会开......
  • Mybatis学习(史上超详细)
    1、Mybatis简介:1.1、MyBatis历史MyBatis最初是Apache的一个开源项目iBatis,2010年6月这个项目由ApacheSoftwareFoundation迁移到了GoogleCode。随着开发团队转投GoogleCode旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。iBatis一词来源于“internet”......
  • 产品经理如何学习大模型?——从“小白”到“大牛”的奇幻旅程
    引言在这个由数据驱动的时代,产品经理们面临着一个全新的挑战——大模型。想象一下,你是一名产品经理,站在一个由代码和算法构成的神秘岛屿前,准备开始一场探索之旅。这场旅程不仅需要勇气,还需要智慧和耐心。那么,如何从一个对大模型一无所知的“小白”成长为一个精通此道的“大......
  • git 入门学习(持续学习ing)
    目录为什么要学习使用Git?什么是Git?Git的下载和安装1.进入Git官网,并跳转到Windows版本下载界面2.下载64位Windows操作系统(也可以根据自己电脑实际信息进行选择)3.下载完成后,双击下载程序,一直点击下一步即可完成安装(一路回车法)4.安装完成后,在桌面空白处点击右键,会发现多了两个菜......