b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

非统一的内存访问模型和内存分配器(NUMA)

电脑杂谈  发布时间:2020-08-23 06:06:38  来源:网络整理

numa 内存_numa 内存_numa

CPU频率不能升高,并且保持在2-3G. 前端总线的时钟频率无法提高. 我现在使用的小黑点是Intel Core2 P8600,前端总线的时钟频率仅为266MHz. 因此,尽管内存价格越来越便宜,但是连接CPU和内存的高速带宽并不多.

因此出现了NUMA. CPU构成一个节点,每个节点管理数十GB的内存,然后通过点对点方法在节点和节点之间建立高速直接连接. 因此系统总线不见了,新的术语QPI指的是快速访问通道. 它不仅连接内存和CPU,还连接其他设备,例如图形卡. 但是有一个重要的结果: 从CPU到每个记忆棒的“距离”不相等. 有些是直接连接的,因此速度非常快,有些需要绕到另一个节点才能获得. 这不仅很慢,而且很容易阻塞节点之间的互连通道. 想想看,如果您在天津工作,但必须住在北京,那么每天上下班会不会很痛苦?为什么?为什么会这样呢?为什么我要访问的内存不在我身边?在哪里?

numa 内存_numa 内存_numa

用C语言谈到malloc. 首先要强调的是,malloc分配的是“地址空间”,而不是内存!以同样的方式,free仅释放地址空间,而不释放内存. 当您访问某个内存地址,并且该地址未映射到任何物理页面时,将发生页面错误中断,然后操作系统分配内存. 简而言之,“内存分配发生在第一次访问时!”.

通常,内存分配器目前有三种策略:

numa 内存_numa_numa 内存

1. 困惑. 什么都不知道,就把它分开.

2. 最接近,找到最接近当前CPU的节点分配.

numa_numa 内存_numa 内存

3,循环. 将您想要的内容尽可能平均地分配到每个节点.

我不知道您使用哪种C Runtime实现,无论如何,以上三种都是可能的. 大多数喜欢C的人都在追求效率,那么他们自然喜欢第二个吗?因此有人建议服务器启动过程应该并行化,例如,IO缓冲区应该由IO线程初始化,然后他们应该自己做. 听起来很合理,但是!亲爱的,如果此线程被调度到另一个CPU,该怎么办?因此,我们不仅必须控制内存的分配方式,而且还必须控制线程调度策略并将该线程绑定到固定的CPU组. 更复杂的是,如果线程池正在执行任务怎么办?打扰一下,我在写应用程序还是操作系统?无论如何,“谁使用谁分配谁”仍然是有效的优化策略.

numa 内存_numa 内存_numa

让我们谈谈Java,这更加清楚. Java有4种垃圾回收策略: 序列化,并行性,CMS(并发)和G1. 如果选择并行垃圾回收策略(默认为Server版本的JVM),则其内存池分为三类: 年轻一代,老一代和不朽一代.

并行化垃圾收集器具有-XX: + UseNUMA开关,这会影响新一代Eden Space内存池的分配器策略. 让我谈谈Eden Space的作用: 大多数新对象都是首先在Eden Space上创建的. 内部的对象是临时创建并立即销毁的对象,否则它们将很快(不到1秒). 移到老一代. 如果打开-XX: + UseNUMA,则Eden Space将尝试查找要分配的最近节点,以获得最经济,最快的内存访问. 但是其他内存池呢?它们要么是混乱的方式,要么是采用循环3的方式3. 因此,上述用于内存访问本地化的启动过程的并行化完全不适用于JAVA.

因此,现在重新考虑NUMA问题: 访问速度和带宽.

访问速度: 确实,访问远程内存的速度会慢一些,但是会慢多少? 30%? 50%? 200%?你测试过了吗?我没有. 据说即使速度较慢,它也比Nehalem之前的任何CPU都快,因为系统体系结构得到了改进,北桥已被移除,并且QPI已制成. 而且,根据我看到的各种数据,速度差距在50%以内. NUMA确实是一个有趣的话题. 我首先在2006年出版的《 Solaris内核体系结构》一书中谈到了这一概念. 那个时代的硬件与现在的硬件有很大的不同. 那时,NUMA确实是个死胡同. 如果它比SMP差两倍或20倍,那没问题,因为它增加了带宽. 因此,操作系统必须被迫针对如此巨大的差异进行各种优化. 但现在?看一下JVM,为什么仅在附近分配Eden Space?互联网上有许多有关NUMA的文章,以及如何在NUMA体系结构上编写更高效的程序. 但是,很多视图都是古老的.

带宽: 您是否真的在CPU之间将QPI运行至满?对于近年来生产的CPU,每个QPI的单向带宽为每秒12GB(理论最大值). 如今,似乎只有大型服务器或缓存服务器可以填充它. 否则,您无需考虑带宽问题.

因此,现在有一个新策略: SUMA或页面交织,可以在硬件级别上完成. 物理地址空间以均匀交替的方式分配给每个节点. 例如,将0×0000-0x0FFF分配给节点1,将0×1000-0x1FFF分配给节点2,依此类推. 然后,所有软件都不在乎NUMA. 页面交织的目的是尽可能均匀地使用每个QPI通道. 我认为一般来说就足够了. 英特尔NUMA的x86 CPU才在3年前开始出现. 首先让OS,编译器和jvm适应它,然后等到扔掉足够多的东西,最后才是我们普通的软件开发人员.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-304957-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 郭郧
        郭郧

        让人敬佩

      • 甄龙友
        甄龙友

        1手机信号wifi严重不稳定以前能用的应用全装不上战游戏画面严重卡顿早知道不升级后悔死了

      热点图片
      拼命载入中...