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