NUMA架構和Java

是時候部署您的應用程序了,期待著采購最適合負載要求的硬件。 如今,具有40核或80核的包裝盒非常普遍。 總體概念是更多的內核,更多的處理能力,更多的吞吐量。 但是我看到了一些相反的結果,表明小型的CPU密集型測試運行在80核盒上的性能要比較小的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密集型”測試中的性能較低。更好。 可能是因為它的節點跳數更少,并且線程被重新調度的概率增加到50%。

--cpunodebind=0 ,它的表現要優于所有情況。

注意:以上測試是在10個內核上使用10個線程運行的。

測試罐: 下載
測試源: 下載

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


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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371258.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371258.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371258.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

存儲過程常用技巧

我們在進行pl/sql編程時打交道最多的就是存儲過程了。存儲過程的結構是非常的簡單的,我們在這里除了學習存儲過程的基本結構外,還會學習編寫存儲過程時相關的一些實用的知識。如:游標的處理,異常的處理,集合的選擇等等…

vue是用a標簽打開新頁面_vue 在新窗口打開頁面并設置不同的背景

開發一個新系統,前端用的vue,vue是單體應用,所有頁面都在一個窗口里實現,但項目要求在點button鏈接后要新打開一個瀏覽器頁面,解決方法如下:1. 給此button設置新事件 click"createdefect"提交缺陷…

卡爾曼濾波的推導

