首页 > 系统相关 >Linux内存管理 - 大页 (二)

Linux内存管理 - 大页 (二)

时间:2023-07-17 17:33:12浏览次数:60  
标签:大页 物理地址 TLB 页表 Linux Page 内存

为了解决页表项过多的问题, Linux提供了两种机制, 就是多级页表和大页。 

一. 在阐述大页的优点之前, 先来看一下内存映射的页表结构。 

  PGD:  Page Global Directory

  PUD: Page  Upper Directory

  PMD: Page Middle Directory

  PTE:  Page Table Entry

二. TLB

  TLB: Translation Lookaside Buffer  旁路转换缓冲, 或称为页表缓冲。 里面存放的是一些页表文件(虚拟地址到物理地址的转换表), 又称为快表技术

如果匹配到逻辑地址就可以迅速找到页框号, 通过页框号与逻辑地址的后12位的偏移得到最终的物理地址。 如果没有在TLB中匹配到逻辑地址, 就出现TLB不命中 (TLB Miss), 需要通过常规的页表查找, 如果TLB足够大, 那么这个转换就会变得迅速, 但是事实是TLB的容量非常小, 一般只有几十项到几百项不等。

举个例子, 假设一个应用程序需要使用8KB的物理内存, 如果使用常规4KB并且使TLB总能命中, 那么至少需要在TLB存放两个表项。 但是如果需要512个页, 那就需要512个表项, 但是TLB容量有限, 随着程序的变大和使用内存的增加, 势必会增加TLB的使用项, 最后导致TLB出现不命中的情况。 

三. 大页的优点 

  • 降低TLB Miss的概率: 大页覆盖更大的连续虚拟地址范围, 使得CPU的TLB命中率大大提高, 减少了遍历页表以从虚拟地址获取物理地址的次数
  • 减少walk page table的长度: 由于大页的页表级数比普通页面级数小1, 所以走表时会高效一些。 

四. 大页的缺点

  • 静态大页要预先分配并重启主机生效
  • 如果分配不当, 有可能造成严重问题 (大页未能使用, 浪费内存;系统内存不足或者交换过多;极高的sys cpu使用率)

五. 大页的分类

  • 静态大页(persistent hugepage): 通过用户自行控制它的分配, 释放, 使用。 
  • 透明大页 (transparent hugepage): 由系统自己控制透明大页的分配, 释放, 使用。 若用户开启透明大页功能, 系统会在后台运行一个khugepage的内核线程扫描系统内存, 将合适的内存合并成为大页, 用户无感。 

标签:大页,物理地址,TLB,页表,Linux,Page,内存
From: https://www.cnblogs.com/nworld/p/17560727.html

相关文章

  • Linux网络编程(socket的udp通信)
    UDP是无连接的,即发送数据之前不需要建立连接,它尽最大努力交付,即不保证可靠交付,在一些要求实时性的通信中多有用到如游戏,视频等,UDP是面向报文的,有别于tcp的一对一通信,udp支持一对一、一对多、多对一和多对多的交互通信等。 一、udp通信用到的相关函数解析intsocket(intdoma......
  • Linux磁盘专题
    物理磁盘名次和其作用盘片:disk盘片上下都有磁头。磁盘面:盘片有上下两面,每一面叫磁盘面磁头:heads每个磁头负责一个磁盘面,负责读取数据、将数据写入磁道。磁头都是固定在机械臂上(机械臂就是磁头臂组支架)磁道:track每个磁盘面上围绕圆心划分出多个同心圆环,每个圆圈叫做磁......
  • Linux磁盘专题-常用分区命令
    划分分区fdisk专门用于划分MBR类型的分区。(mbr分区类型在linx中也叫msdos)注意:fdisk在centos7上已经可以用来划分gpt类型的分区。详细不说了,N年之前学习过gdisk专用与划分gpt类型分区。大致操作和fdisk一样,不记录了,N年前学过。。partedparted之前懒得学,现在看了下也是......
  • Linux磁盘专题-linux文件系统详解
    这可是我几年前的杰作笔记呀.....当初手写计算都会,现在忘光光....物理硬盘Block的概念和作用硬盘底层一次IO就是读、写一次扇区,一个扇区默认是512Byte。读写大量文件如果以扇区为单位会很慢、性能不好,所以出现了逻辑块的概念(logicblock),也就是硬盘Block。逻辑块Block是......
  • Linux下服务service使用记录
    在/etc/systemd/system/路径下添加MyService.service文件并写入一下内容()[Unit]Description=MyService[Service]Type=simple#工作路径WorkingDirectory=/home/software/net5.0/publish#执行的服务的dll文件ExecStart=/usr/bin/dotnet/home/software/net5.0/publish/M......
  • linux搭建code-server及使用中遇到的问题
    系统环境CentOS8.5docker搭建linux不太熟,但是用docker搭建是真的简单,有现成的镜像的话一句命令就可以搞定。dockerrun-itd--namemy-code-server\-p5580:8080\-v/data/mycode:/home/coder\-ePASSWORD=12345678\codercom/code-server:latest--authpassword......
  • linuxIP地址和主机名,再虚拟机中配置linux固定IP
    1.IP地址IPV4版本地址格式:a.b.c.d,其中abcd是0-255的数字可以通过ifconfig查看本机的IP地址2.特殊IP地址127.0.0.1,表示本机0.0.0.0,可以指代本机,也可以在端口绑定中用来确定绑定关系,还可以在IP地址限制中表示所有的IP允许所有IP访问3.主机名每一台电脑除......
  • Linux下建立NFS共享目录
    https://blog.csdn.net/anluo233/article/details/125921403https://blog.csdn.net/zhangxucumt/article/details/125935901......
  • java在指定目录执行linux命令
    在指定目录执行Linux命令的Java实现概述在Java程序中通过执行Linux命令可以实现一些系统级别的操作,比如启动、停止进程,创建、删除目录等。本文将向刚入行的小白开发者介绍如何在Java中执行Linux命令,并指导他完成该过程。步骤步骤动作代码1创建ProcessBuilder对象Pr......
  • 跟运维学 Linux - 01
    跟运维学Linux-01运维的诞生运维工程师有很多叫法:系统运维、Linux工程师、系统管理员...网管可以说是运维工程师最早的雏形。在个人电脑未普及时,大家去网吧玩游戏。玩家:“网关,我的电脑上不了网了”网管负责维修电脑、维修系统、维护网络设备...互联网的发展现在大家在......