内存管理相关概念

1. NUMA与UMA

简而言之,UMA的IO、存储是共享方式,通过系统总线共享访问,主要限制是扩展性不好,当处理器容量增加时,会导致效率降低(因为都通过总线访问);而NUMA不同在于处理器被划分成多个节点,每个节点有自己的本地内存资源,当本地内存资源不够时可使用其它节点的存储资源,访问本地资源快于其它节点资源;
服务器体系(SMP, NUMA, MPP)与共享存储器架构(UMA和NUMA)

2. NUMA内存划分

屏幕快照 2019-03-17 17.31.36.png
  • pg_data_t节点,每个节点关联到系统中每个处理器;若是UMA结果,这里只有一个节点;
  • 内存域是ZONES指代的部分,有三个列表,分别对应不同的类型:
enum zone_type {
#ifdef CONFIG_ZONE_DMA
    /*
     * ZONE_DMA is used when there are devices that are not able
     * to do DMA to all of addressable memory (ZONE_NORMAL). Then we
     * carve out the portion of memory that is needed for these devices.
     * The range is arch specific.
     *
     * Some examples
     *
     * Architecture     Limit
     * ---------------------------
     * parisc, ia64, sparc  <4G
     * s390         <2G
     * arm          Various
     * alpha        Unlimited or 0-16MB.
     *
     * i386, x86_64 and multiple other arches
     *          <16M.
     */
    ZONE_DMA,
#endif
#ifdef CONFIG_ZONE_DMA32
    /*
     * x86_64 needs two ZONE_DMAs because it supports devices that are
     * only able to do DMA to the lower 16M but also 32 bit devices that
     * can only do DMA areas below 4G.
     */
    ZONE_DMA32,
#endif
    /*
     * Normal addressable memory is in ZONE_NORMAL. DMA operations can be
     * performed on pages in ZONE_NORMAL if the DMA devices support
     * transfers to all addressable memory.
     */
    ZONE_NORMAL,
#ifdef CONFIG_HIGHMEM
    /*
     * A memory area that is only addressable by the kernel through
     * mapping portions into its own address space. This is for example
     * used by i386 to allow the kernel to address the memory beyond
     * 900MB. The kernel will set up special mappings (page
     * table entries on i386) for each page that the kernel needs to
     * access.
     */
    ZONE_HIGHMEM,
#endif
      // 在防止内存碎片中的伪内存域。
    ZONE_MOVABLE,
#ifdef CONFIG_ZONE_DEVICE
    ZONE_DEVICE,
#endif
    __MAX_NR_ZONES // 结束标志
};
  1. DMA部分标记适合DMA的内存域, 在i386, x86_64下是16M。DMA之理解;
  2. ZONE_DMA32 标记使用32位字可寻址、适合DMA的内存域;32位机器上为空,在AMD64上是0到4G;
  3. ZONE_NORMAL标记可直接映射到内核段的普通域;
  4. ZONE_HIGHMEM标记超出内核段的物理内存;

各个内存域都关联了一个数组,用于组织属于该内存域的物理内存页: struct page
同时,每个节点除了分配本节点的内存外,还会有个备用列表(包含其它节点内存域)用于本节点内存用尽时备用(struct zonelist)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又是一年秋招季,哎呀妈呀我被虐的惨来~这不,前几阵失踪没更新博客,其实是我偷偷把时间用在复习课本了(雾 坚持在社区...
    tengshe789阅读 2,060评论 0 8
  • [转] SMP、NUMA、MPP体系结构介绍 说明:Greenplum是一款基于MPP架构的数据库 原文地址 从系...
    Michael_林阅读 651评论 0 1
  • 抓主线,三个点: 虚拟内存组织 虚拟内存和物理内存的转换 物理内存组织 虚拟内存组织 平时在进程中,所谓的内存地址...
    123archu阅读 3,256评论 1 7
  • 我们的舞蹈学校马上就要考级了,我考的是二级,所以我必须得加强练习,这样才能考及格。老师说一级和二级都...
    刘俊艳阅读 200评论 0 0
  • 东风不怜佳人梦,帘卷折花朱颜瘦。 梧桐哪堪夜雨冷,化作悲风入小楼。 凭栏遥望君至处,此处相思寄月钩。 盼君归期已无...
    二犯阅读 378评论 0 0