背景

  现代计算机的内存越来越大,服务器动辄就有上百GB,甚至 TB 级别的内存,很多应用已经可以把全部数据都放入内存,这样,磁盘空间换取内存空间这个传统中虚拟内存最重要的需求已经相当弱化甚至不复存在。当然我们仍然需要虚拟内存的其它好处(进程隔离、内存保护等),但是,虚拟内存最大的缺点:地址转换开销,在很多应用中越来越突出。

  于是,大家想起了 huge page ,huge page 大幅减小了对 CPU 中 TLB 的需求,在某些特殊应用中可以大幅提高性能,在我们的数据库测试中,huge page (还只是 2MB 的hugepage)提高了 40% 的性能。

  目前 huge page 在各平台上的使用很麻烦,并且有很多限制,比如 Linux 上只有私有匿名 page 可以使用 huge page,windows 上使用 huge page (large page) 除了需要私有匿名,还需要特殊权限。

理想中的 huge page 应该是这样的:

  1. 超大 huge page (比如 1GB 的 huge page) 最好通过系统启动参数保留

    • 跟现在一致,不过可以 relax 一下,如果启动参数中未保留,如果系统通过 defrag 可以回收到连续的超 1G 的物理内存,仍可使用
    • 现有 page 实现都需要 page 物理地址按 pagesize 对齐(硬件需求),但是对超大 huge page,我觉得这个需求可以放宽一点,虚拟地址按 pagesize 对齐,物理地址可以只按某个较小的值对齐
  2. Linux transparent huge page 已经做得相当不错了,但是好像不支持 1GB 的 huge page,如果能 transparent 1GB 的 huge page,就更好了
  3. Readonly, 并且 Lock 的非匿名非私有 mmap,应该也可以“尽最大努力”使用尽可能大的 huge page
    • 要更严格一点,如果某个文件某区域已经这样使用了 huge page,后续在同一文件同一(可能交叉)区域的 mmap 与 Readonly & Lock 不兼容,后续的这个 mmap 调用可以失败,这种 case 应该不多,并且大概率是错误的用法,失败完全可以接受。
    • 尽量用更大的(比如 1GB)的 huge page
  4. 硬件厂商应该也与时俱进,huge page 的 TLB 可以适当增加一些

理想的 huge page相关推荐

  1. huge page 能给MySQL 带来性能提升吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 转自公众号:yangyidba 一 前言 最近一直在做性能压测相关的事情,有公众号的读者朋友 ...

  2. 大页(Huge Page)简单介绍

    x86(包括x86-32和x86-64)架构的CPU默认使用4KB大小的内存页面(getconf PAGESIZE),但是它们也支持较大的内存页,如x86-64系统就支持2MB大小的大页(huge p ...

  3. PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意

    标签 PostgreSQL , Linux , huge page , shared buffer , page table , 虚拟地址 , 物理地址 , 内存地址转换表 背景 当内存很大时,除了刷 ...

  4. 技术实践丨PostgreSQL开启Huge Page场景分析

    PostgreSQL用户经常发现,服务端在连接数较大的情况下,会出现系统内存消耗过多的情况,严重者可能会造成OOM.但是服务端配置的共享内存(shared_buffers,wal_buffers等)是 ...

  5. Huge page使用的一些问题

    12c的数据库在安装的时候,有一个检查项目,叫做Maximum locked memory check. 这是要求设置/etc/security/limits.conf中的memlock的值,官方文档 ...

  6. PostgreSQL Huge Page使用最佳实践

    对于重度依赖于内存的应用数据库而言,hugepage是经常会被使用的.例如在Oracle中我们一般建议当SGA大于8GB时使用hugepage,而在postgresql中我们也建议当内存较大的时候开启 ...

  7. linux那些事之page cache

    page cache page cache又称高速缓存,主要是针对文件文件系统,为了减少不必要的磁盘IO操作(读/写)造成卡顿问题,内核将磁盘文件中的内容缓存到内存中,并选择适当时机对磁盘进行读写操作 ...

  8. linux那些事之page fault(AMD64架构)(user space)(2)

    do_user_addr_fault 用户空间地址处理是page fault主要处理流程,x86 64位系统主要是do_user_addr_fault()函数 该处理部分是x86架构特有部分 即与架构 ...

  9. linux那些事之 page translation(硬件篇)

    Page Translation 以<AMD64 Architecture Programmer's manual volums>从硬件角度说明一个虚拟地址如何转成对应物理页.AM64 地 ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(番外)运行不起AWLive的demo的同学请看这里
  2. QIIME 2教程. 15样品分类和回归q2-sample-classifier(2021.2)
  3. Mybatis之批量更新操作
  4. Python 基础中20 个小技巧
  5. 全世界还有44亿人无法上网
  6. 【数据结构与算法】之深入解析“Z字形变换”的求解思路和算法示例
  7. 会计电算化算不算计算机专业,成都会计学校会计电算化专业介绍
  8. 好看的个人主页,个人引导页
  9. Gym 100633G Nano alarm-clocks
  10. 用Python画填色的中国分省地图(数据+源代码)
  11. 关于考研复习数学分析和高等代数
  12. 微软应用商店microsoft store 打不开
  13. leetcode 18. 四数之和 (C++)
  14. 域控服务器组策略管理找不到网络,组策略找不到域服务器解决方法重建SYSVOL和NETLOGON共享...
  15. 什么是虚拟主机?虚拟主机是什么意思
  16. 图书管理系统——C语言课程设计
  17. python3注释_python3的注释
  18. NC Portal单据增加自定义按钮
  19. 【ESP32_8266_WiFi (一)】网络通信基础
  20. 抖音短视频矩阵系统/源码/系统搭建

热门文章

  1. go gorm处理emoji表情
  2. Java内存区域与内存溢出异常
  3. 牛客网 MIKU酱的氪金宝典(BFS)
  4. 博士正科级!年薪32万,广东某地招储备干部
  5. csh shell_0614-同一OS用户并行Shell脚本中kinit不同的Principal串掉问题
  6. SCHURTER推出微型高性能三相电源滤波器
  7. UCanCode发布升级版本E-Form++可视化源码组件库2011 第二版!
  8. C++/C++11中std::numeric_limits的使用
  9. 【达内课程】JAVA中数组的使用
  10. 通信学子就业岗位类型简介——GXC