linux中的numa和swap
一.linux的numa技术(非一致性内存访问)
1.numa的基础认知
       所有处理器都共享系统总线,因此当处理器的数目增大时,系统总线的竞争冲突加大,系统总线将成为瓶颈,所以目前SMP系统的CPU数目一般只有数十个,可扩展能力受到极大限制。NUMA技术有效结合了SMP系统易编程性和MPP(大规模并行)系统易扩展性的特点,较好解决了SMP系统的可扩展性问题,已成为当今高性能服务器的主流体系结构之一。
      现在的机器上都是有多个CPU和多个内存块的。以前我们都是将内存块看成是一大块内存,所有CPU到这个共享内存的访问消息是一样的。这就是之前普遍使用的SMP模型。但是随着处理器的增加,共享内存可能会导致内存访问冲突越来越厉害,且如果内存访问达到瓶颈的时候,性能就不能随之增加。NUMA(Non-Uniform Memory Access)就是这样的环境下引入的一个模型。比如一台机器是有2个处理器,有4个内存块。我们将1个处理器和两个内存块合起来,称为一个NUMA node,这样这个机器就会有两个NUMA node。在物理分布上,NUMA node的处理器和内存块的物理距离更小,因此访问也更快。比如这台机器会分左右两个处理器(cpu1, cpu2),在每个处理器两边放两个内存块(memory1.1, memory1.2, memory2.1,memory2.2),这样NUMA node1的cpu1访问memory1.1和memory1.2就比访问memory2.1和memory2.2更快。所以使用NUMA的模式如果能尽量保证本node内的CPU只访问本node内的内存块,那这样的效率就是最高的。
       针对我的以下机器:node节点的分配情况可以通过lscpu、numactl -H查看

从以上截图,可看出我的机器中节点数,节点cpu和内存的分布情况;
2.numa的控制
   1)打开或关闭
   a.Redhat或者Centos系统中可以通过命令判断bios层是否开启numa(bios会控制numa的打开和关闭)
    # grep -i numa /var/log/dmesg
          如果输出结果为: No NUMA configuration found , 说明numa为disable,如果不是上面内容说明numa为enable,会有节点信息显示;
   2) OS内核,启动时grub设置numa=off;
注意:在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%;
              在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能
3.numa的坑和使用
当你的服务器还有内存的时候,发现它已经在开始使用swap了,甚至已经导致机器出现停滞的现象,这就存在numa的具体使用问题了 ;
   1)内核参数
   a ) 内核参数overcommit_memory :
    它是 内存分配策略,可选值:0、1、2。
0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2:表示内核允许分配超过所有物理内存和交换空间总和的内存
        b)内核参数zone_reclaim_mode,可选值0、1
    a、当某个节点可用内存不足时:
        1、如果为0的话,那么系统会倾向于从其他节点分配内存
        2、如果为1的话,那么系统会倾向于从本地节点回收Cache内存
    b、Cache对性能很重要,所以0是一个更好的选择
   2)修改numa内存分配策略为 interleave=all (在所有node节点进行交织分配的策略)
针对一开始的问题,就可以通过zone_reclaim_mode=0(直到所有节点无内存可用是,才会使用swap)或者 numactl --interleave=all 取消numa node的限制
4.进程的numa策略
    1)每个进程(或线程)都会从父进程继承NUMA策略,并分配有一个优先node。如果NUMA策略允许的话,进程可以调用其他node上的资源。
    2)NUMA的CPU分配策略有cpunodebind、physcpubind。cpunodebind规定进程运行在某几个node之上,而physcpubind可以更加精细地规定运行在哪些核上。
    3)NUMA的内存分配策略有localalloc、preferred、membind、interleave。
    例如:numactl --cpubind=0 --membind=0 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024 用0节点上的cpu和内存来做copy测试;
