NUMA与英特尔下一代Xeon处理器学习心得(7)

news/2024/7/20 13:46:19 标签: 操作系统, 内存管理
下面介绍 NUMA策略的实现方式和策略
在最新的通用操作系统, 如Windows和linux上, 都不同程度的提供了面向NUMA架构的系统控制和API支持。下面以linux为例,对该类接口进行说明。
 
Linux下的NUMA API
 
版本为2.5之后的linux内核在进程调度,内存管理等方面对NUMA系统做了大量优化。同时,基于2.6内核版本的各主要linux发行版,如Redhat,SUSE等均包括了面向用户空间的numautils工具包,提供对NUMA系统内存策略的监控功能,并开放面向用户空间程序的API接口。该接口习惯上称为NUMA API。
 
NUMA API主要任务是管理NUMA的内存策略。NUMA策略通过几个子系统的协同工作来实现。内核管理进程的内存分配机制以及特殊的内存映射。NUMA API通过新引入的3个内核系统调用来实现这一点。在用户空间中,NUMA API通过libnuma库提供了统一的接口供用户空间程序使用。相对于系统调用,libnuma接口更加清晰易用。同时NUMA API还提供了命令行工具numactl和numastat来帮助系统管理员实现进程级别的策略管理。
 
在Linux上NUMA API支持四种内存分配策略:
 
  1. 缺省(default) -  总是在本地节点分配(分配在当前线程运行的节点上)
  2. 绑定(bind) -  分配到指定节点上
  3. 交织(interleave) -  在所有节点或者指定的节点上交织分配
  4. 优先(preferred) -  在指定节点上分配,失败则在其他节点上分配
 
绑定和优先的区别是,在指定节点上分配失败时(如无足够内存),绑定策略会报告分配失败,而优先策略会尝试在其他节点上进行分配。强制使用绑定有可能会导致前期的内存短缺,并引起大量换页。在libnuma库中,优先和绑定是组合在一起的。通过对线程调用uma_set_strict函数,可以在两种策略间切换。缺省的策略是更加普适的优先策略。
 
策略可以基于进程或内存区域设定。进程策略对整个进程内的内存分配都有效,而内存区域策略作用于指定的内存区域,其优先级比进程策略要高。
 
进程策略   作用于所有由内核分配的内存页,包括malloc, 系统调用中使用的内核级的分配以及文件缓冲区等。唯一的例外是,中断中分配的内存总是在当前节点中。当子进程Fork时,会继承父进程的进程策略。
 
内存区域策略   又称为VMA策略,它允许一个进程为自己地址空间里的一块内存设置策略。内存区域策略比进程策略具有更高的优先级。它的主要优点在于能够在分配发生前进行设置。目前,内存区策略只支持一部分内存机制,如:SYSV共享内存,shmem和tmpfs文件映射,以及hugetlbfs文件系统。在共享内存段或文件映射被删除前,共享内存的区域策略会一直有效。
Linux 系统提供命令行及编程 API 两级用户空间工具来对策略进行控制。

本文转自Intel_ISN 51CTO博客,原文链接:http://blog.51cto.com/intelisn/130461,如需转载请自行联系原作者

http://www.niftyadmin.cn/n/961889.html

相关文章

用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序 - anfflee

文件位置:可以在platform/build/target/product/security/中找到platform.pk8 platform.x509.pem等签名文件,对应不同的权限。 signapk.jar:由/platform/build/tools/signapk/编译产出,可以在/out/host/linux-x86/framework/中找到。 签名…

服务器硬盘型号详解

SAS:串行scsi接口,能够兼容sata接口的硬盘。SATA:串行ata接口,就是我们现在见到的台式机和笔记本硬盘的sata接口。LFF:3.5寸,就是我们一般见到的那种台式机硬盘的大小。SFF:2.5寸(注…

vue使用命令行构建完项目后_使用IDEA工具配置和运行vue项目(详细其中的坑)...

刚来公司实习发现公司的前端使用的是vue,之前根本就没有听说过。然后一上来就需要看代码,but but 就是没有文档什么的东西,就需要自己去研读,我就想去运行其中的前端和后端联调起来方便理解,结果在配置和运行中出现了很…

linux查看硬链接对应的所有文件

在linux中,链接文件分为硬链接和软链接文件两种,其中硬链接通过ln source_file dist_file建立,软链接通过ln -s source_file dist_file建立。 软硬链接的区别:硬链接相当于一个文件两个名称,而软链接相当于创建指向源的…

Windows下给Android app进行系统签名

[sizex-small]在做项目过程中,会碰到部分APP需要系统权限(AndroidManifest.xml中manifest节点中加入android:sharedUserId"android.uid.system"这个属性),如果没有源码环境?那怎么样给自己的APK签名系统权限…

在不知道json格式的情况下如何使用cjson进行解析

假设我们有一个json字符串,但是我们不知道这个json的组织方式,那么如何进行解析呢,下面就给一个小例子。 1、我们的json串如下: {"aStr": "aaaaaaa","subobject_1": {"bStr": &…

android开发框架AndroidAnnotations介绍

虽然我一直很反对框架,但是随着自己开发经验的积累越来越多,也对开发框架持开发态度了,因为很多东西都是重复的,开发框架确实能为自己节省很多时间,优秀的开发框架还能教会你很多软件架构方面的知识。下面介绍开源框架…

python selenium对象怎么序列化_python接口测试之序列化与反序列化(四)

在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象。在python的标准库中,专门提供了json库与pickle库来处理这部分。先来学习json的库…