页表的再学习
背景
昨天研究了一下 不使用大页内存可能会导致宕机的场景
但是一些数据自己还是没有太弄明白
所以早上在小区走路的时候又看了下 页表和页的关系
感觉多少理解了一些. 所以想着在尝试总结一下.
关于页的来源
现代操作系统基本上都是段页式的内存管理
段主要是区分用途, 比如代码段,数据段,堆区,栈区等.
页主要是进行虚拟地址与物理地址的映射和管理
段式管理在进行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