localalloc规定进程从当前node上请求分配内存;
preferred比较宽松地指定了一个推荐的node来获取内存,如果被推荐的node上没有足够内存,进程可以尝试别的node。
membind可以指定若干个node,进程只能从这些指定的node上请求分配内存。
interleave规定进程从指定的若干个node上以RR(Round Robin 轮询调度)算法交织地请求分配内存
二、linux中的swap
    1.swap的含义:
有二个意思:
     1) 动词,交换,内存和磁盘的颠簸行为。没有文件背景的页面,即匿名页(anonymous page),如堆,栈,数据段等,不是以文件形式存在,因此无法和磁盘文件交
换,但可以通过硬盘上划分额外的swap交换分区或使用交换文件进行交换。即上面swap作为名词的意思。Swap分区可以将不活跃的页交换到硬盘中,缓解内存紧张。
    2)名词,硬盘的swap分区,也可以是文件swap分区。
注意,即使没有swap分区,也会存在swap行为,因为有文件背景的页面(file-backed page)也会有swap动作,即第1点的磁盘和内存之间的交换行为。
    2.监控swap的方法
     1)vmstat ----->swapd si so
     2)top/free -h ----->Swap 
     3)   sar -W------>pswpin/s  pswpout/s
   3.何时会使用swap分区
     1)系统内存不足

注意:换出到swap的内存即使在内存不紧张的时候也不会立刻的回到内存!为什么呢?
        参考:https://access.redhat.com/solutions/41520  
        a) 设计如此!after memory is swapped out, it will not return to the physical memory unless it is being used again
        b)如何去换回?There is no need to worry. In most cases this is actually not needed and it is recommended to just keep the data in swap. OS will automaticallyswap the needed pages back into physical memory when needed, and moreover it will also benefit the saved available memory for performance in the meantime.
     2)内存还有,但是也会使用swap,基本有二种,一种是和系统配置swappiness有关,另一种就是和numa的恩怨纠葛了,后面说;
    shell> sysctl -a | grep swappiness

vm.swappiness = 60
  取值为0-100,简单的可以理解为内存不足时,60%的概率会发生swap交换,实际不是这么简单的算法,暂且这样理解吧;
4.内存的回收方式(page cache向磁盘或匿名页向swap分区,swappiness越大,回收匿名页多一点)
    1)和swap分区交换
    2)直接回收cache中的page来释放内存
    补充:cache回收机制 1)cache的回收内核通过kswapd内核线程慢慢回收,回收的时机由水位控制。
        low:当剩余内存慢慢减少,触到这个水位时,就会触发kswapd线程的内存回收。
        min:如果剩余内存减少到触及这个水位,可认为内存严重不足,当前进程就会被堵住,kernel会直接在这个进程的进程上下文里面做内存回收(direct reclaim)。
        high: 进行内存回收时,内存慢慢增加,触到这个水位时,就停止回收。
        大小关系:high>low>min
         由于每个ZONE是分别管理各自内存的,因此每个ZONE都有这三个水位。
                                   2)主动发起回收:主动地进行drop_cache(echo 3)。 
5.swap的打开和关闭
     1)查看swap:swapon -s 
     2)关闭swap(回收swap): swapoff /dev/dm-1,此操作需要保证内存空间够回收swap的内容
     3)打开swap:swapon /dev/dm-1
三、numa和swap
在现有的Redhat Linux中,localalloc是默认的NUMA内存分配策略,这个配置选项导致资源独占程序很容易将某个node的内存用尽,典型的如mysql。而当某个node的内存耗尽时,Linux又刚好将这个node分配给了某个需要消耗大量内存的进程(或线程),swap就妥妥地产生了。尽管此时还有很多page cache可以释放,甚至还有很多的free内存。

