smp架构与numa架构

是时候部署您的应用程序了,期待着采购最适合负载要求的硬件。 如今,具有40核或80核的包装盒非常普遍。 总体概念是更多的内核,更多的处理能力,更多的吞吐量。 但是我看到了一些相反的结果,表明在80核心盒上进行的小型CPU密集型测试运行要比较小的40核心盒上的运行慢。

这些具有巨大内核的盒子带有非统一内存访问(NUMA)架构。 NUMA是可提高本地节点的内存访问性能的体系结构。 这些新的硬件盒分为称为节点的不同区域。 这些节点具有一定数量的核心,并分配有一部分内存。 因此,对于具有1 TB RAM和80个核心的机箱,我们有4个节点,每个节点具有20个核心和256 GB的内存分配。

您可以使用命令numactl --hardware

>numactl --hardware
available: 4 nodes (0-3)
node 0 size: 258508 MB
node 0 free: 186566 MB
node 1 size: 258560 MB
node 1 free: 237408 MB
node 2 size: 258560 MB
node 2 free: 234198 MB
node 3 size: 256540 MB
node 3 free: 237182 MB
node distances:
node   0   1   2   3 0:  10  20  20  20 1:  20  10  20  20 2:  20  20  10  20 3:  20  20  20  10

JVM启动时,它将启动线程,这些线程是在某些随机节点的内核上调度的。 每个线程都尽可能快地使用其本地内存。 线程可能在某个时候处于WAITING状态,并在CPU上重新调度。 这次不能保证它将在同一节点上。 现在这一次,它必须访问一个远程存储位置,这会增加延迟。 远程存储器访问速度较慢,因为指令必须遍历互连链路,从而引入额外的跃点。

Linux命令numactl提供了一种仅将进程绑定到某些节点的方法。 它将进程锁定到特定的节点以执行和分配内存。 如果将JVM实例锁定到单个节点,则将删除节点间的流量,并且所有内存访问都将在快速本地内存上进行。

numactl --cpunodebind=nodes, -c nodes
Only execute process on the CPUs of nodes.

创建了一个小型测试,该测试试图序列化一个大对象并计算每秒的事务和延迟。

要执行绑定到一个节点的Java进程,请执行

numactl --cpunodebind=0 java -Dthreads=10 -jar serializationTest.jar

将此测试运行在两个不同的盒子上。

盒子A
4个CPU x 10核x 2(超线程)=总共80核
节点:0,1,2,3

方块B
2个CPU x 10个内核x 2个(超线程)=总共40个内核
节点:0,1

CPU速度:两者均为2.4 GHz。
默认设置也使用包装盒上所有可用的节点。

NUMA政策 TPS 延迟 (平均) 延迟 (分钟)
一个 默认 261 37 18
默认 387 25 5
一个 –cpunodebind = 0,1 405 23 3
–cpunodebind = 0 1,613 5 3
一个 –cpunodebind = 0 1,619 5 3

因此,我们可以推断,与“ 2个节点” Box B上的默认设置相比,“节点较多”的Box A上的默认设置在“ CPU密集型”测试中的性能较低。但是,由于我们仅将流程绑定到2个节点,因此它的性能相同更好。 可能是因为它的节点跳数更少,并且在同一节点上重新安排线程的概率增加到50%。

--cpunodebind=0 ,它的表现优于所有情况。

注意:以上测试是在10个内核上使用10个线程运行的。

测试罐: 下载
测试源: 下载

参考:来自我们的JCG合作伙伴 Himadri Singh的NUMA和Java ,在Billions&Terabytes博客上。

翻译自: https://www.javacodegeeks.com/2012/09/numa-architecture-and-java.html

smp架构与numa架构

