1.浅解Linux内核中NUMA机制(例解析)
浅解Linux内核中NUMA机制(例解析)
传统的SMP(对称多处理器)系统中,CPU数目增加会导致系统总线瓶颈问题,限制可扩展性。NUMA技术通过结合SMP系统的易编程性和MPP(大规模并行)系统的易扩展性,有效解决了SMP系统的可扩展性问题,成为高性能服务器主流架构。河池app源码基于NUMA架构的服务器如HP Superdome、IBM x等。
NUMA系统由多个结点通过高速互连网络组成,每个结点包含一组CPU和本地内存。全系统内存分布于各个结点,不同结点间访问延迟不同。操作系统需感知硬件拓扑结构,javaobject源码优化访问策略。IA Linux中NUMA架构的物理拓扑描述通过ACPI实现。
Linux中使用Node、Zone和页三级结构描述物理内存。Node通过struct pg_data_t结构表示,每个结点维护在pgdat_list列表中。libxml源码Zone表示内存的一段区域,用于跟踪页框使用、空闲区域和锁等信息。当内存压力大时,kswapd被唤醒进行页交换。每个zone有三个阈值,apizza源码用于跟踪内存压力,指导kswapd工作。
NUMA调度器将进程分配至本地内存附近的处理器,优化性能。Linux 2.4内核调度器扩展至2.5时,加入多队列调度器O(1),dwhtml源码并开发结点亲和的NUMA调度器。初始负载平衡在任务创建时进行,动态负载平衡在各结点内实现。CpuMemSets技术允许应用与CPU和内存绑定,充分发挥NUMA系统本地访存优势。
SGI Origin ccNUMA系统实现CpuMemSets,优化性能。Linux NUMA项目实现类似功能,适用于SGI Altix 服务器。cpumemmap和cpumemset结构提供应用CPU和内存亲和关系映射,内核在指定CPU调度任务,并分配指定结点内存。硬分区与软分区技术相比,软分区允许更灵活的CPU和内存控制。
测试验证Linux NUMA系统的性能和效率。在SGI Altix 系统中,通过Presta MPI测试包和NASA的NPB测试,结果显示系统具有高访存和计算性能。更多Linux内核源码高阶知识,可通过开发交流Q群获取,群内提供免费技术分享和资源。加入前名,额外赠送价值的内核资料包。