linux中的numa和swap相关推荐

  1. linux 查看numa信息,Linux中查看NUMA信息

    Linux中查看NUMA信息 2015-03-19 本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢. 声明: 本博客欢迎转发,但请保留原作者信息! 新浪 ...

  2. linux 中swap分区的中庸是什么

    一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...

  3. 简述Linux中Swap分区的作用,linux下的swap分区

    一.什么叫swap分区 swap分区,即交换区,swap空间的作用可简单描述为:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一 ...

  4. linux的swap与memory,【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  5. Linux 中 Swap 分区的概念和使用

    Linux 中 Swap 分区的概念和使用 [root@iZhp3h4x7t41yl0eevhf1dZ ~]# free -h total used free shared buff/cache av ...

  6. 【linux性能优化】系统Swap变高原因分析

    一.内存处理 1.1 内存资源紧张的应对 当发生了内存泄漏或者运行大内存的应用程序,导致系统的内存资源紧张时,系统又会如何应对呢? 这其实会导致两种可能结果,内存回收和OOM杀死进程 OOM杀死进程 ...

  7. Linux性能优化-内存的swap

    目录 Swap原理 NUMA和swap swappiness 创建swap 一个swap的例子 参考 内存不足的情况 1.内存回收 2.OOM杀死进程 内存紧张导致的OOM,是指系统杀死占用大量内存的 ...

  8. Linux中的粘滞位

    Linux中的粘滞位 Sticky 位是一个访问权限标志位,可以用来标示文件和路径. 历史: 粘滞位是在1974年Unix的第5版中引入的,用来设置可执行文件.当可执行文件设置粘滞位之后,它能够指示操 ...

  9. linux内存使用统计,Linux 中free命令检查内存使用情况

    我们都知道, IT 基础设施方面的大多数服务器(包括世界顶级的超级计算机)都运行在 Linux 平台上,因为和其他操作系统相比, Linux 更加灵活.有的操作系统对于一些微乎其微的改动和补丁更新都需 ...

  10. 如何在 Linux 中扩展 XFS 根分区

    在某些情况下,/ 分区在 Linux 中磁盘空间不足.即使压缩和删除旧的日志文件也无济于事,因此在这种情况下,我们别无选择,只能扩展 / 文件系统.在本文中,我们将演示如何在 Linux 系统中扩展不 ...

最新文章

  1. Real World Kanban作者访谈
  2. rails 3 使用 cucumber 和rspec 進行 測試
  3. angularjs http和ajax,AngularJS $ http和$ resource
  4. usb serial port 驱动_tty初探 — uart驱动框架分析
  5. 如何在command中使用log
  6. 【熊猫站群系统@苹果cmsv10/Maccmsv10 站群深度定制版 开发日志】 优雅且高效的友链模块,一键打造强大的蜘蛛池
  7. 常用的分布式唯一ID生成方案
  8. 对象字段java_Java的类,对象以及字段和方法
  9. jedis 连接池使用流程图
  10. Quartz 知识点汇总
  11. 计算机技术及应用攻略,组策略应用全攻略
  12. WebRAY创业启示录:从小公司到隐形的巨人
  13. ES性能优化原理揭秘!初看一脸懵逼,看懂直接跪下。。。
  14. 利用mathematica画多个函数图像
  15. 内存卡数据删除了怎么恢复?sd卡数据恢复,3个步骤找回
  16. TPCC-Mysql 测试
  17. MySQL通过binlog数据恢复
  18. SpringBoot集成Swagger2,以及Swagger2常用API
  19. sgx是什么要开吗_绝了!滑滑梯设计在顶楼,上去一滑不就是直接跳…楼…吗??...
  20. RationalDMIS 2020 组合元素定义

热门文章

  1. mysql常用sql命令
  2. python初识(2)
  3. 基于Debian的Linux发行版安装深度音乐及其插件,支持ubunut16
  4. Java设计模式-Builder生成器模式
  5. C#开源爬虫NCrawler源代码解读以及将其移植到python3.2(3)
  6. 一步一步学习hadoop(九)
  7. flAbsPath on /var/lib/dpkg/status failed 解决 Cydia 红字
  8. 推荐系统在房产领域的实践
  9. 互联网全球化趋势下,印度极得美自我革新
  10. 【15】万魂杀服务器开发之原始NIO、Mina、Netty使用