smp架构与numa架构_NUMA架构和Java相关推荐

  1. numa节点_NUMA架构下的内存访问延迟区别!

    现在的服务器物理机CPU一般都是多个CPU,核数也是十几甚至几十核.内存几十GB甚至是上百G,也是由许多条组成的.那么我这里思考一下,这么多的CPU和内存它们之间是怎么互相连接的?同一个CPU核访问不 ...

  2. 【操作系统】SMP vs NUMA vs MPP 架构简介

    目录 概述 单处理器系统(Single Processor Systems) 多处理器系统(Multi Processor Systems) 集群系统(Clustered Systems) SMP对称 ...

  3. linux如何查看系统架构?(查看系统架构命令)(armv7l)

    文章目录 命令 1. uname 命令 2. dpkg 命令 3. getconf 命令 4. arch 命令 5. file 命令 瑞芯微摄像头arm-linux(很多命令都没有...) 命令 以下 ...

  4. 朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素

    朱晔的互联网架构实践心得S1E9:架构评审一百问和设计文档五要素 [下载文本PDF进行阅读] 本文我会来说说我认为架构评审中应该看的一些点,以及我写设计文档的一些心得.助你在架构评审中过五关斩六将,助 ...

  5. Google App Engine技术架构之Google App Engine架构

    上一篇我们介绍了Google App Engine的基本信息,本篇将首先介绍App Engine的一些设计理念,接着将对App Engine的组成部分等进行介绍. 设计理念 App Engine在设计 ...

  6. dubbo协议_阿里P8架构师谈微服务架构:Dubbo+Docker+SpringBoot+Cloud

    微服务架构 什么是微服务架构呢?简单说就是将一个完整的应用(单体应用) 按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发.部署.扩展.服务于服务之间通过注入RESTful ...

  7. 如何成为一名Android架构师,乃至高级架构师,文末有路线图

    很多Android的小伙伴在做了多年的开发之后,始终搞不清楚达到Android架构师需要何种技能,我们对比着Android高级工程师来说明. 我们先来看一下Android高级工程师的招聘要求 职位描述 ...

  8. 互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事

    讲师简介: James老师 十余年Java经验,曾就职于携程.人人网等一线互联网公司,专注于java领域,精通软件架构设计,对于高并发.高性能服务有深刻的见解, 在服务化基础架构和微服务技术有大量的建 ...

  9. 架构师之路 — 业务架构 — Overview

    目录 文章目录 目录 业务架构 TOGAF 设计的业务架构 业务架构 OMG 的业务架构工作组(BAWG)给了如下定义: 业务架构明确定义企业的治理结构.业务能力.业务流程.业务数据.其中,业务能力定 ...

最新文章

  1. cvpr2018论文阅读
  2. 找回创新能力 才是苹果的救命稻草
  3. UE4异步编程专题 - 线程池FQueuedThreadPool
  4. php mysql随机记录_php随机取mysql记录方法小结
  5. Redis和Memcached的区别详解
  6. 轻量级HTTP服务器Nginx(Nginx性能优化技巧)
  7. FFmpeg纯净版解码 av_parser_parse2
  8. 矩池云上出现Could not find conda environment
  9. 贺利坚老师汇编课程33笔记:[bx+idata]对同长度字符串进行同步处理
  10. 微信公众号h5开发流程
  11. 三年白干!程序员因违反《竞业协议》赔偿腾讯 97.6 万元,返还 15.8 万元
  12. 荣耀20搭载鸿蒙,荣耀20新机发布 搭载鸿蒙系统荣耀20详细参数
  13. java内部窗口无法实现,java 既不是内部命令也不是外部命令的解决办法
  14. 【Django】模板
  15. 读《枪炮,病菌和钢铁》
  16. 网络安全学习笔记——红队实战攻防(中)
  17. 致我们终将逝去的大学生活
  18. dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。
  19. 华为od统一考试B卷【最少面试官数】Python 实现
  20. 使用convert对jpg图像压缩和缩放

热门文章

  1. 你还在Java8中使用循环语句吗?
  2. JS 获取浏览器、显示器 窗体等宽度和高度
  3. JavaScript原生添加移除class的方法
  4. Jsoup代码解读之四-parser(上)
  5. 以吃货的角度理解 IaaS,PaaS,SaaS 是什么
  6. mybatis和spring整合时这个报错,应该这样解决!
  7. Ajax传递json数据
  8. 新闻发布项目——实体类(categoryTB)
  9. Java中数组的赋值方式
  10. 一次性加载树结构数据表 mapper加载