20210715_hugepage和hugetlb透明大页的概念
一、关于Hugepage和hugetlb(transparent huge page) 当中涉及的概念:
-
1、mmu ,memory management unit ,处理VA(virtual memory address) 到PA( physical memory address) 之间的转换,mmu是一张表,有虚拟内存到物理内存的对应关系,最核心的是Page Table(页表),每一个条目就是一个PTE(page table entry)。注意:MMU是硬件设备。
-
2、PTE: 页表项(page table entry) 。
-
3、TLB (Translation Lookaside Buffers)快表,MMU内部专用的存放页表的cache。mmu先在TLB当中进行查找,未命中再去外部查找,TLB是一个SRAM。
-
4、PGD(Page Global Directory)->PUD(Page Upper Directory)->PMD(Page Middle Directory)->PT(Page Table)
在内存管理逻辑当中PGD中包含若干PUD的地址,PUD中包含若干PMD的地址,PMD中又包含若干PT的地址,此外每一个进程有一个自己的PGD,可以理解为PGD是进程级别的虚拟(物理)内存管理地址(此处涉及进程的虚拟内存结构)。
-
5、page fault ,当cpu进行访问不存在或者说未分配的物理内存地址的时候,由mmu产生的异常(exception),此时如果出现了该类异常,则会由操作系统内核进行处理,是否地址位置、权限使用合法,合法则分配相应的物理内存。如果进程分配了4G虚拟内存,那么总来说一共会产生
4*1024*1024KB/4KB
次page fault
。 如果是用hugepage 则只会产生4*1024MB/2MB
次page fault
。 -
6、malloc,glibc库当中的方法,本质是封装了
brk
方法和mmap
方法。 -
7、brk,用户申请内存方法,只申请虚拟内存(地址)。
-
8、mmap,用户申请内存方法,可直接申请虚拟内存(地址),也可以通过
MAP_POPULATE
的flag表示进行直接分配使用物理内存(地址)。 说明:mmap函数的flag:
MAP_HUGETLB
-> 是指当中的advice
,函数int madvise(void *addr, size_t length, int advice)
; advice 的类型如果设定为MADV_HUGEPAGE
则会使用透明大页的内存来进行地址分配。 -
10、mlock ,用户申请内存方式之一,指定内存地址空间,直接分配物理内存(地址)。
-
11、vma(virtual memory area),虚拟内存区域。
-
12、buddy system, 是有关内存内存地址分配算法的一套系统算法。详见:buddy_system
二、linxu操作系统关键位置:
1# cat /proc/meminfo | grep -i HugePage
2# 当前操作系统大页内存分配与使用情况。
3
4# echo 1024 > /proc/sys/vm/nr_hugepages
5# 控制分配1024大页内存出来,如果/proc/meminfo当中Hugepagesize: 2048kB 则会马上划分并占用1024*2048kB的内存出来。
6
7# cat /proc/PID/smaps
8# 该文件展示了一个进程的vma的内存相关结构,详见-》https://www.programmersought.com/article/81957428014/
9
10# cat /sys/kernel/mm/transparent_hugepage/enabled
11# 当前透明大页(transparent huge page)是否进行自动分配。有3个策略(always,madvise,never)
12- always始终使用透明大页进行分配
13- madvice则表示在内存分配过程当中针对函数madvise当中int advice的类型设定为MADV_HUGEPAGE的类型进行大页内存分配
14- never 永不使用自动的透明大页分配。
- 原文作者:Kid
- 原文链接:https://shuanglu.life/post/20210715_hugepage%E5%92%8Chugetlb%E9%80%8F%E6%98%8E%E5%A4%A7%E9%A1%B5%E7%9A%84%E6%A6%82%E5%BF%B5/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。