Linux内存管理:NUMA技术详解(非一致内存访问架构)

所谓物理内存,其实就是安装在机器上、处理器可以通过总线访问的存储设备。
在多核系统中,如果物理内存对于所有处理器来说都是不可区分的,并且访问方式相同,则称为UniformMemoryAccess(UMA)架构。
相反,如果将内存分布到多个单元中,靠近内存的CPU访问速度会更快,反之亦然,这就是NUMA(非统一内存访问)架构。
Linux抽象了NUMA的概念,即使硬件是UMA,也可以划分为多个节点。
硬件是NUMA架构,Linux将其视为UMA。
在传统的SMP系统中,处理器共享系统总线。
随着处理器数量的增加,系统总线争用增加,限制了系统的扩展能力。
NUMA技术结合了SMP的易编程性和MPP的易扩展性,有效解决了SMP系统的可扩展性问题,成为主流的高性能服务器架构之一。
系统中,当请求内存时,Linux首先向请求CPU的本地或邻近节点寻找空闲内存。
这是本地分配,可优化内存访问速度。
每个点由多个区域组成,每个区域又由多个页框组成。
NUMA架构的高性能服务器包括HPSuperdome、SGIAltix3000、IBMx440、NECTX7、AMDOpteron等。
从概念上讲,NUMA有多个节点,每个节点有多个处理器,节点内的内存相同,节点之间的内存不同。
节点分为三种类型:本地、邻居和远程。
处理器的内存访问速度由节点之间的距离决定,本地最快,远程最慢。
IA64Linux的NUMA架构服务器的物理拓扑是通过ACPI实现的。
ACPI定义了配置和电源管理,广泛应用于IA-32架构服务器中。
Linux通过系统固件中的ACPI表来获取内存分配的信息。
关键表是SRAT和SLIT。
Linux使用三级结构Node、Zone和Page来描述内存。
节点结构描述了系统内存,系统节点保存在pgdat_list中。
zone代表内存区域,类型有DMA、NORMAL和HIGHMEM。
ZONE_DMA和ZONE_HIGHMEM针对特定的硬件限制,ZONE_NORMAL是剩余内存。
区域跟踪页面框架使用情况、空闲区域和锁定等信息。
NR_RESERVED_HIGHATOMIC保留内存,MANAGED_PAGES由伙伴系统管理。
LOWMEM_RESERVE为更高区域保留内存。
VM_STAT用于区域内存使用统计。
NodeDistance表示节点之间的距离并优化内存分配。
该区域在Linux上由structzone表示。
该结构体包括NR_RESERVED_HIGHATOMIC、MANAGED_PAGES、LOWMEM_RESERVE、VM_STAT等字段。
NUMA调度程序优化内存访问性能,并将进程分配给靠近本地内存的处理器。
O(1)调度程序内置于Linux2.5内核中。
基于此,EirchFocht正在开发一款用户友好的NUMA规划器。
选择HOME节点进行初始负载均衡,并在该节点内执行动态负载均衡。
当负载均衡不好时,会搜索其他节点。
CpuMemSets优化通过将应用程序绑定到处理器和内存来充分利用本地内存访问的优势。
Linux实现了CpuMemSets,目前在Altix3000服务器上使用。
SGIOrigin3000系统实现了CpuMemSets优化的性能。
CpuMemSets在Linux调度和资源分配代码的基础上增加了cpumemmap和cpumemset的两层结构。
CPUMEMMAP映射系统号和应用程序号,CPUMEMSET指定进程被调度在哪些处理器上以及内核或虚拟存储区域可以分配哪些内存块。
CpuMemSets允许更灵活地控制CPU和内存资源分配,而无需重新启动系统。
为了检查LinuxNUMA系统的性能,对SGIAltix350系统进行了测试。
测试包括PrestaMPI测试包和NASANPB测试。
结果表明SGIAltix350系统具有较高的内存访问和计算性能,LinuxNUMA技术已进入实用阶段。

linuxmemmap是什么时候建立的

