smp架构与numa架构_NUMA架构和Java

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架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CGI跟我学

CGI 意思为 Common Gateway Interface, 一种基于浏览器的输入、在Web服务器上运行的程序方法. CGI脚本 使你的浏览器与用户能交互,为了在数据库中寻找一个名词, 提供你写入的评论,或者从一个表单中选择几个条目并且能得到一个明确的回答. 如果你曾经遇到…

opencv中的矩阵拼接

hconcat、vconcat Mat_<float> T_L (Mat_<float>(3, 1) << -518.97666, 01.20629, 9.14632);//平移向量 Mat_<float> T_R (Mat_<float>(3, 2) << 518.97666, -01.20629,-9.14632,518.97666, -01.20629, -9.14632);//旋转向量 Mat_<f…

Java注释是一个大错误

注释是在Java 5中引入的&#xff0c;我们都为之兴奋。 如此出色的工具可以缩短代码&#xff01; 不再有Hibernate / Spring XML配置文件&#xff01; 只是注释&#xff0c;就在我们需要它们的代码中。 没有更多的标记接口 &#xff0c;只有运行时保留的 反射可发现注释&#xf…

tcpdump 抓二层包_可能是我见过的最简单易懂且实用的 TCPDump 和 Wireshark 抓包及分析教程!( 强烈建议收藏 )...

公众号关注 「奇妙的 Linux 世界」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01;本文将展示如何使用 tcpdump 抓包&#xff0c;以及如何用 tcpdump 和 wireshark 分析网络流量。文中的例子比较简单&#xff0c;适合作为入门参考。1. 基础环境准备为方便大家跟着上手…

JDBC分页查询及实现

当数据过多时&#xff0c;一页之内是无法显示的&#xff0c;因此需要进行分页显示。 &#xff08;一&#xff09;分页技术实现&#xff1a; 物理分页&#xff1a; - 在数据库执行查询时&#xff08;实现分页查询&#xff09;&#xff0c;查询需要的数据—-依赖数据库的SQL语句 …

SELinux深入理解

1. 简介 SELinux带给Linux的主要价值是&#xff1a;提供了一个灵活的&#xff0c;可配置的MAC机制。 Security-Enhanced Linux (SELinux)由以下两部分组成&#xff1a; 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SELinux是一个安全体系结构&#xff0c;它…

头文件的写法

#ifndef SURF_FUNC_H_//大写&#xff0c;防止头文件被多次包含&#xff0c;防止与自带的头文件重复 #define SURF_FUNC_H_float** SURFCompare(Mat srcImage1, Mat srcImage2, float paraHessian);#endif 1.只需要将函数声明、宏定义、结构声明等内容写入。 2.头文件可以定义很…

windows调用python_如何在Windows操作系统中从R调用Python?

我正在寻找一种在Windows操作系统上调用R中的python的方法。因为似乎没有可用的R包(至少没有最近更新的包)&#xff0c;我正在寻找如何在R脚本中编写一组命令的线索&#xff0c;然后可以以批处理模式发送蟒蛇。简而言之&#xff0c;如何在Windows操作系统中从R调用python&#…

range

# i 1 # while i <100: # print(i) # i 1# range(参数) [0,参数) # for i in range(20): # range()可以被迭代 0-9 # print(i)# range(参数1, 参数2) [参数1, 参数2) 切片 # for i in range(10, 20): # print(i)# range(参数1, 参数2, 参数3) [参数1…

OSI七层网络模型与TCP/IP四层网络模型

2.1 OSI网络分层参考模型网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节&#xff0c;而应把通信问题划分成多个小问题&#xff0c;然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个…

python小学生课本剧_二年级上学期课本剧

我们把这美丽的景色看个够。 (二人分别立在舞台两边&#xff0c;向远处眺望&#xff0c;作观赏状。) 小洁&#xff1a;(开心地)啊&#xff0c;岸上的景色真美&#xff01; 小刚&#xff1a;瞧&#xff0c;那些奇形怪状的石头真好看&#xff01; (石蛙、石鹰、石兔、石龟边舞边上…

用数组存储循环序号的数据

一个i&#xff08;i<10&#xff09;对应四个坐标值&#xff0c;需要用4*i大小的一维数组循环存储&#xff0c;或者用二维数组b[i][4]存储&#xff0c;i行4列。 一维存储方法&#xff08;类似于opencv存储彩图的顺序&#xff09;for (int i 0; i < viewMatches.size(); i…

spring 事物合并_Spring系列合并

spring 事物合并Spring Collection合并是我第一次遇到的功能&#xff0c;它是对StackOverflow 问题的回答 这是一种创建基本集合&#xff08;列表&#xff0c;集合&#xff0c;地图或属性&#xff09;并在其他Bean中修改此基本集合的方法&#xff0c;下面通过一个示例对此进行最…

2018/11/29 一个64位操作系统的设计与实现 03 (在Bochs上运行Boot程序)

使用命令dd强制将引导程序boot.bin写入引导扇区: dd ifboot.bin of/home/parallels/Documents/bochs-2.6.9/boot.img bs512 count1 convnotrunc 在P39页有完整的讲解命令的意思 注意: 书中使用的: of../../bochs-2.6.9/boot.img 是错误的. 使用命令: ./bochs -f .bochsrc 书中使…

怎么把python解释器配置在pycharm中_在PyCharm中配置项目(三):配置Python解释器...

PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。PyCharm最新版本2019.2发布&#xff0c;功能改进提高Python语言开发效率&#…

mysql 赋给用户权限 grant all privileges on

遇到了 SQLException: access denied for localhost (using password: no) 解决办法 grant all privileges on *.* to joelocalhost identified by 1; flush privileges; 拿 joe 1 登陆 附&#xff1a; mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用…

辨析矩阵内积(hadamard、kronecker)

1. matmul product&#xff08;一般矩阵乘积&#xff09; m x p矩阵A与p x n矩阵B&#xff0c;那么称 m x n 矩阵C为矩阵A与矩阵B的一般乘积&#xff0c;记作C AB &#xff0c;其中矩阵C元素 [cij]为矩阵A、B对应两两元素之和&#xff0c;表示为&#xff1a; 例子&#xff1a…

Drools 6.5.0.Final提供

最新版本和最出色的Drools 6.5.0.Final版本现已可供下载。 这是我们先前构建的增量版本&#xff0c;重点是对6.x系列进行一些重要的改进。 您可以在此处找到更多详细信息&#xff0c;下载和文档&#xff1a; Drools网站 资料下载 文献资料 发行说明 请阅读下面的一些发行…

第一阶段总结

在这一周的冲刺周期里&#xff0c;我做了如下的事情&#xff1b; 1.在网上找到适当的图片作为软件图标&#xff1b; 2.编程出窗口的基本框架&#xff1b; 3.调整窗口的长宽高&#xff1b; 4.编写相关代码&#xff1b; 5.整合部分代码&#xff1b; 个人评分&#xff1a;99 转载于…

测试电梯的测试用例_测试用例设计经典面试题

测试用例设计经典面试题之电梯、杯子、笔、桌子、洗衣机、椅子、ATM等按测试的类型逐一测试测试类型主要分为&#xff1a;界面测试、性能测试(压力测试)、安全测试、兼容性测试几个方向。1.测试项目&#xff1a;电梯需求测试&#xff1a;查看电梯使用说明书、安全说明书等界面测…