卡爾曼濾波的推導1 最小二乘法在一個線性系統中,若\(x\)為常量,是我們要估計的量,關于\(x\)的觀測方程如下: \[ y Hx v \tag{1.1}\] \(H\)是觀測矩陣(或者說算符),\(v\)是噪音,\(y…

Java注釋-保留

考慮一下Java批注: public interface AnAnnotaton {}帶有此注釋的類: AnAnnotaton class AnAnnotatedClass{}還有一個測試,檢查類中是否存在此批注: import static org.hamcrest.MatcherAssert.assertThat; import static org.h…

MYSQL查詢選修三門以上課程_SQL高級查詢的練習題

Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname,T#) 課程表SC(S#,C#,score) 成績表Teacher(T#,Tname) 教師表問題:1、查詢“001”課程比“002”課程成績高的所有學生的學號;select a.S# from (select s#,score from SC where C#001) a,(select s#,s…

Determing client's IP

AuthorDeterming clients IPАнатоли&23.04.2009 18:39:46Registered userHow to determine clients IP address in THTTPServer.OnClientConnected, THTTPServer.OnClientDisonnected and TRtcFunction.OnExecute events?Danijel Tkalcec [RTC]23.04.2009 19:45:05…

mysql aa復制_MySQL的復制架構與優化

MySQL的復制架構與優化###########原理###########1.主服務器將更新的數據的sql語句(例如,insert,update,delete等)寫入到二進制文件中(由log-bin選項開啟)。此二進制文件由一個索引文件跟蹤維護。2.從服務器連接(使用I/O線程連接)主服務器&a…

如何安裝Gradle

Gradle是一個簡單而強大的構建工具。 它類似于Ant構建工具。 它可以很好地管理構建,還可以處理構建依賴性。 Gradle最好的部分是它是開源項目。 如果您正在考慮安裝并嘗試一下,那么您來對地方了。 Gradle的開發周期為4周,因此,每隔…

nmap使用指南

一、目標指定 1.CIDR標志位 192.168.1.0/24 2.指定范圍 192.168.1.1-255 192.168.1-255.1&#xff08;任意位置&#xff09;3.IPv6地址只能用規范的IPv6地址或主機名指定。 CIDR 和八位字節范圍不支持IPv6&#xff0c;因為它們對于IPv6幾乎沒什么用。 -iL <文件名> 主機名…

#Pragma Pack(n)與內存分配

#pragma pack(n) 解釋一&#xff1a; 每個特定平臺上的編譯器都有自己的默認“對齊系數”(也叫對齊模數)。程序員可以通過預編譯命令#pragma pack(n)&#xff0c;n1,2,4,8,16來改變這一系數&#xff0c;其中的n就是你要指定的“對齊系數”。 規則&#xff1a; 1、數據成員對齊規…

Java死了還是無敵?

作家艾薩克阿西莫夫&#xff08;Isaac Asimov&#xff09;曾經說過“唯一不變的就是變化”。 這不僅僅是軟件行業中的一個短語&#xff0c;這是絕對的事實。 曾經有一天&#xff0c;Corba為王&#xff0c;但Web Services篡奪了它。 即使在Web服務領域&#xff0c;過去也全都是關…

mysql數據庫訪問問題嗎_#MySQL數據庫無法遠程訪問的問題

在 Ubuntu上裝了mysql&#xff0c;因為項目的數據庫是mysql&#xff0c;將項目放在tomcat里面webapp下面&#xff0c;一直啟動不成功。本來一直以為是jdbc驅動問題&#xff0c;后來發現不是。1.cd /etc/mysql 找到my.cnf查找到bind-address&#xff0c;將 bind-address127.0.0.…

SolidEdge如何復制特征 建立類似于UG 塊的概念

直接CtrlC和CtrlV可以實現特征的復制粘貼 按N鍵可以改變特征方向 已經復制完成的特征要進行定位&#xff0c;則右擊該特征&#xff0c;編輯輪廓&#xff0c;可以進行聰慧尺寸的標注 使用特征庫的方式&#xff0c;就像UG的塊一樣&#xff0c;可以給所有零件調用。在任意位置新建…

Gradle自定義插件

本教程介紹了創建Gradle獨立自定義插件的方法。 它涵蓋以下主題 創建任務&#xff0c;并在“自定義”插件中使用它 獨立的自定義插件 簡短的插件ID 使用settings.gradle自定義Gradle設置 項目信息&#xff1a; 搖籃版本&#xff1a;1.1 操作系統平臺&#xff1a;Ubuntu 1…

mysql映射文件_Mybatis SQL映射文件

簡單查詢insert添加insert可以使用數據庫支持的自動生成主鍵策略&#xff0c;設置useGeneratedKeys”true”&#xff0c;然后把keyProperty 設成對應的列&#xff0c;就搞定了。比如說上面的StudentEntity 使用auto-generated 為id 列生成主鍵.還可以使用selectKey元素。下面例…

監聽微信、支付寶等移動app及瀏覽器的返回、后退、上一頁按鈕的事件方法

在實際的應用中&#xff0c;我們常常需要實現在移動app和瀏覽器中點擊返回、后退、上一頁等按鈕實現自己的關閉頁面、調整到指定頁面或執行一些其它操作的 需求&#xff0c;那在代碼中怎樣監聽當點擊微信、支付寶、百度糯米、百度錢包等app的返回按鈕或者瀏覽器的上一頁或后退按…

第七天作業

---恢復內容開始--- 作業一&#xff1a;nginx服務 二進制安裝nginx包 作為web服務修改配置文件 讓配置生效&#xff0c;驗證配置 直至出現epel的兩個文件&#xff0c;否則reinstall, 接下來寫配置文件&#xff0c; 這款軟件的服務目錄&#xff0c; 在里面編輯一些東西&#xff…

Java測試提示

介紹 我喜歡自動化測試。 在一次極少的轉移到op-ed 1中&#xff0c;我想到了一些想法&#xff08;閱讀–意見&#xff09;。 在開始如何最好地構成您的測試之前&#xff0c;我先簡單問一下–測試的原因是什么&#xff1f; 大致來說&#xff0c;我認為它們是&#xff1a; 減少…

pdo mysql fedora_在Fedora 23 Server和Workstation上安裝LAMP(Linux, Apache, MariaDB和PHP)

在安裝LAMP之前&#xff0c;建議先更新系統包$ sudo dnf update第一步&#xff1a;安裝Apache Web服務器1.在Fedora 23安裝Apache&#xff0c;你可以運行下面的命令&#xff1a;$ sudo dnf install httpd2.安裝完成后&#xff0c;我們設置在系統啟動時自動啟動Apache&#xff0…

洛谷P1937 [USACO10MAR]倉配置Barn Allocation

題目描述 Farmer John recently opened up a new barn and is now accepting stall allocation requests from the cows since some of the stalls have a better view of the pastures. The barn comprises N (1 < N < 100,000) stalls conveniently numbered 1..N; sta…