mem=nn[KMG][KNL,BOOT]当内核无法确定或测试总系统内存时强制使用特定数量的内存与[IA-32]一起使用。
memmap=避免物理地址空间冲突。
Withoutmemmap=PCI设备可以放置属于未使用的RAM的数据地址。
mem=禁用Pentium[BUGS=IA-32]4MBp。
ageforkernelmemory.memmap=ExactMap[KNL,IA-32]启用用户指定的exactE820内存映射设置。
Suchmemmap=ExactMapline可以基于BIOSout进行配置。
putorotherrequirements.Seethememmap=nn@ssoptiondescription.memmap=nn[KMG]@ss[KMG][KNL]强制使用特定的内存区域。
来自ssstoss+nn。

pe系统怎么查看硬件信息linux怎么看dmesg命令

1、dmesg命令简介简介本文主要介绍如何在Linux系统上使用指定的dmesg工具查看服务器硬件信息。
dmesg命令是Linux中查询硬件信息最常用的工具之一。
以CentOS上安装dmesg工具为例:[root@zcwyou~]#yum-yinstallutil-linux2查看硬件命令详细信息:[root@zcwyou~]#dmesg|更多结果如下。
[0.000000]triggercgroupsubsyscpuset[0.000000]triggercgroupsubsyscpu[0.000000]triggercgroupsubsyscpuacct[0.000000]Linux版本3.10.0-862.11.6.el7.x86_64(builder@kbuilder.dev.centos.org)(gccversion4.8.520150623(RedHat4.8.5-28)(GCC))#1SMPTueAug1421:49:04UTC2018[0.000000]命令行:BOOT_IMAGE=/vmlinuz-3.10.0-862.11.6.el7.x86_64root=/dev/mapper/centos-rootrocrashkernel=autord.lvm.lv=centos/rootrd.lvm.lv=centos/swaprhgbquietLANG=en_US.UTF-8[0.000000]e820:BIOS-providedphysicalRAMmap-[0.000000]BIOS-e820:[mem0x0000000000000000-0x0000000000009dff]可用[0.000000]BIOS-e820-[mem0x0000000000100000-0x00000000cf378fff]已使用[0.000000]BIOS-e820:[mem0x00000000cf379000-0x0000f38efff]保留[0.000000]BIOS-e820-[mem0x0x00000000cf38f000-0x00000000cf3cdfff]ACPIdata[0.000000]BIOS-e820:[mem0x00000000cf3ce000-0x00000000cffffff]保留[0.000000]BIOS-e820-[mem0x00000000e0000000-0x00000000effffff]保留[0.000000]BIOS-e820-[mem0x00000000fe000000-0x00000000ffffff]保留[0.000000]BIOS-e820:[mem0x000000010000000-x000000082ffffff]usable[0.000000]NX(ExecuteDisable)protection:activelinux使用dmesg查看硬件详细信息。
3、查看之前信息第15行命令:[root@zcwyou~]#dmesg|head-15结果:[0.000000]Initializingcgroupsubsyscpuset[0.000000]Initializingcgroupsubsyscpu[0.000000]Initializingcgroupsubsyscpuacct[0.000000]Linuxversion3.10.0-862.11.6.el7.x86_64(builder@kbuilder.dev.centos.org)(gcc版本4.8.520150623(RedHat4.8.5-28)(GCC))#1SMPTueAug1421:49:04UTC2018[0.000000]命令行:BOOT_IMAGE=/vmlinuz-3.10.0-862.11.6.el7.x86_64root=/dev/mapper/centos-rootrocrashkernel=autord.lvm.lv=centos/rootrd.lvm.lv=centos/swaprhgbquietLANG=en_US.UTF-8[0.000000]e820:BIOS提供的physicalRAMmap-[0.000000]BIOS-e820:[mem0x00000000000000000-0x000000000009dff]已使用[0.000000]BIOS-e820:[mem0x0000000000100000-0x00000000cf378fff]已使用[0.000000]BIOS-e820:[memm0x00000000cf379000-0x00000000cf38efff]保留[0.000000]BIOS-e820:[mem0x00000000cf38f000-0x00000000cfPI3cdfff]AC数据[0.000000]BIOS-e820-[mem0x00000000cf3ce000-0x00000000cffffff]保留[0.000000]BIOS-e820:[mem0x00000000e0000000-0x00000000effffff]保留[0.000000]BIOS-e820-[mem0x00000000fe000000-0x00000000ffffff]保留[0.000000]BIOSS-e820-[mem0x0000000100000000-0x000000082ffffff]可用[0.000000]NX(ExecuteDisable)保护:activelinux使用dmesg命令直接输出前15行4.查看USB相关信息命令:[root@zcwyou~]#dmesg|grep-iusb结果:[0.428134]ACPI:bustypeUSBregistered[0.428152]usbcore:rregisternewinterfacedriverusbfs[0.428161]usbcore:registerednewinterfacedriverhub[0.428191]usbcore:registerednewdevicedriverusb[1.046066]ehci_hcd:USB2.0'增强'HostController(EHCI)驱动程序[1.046380]ehci-pci0000:00:1a.7:newUSBbu已注册,分配的总线编号1[1.055679]ehci-pci0000:00:1a.7:USB2.0已启动,EHCI1.00[1.055732]usbusb1:找到新USB设备sbusb1:Product:EHCIHostController[1.055739]usbusb1:Manufacturer:Linux3.10.0-862.11.6.el7.x86_64ehci_hcdlinuxdme使用sg命令查看USB信息5.查看DMA信息[root@zcwyou~]#dmesg|grep-idma[0.000000]ACPI:DMAR00000000cf3b3668001C0(v01DELLPE_SC300000001DELL00000001)[0.000000]DMA[mem0x00001000-0x00ffffff][0.000000]DMA32[mem0x01000000-0xffffffff][0.000000]DMAzone-64pagesusedformemmap[0.000000]DMAzone:21pagesreserved[0.000000]DMAzone:3997pages,LIFObatch:0[0.000000]DMA32zone:13198pagesusedformemmap[0.000000]DMA32zone:844665pages,LIFObatch:31[0.044071]DMAR-IR:此系统BIOS已启用interruptremapping[0.972056]DMAR:主机地址宽度40[0.972060]DMAR:DRHDbase:0x000000fed90000flags:0x1[0.972076]DMAR:dmar0:r例如_base_addrfed90000ver1:0capc90780106f0462ecapf020fe[0.972078]DMAR:RMRRbase:0x000000cf4c8000end:0x000000cf4dffff[0.972078]72080]DMAR:RMRRbase:0x000000cf4b1000end:0x000000cf4bffff[0.972081]DMAR:RMRRbase:0x000000cf4a1000end:0x000000cf4a91fff[0.972081]72083]DMAR:RMRRbase:0x000000cf4a3000end:0x000000cf4a3fff[0.972084]DMAR:RMRRbase:0x000000cf4a5000end:0x000000cf4a95fff72085]DMAR:RMRRbase:0x000000cf4a7000end:0x000000cf4a7fff[0.972087]DMAR:RMRRbase:0x000000cf4a9000end:0x000000cf4a9fff72088]DMAR:RMRRbase:0x000000cf4c0000end:0x000000cf4c0ff[0.972090]DMAR:RMRRbase:0x000000cf4c2000end:0x000000cf4c92fff72091]DMAR:ATSR标志:0x0[0.972129]PCI-DMA:使用IO软件反弹缓冲(SWIOTLB)[1.432149][TTM]Zonedma32:可用graphics内存:2097152kiB[1.432154][TTM]初始化DMA池分配器[1.529806]ata1:SATAmaxUDMA/133cmd0xd8e0ctl0xd8d0bmdma0xdc00irq23[1.529813]ata2:SATAmaxUDMA/133cmd0xd8e8ctl0xd8d4bmdma0xdc08irq23[1.681686]ata3:SATAmaxUDMA/133cmd0xd8f0ctl0xd8d8bmdma0xdc20irq22[1.681689]ata4:SATAmaxUDMA/133cmd0xd8f8ctl0xd8dcbmdma0xdc28irq225查看内存信息命令:[root@zcwyou~]#dmesg|grep-imemory输出:[0.000000]基本内存蹦床[ffff8e6580098000]98000size24576[0.000000]在688MBfo处保162MB内存rcrashkernel(系统RAM:32755MB)[0.000000]早期内存节点范围[0.000000]PM-Registerednosaveemory-[mem0x0009e000-0x000fffff][0.000000]PM:注册nosaveemory-[mem0xcf379000-0xcf38efff][0.000000]PM:注册nosaveemory-[mem0xcf38f000-0xcf3cdfff][0.000000]PM:注册nosaveemory-[mem0xcf3ce000-0xcfffff][0.000000]PM:注册nosaveemory-[mem0xd0000000-0xdffffffff][0.000000]PM:注册nosaveemory-[mem0xe0000000-0xeffffffff][0.000000]PM:注册nosaveemory-[mem0xf0000000-0xfdffff][0.000000]PM:注册nosaveemory-[mem0xfe000000-0xffffffff][0.000000]内存-5239464k/34340864kavailable(7348kkernelcode,799656kabsent,800680kreserved,6281kdata,1836kinit)[0.000000]pleasetry'cgroup_disable=内存'optionifyoudon'twantmemorycgroups[0.013720]cgroupsubsysmemory[0.968797]Freeinginitrdmemory:20796kfreed[1.045694]v非olatilememorydriverv1.3[1.045834]crashmemorydriver:version1.1[1.080076]memorymemory118:hashmatches[1.081410]自由表达式dkernel内存:1836kfreed[1.084219]释放未使用的内核内存:832kfreed[1.086287]释放未使用的内核内存:676kfreed[1.432146][TTM]Zonekernel-Availablegraphicsmemory:16382346kiB[1.432149][TTM]Zonedma32:Availablegraphicsmemory:2097152kiB[23.543146]EDACi7core:Driverloaded,1memorycontroller(s)found.linux使用dmesg命令查看内存信息。
6、查看CPU相关信息命令:[root@zcwyou~]#dmesg|grep:icpu输出:[0.000000]Initializingcgroupsubsyscpuset[0.000000]Initializingcgroupsubsyscpu[0.000000]Cgroupsubsysrunningcpuacct[0.000000]smpboot-32CPU允许24hotplugCPU[0.000000]setup_percpu:NR_CPUS:5120nr_cpumask_bits:32nr_cpu_ids:32nr_node_ids:1[0.000000]PERCPU:嵌入式35页/cpu@ffff8e6d8ee00000s104920r8192d30248u262144[0.000000]pcpu-分配:s104920r192d30248u262144alloc=1*2097152[0.000000]pcpu-alloc-[0]0001020304050607[0]0809101112131415[0.000000]pcpu-16000[0]0001020304050607[0]1920212223[0]2425262728293031[0.000000]SLUB:HWalign=64,顺序=0-3,MinObjects=0,CPU=32,节=1[0.000000]RCUrestrictingCPUsfromNR_CPUS=5120tonr_cpu_ids=32。
]smpboot:CPU0Convertingphysical1tologicalpackage0[0.054625]smpboot:CPU0:Intel(R)Xeon(R)CPUE5620@2.40GHz(fam:06,model:2c,stepping:02)Linux使用dmesg命令查看CPU信息7.查看网络信息卡片命令:[root@zcyou~]#dmesg|grep-inic输出结果:[33.487156]bnx20000:01:00.1em2:NICopperLinkisUp,1000Mbpsfullduplex[34.122938]bnx20000:01:00.0em1:NICCopperLinkisUp,1000Mbpsfullduplex[46.657807]virbr0:端口。
1(virbr0-nic)进入阻塞状态[46.657812]virbr0:端口1(virbr0-nic)进入禁用状态[46.657902]设备virbr0-nicenteredpromiscouslymode[46.863299]virbr0:port1(virbr0-nic)enteredblockingstate[46.863306]virbr0:port1(virbr0-nic)enteredlisteningstate[46.980328]virbr0:port1(virbr0-nic)entereddisabledstate使用dmesg命令查找各种硬件的配置。
Linux下使用dmesg命令查看网卡信息。