NUMA架構(gòu)下的Java應(yīng)用小探
在基于最新的英特爾 至強(qiáng) 5500 系列處理器的服務(wù)器中, NUMA架構(gòu)被引入了到了服務(wù)器系統(tǒng)中。它對(duì)Java應(yīng)用有什么影響呢?這就是本文討論的內(nèi)容。
對(duì)于用C/C++等開(kāi)發(fā)的程序來(lái)說(shuō),因?yàn)槌绦蛑苯記Q定了內(nèi)存的訪問(wèn)模式,對(duì)編程者而言,就需要對(duì)對(duì)NUMA架構(gòu)有所了解,以最大的利用NUMA帶來(lái)的優(yōu)勢(shì),避免反被它傷害。但對(duì)Java應(yīng)用來(lái)說(shuō),因?yàn)榇a不會(huì)直接執(zhí)行,一定是通過(guò)JVM進(jìn)行,所以很大程度上Java應(yīng)用的性能就取決于JVM了。這里就對(duì)針對(duì)JVM在NUMA下的性能表現(xiàn)作了一些測(cè)試。
在基于最新的英特爾 至強(qiáng) 5500 系列處理器的服務(wù)器中,對(duì)SUN和ORACLE的JVM分別做了測(cè)試。采用了一個(gè)標(biāo)準(zhǔn)的Java應(yīng)用,測(cè)試了性能表現(xiàn)、Heap size、GC等。因?yàn)楸疚臒o(wú)意對(duì)SUN和ORACLE的JVM的性能進(jìn)行比較,故下面沒(méi)有標(biāo)出具體使用的JVM。
先是對(duì)不同內(nèi)存大小的Heapsize scale情況下,測(cè)試Java性能:
總的說(shuō),發(fā)現(xiàn)NUMA的打開(kāi)與否,對(duì)Java應(yīng)用的性能關(guān)聯(lián)不大。從某種程度上,這可以認(rèn)為反映出JVM還沒(méi)有對(duì)NUMA特性進(jìn)行充分的利用。后面就查了資料,發(fā)現(xiàn)的確如此:最新的JVM中有針對(duì)NUMA的優(yōu)化,但我用的版本中沒(méi)有。限于精力,我也沒(méi)有使用最新的JVM進(jìn)行重新測(cè)試。建議大家如果在最新的5500上運(yùn)行Java應(yīng)用,采用最新的JVM版本性能會(huì)比較好。
接著測(cè)試了不同的GC策略與NUMA的關(guān)系:
這里也是發(fā)現(xiàn)不同的GC的策略下,NUMA對(duì)Java性能影響不大,與我們的預(yù)期相同。
最后測(cè)試了大頁(yè)面(Large Page)優(yōu)化條件下NUMA的影響:
發(fā)現(xiàn)Large Page下,對(duì)于我們測(cè)試的Java應(yīng)用來(lái)說(shuō),打開(kāi)NUMA開(kāi)關(guān)可以提升性能。
小結(jié)一下,在支持NUMA的5500及后續(xù)平臺(tái)上,強(qiáng)烈建議大家使用最新的JVM!我有時(shí)間也會(huì)多做測(cè)試