LV. 13
GP 83

【分享】麥塊平行化專案 (更少的規則限制,讓你的伺服器容納人數加倍!)

樓主 我很大 softpak
GP142 BP-

作者標示-非商業性

本授權條款允許使用者重製、散布、傳輸以及修改著作,但不得為商業目的之使用。使用時必須按照著作人指定的方式表彰其姓名。

本專案讓每個伺服器能解除對紅石、流體、TNT與生物數量的限制,體驗麥塊最原始的感動。

專案:https://github.com/softpak/HOSE

2015/12/21
又來賺點GP了,
因為還在念研究所,
加上在等HSA的java前端LLVM的更新,
結果OKRA胎死腹中,
一不小心等太久等了快半年...
所以進度一度停擺,
這兩天又開始嘗試新的LIB,
這次是使用OPENMP(omp4j),
可以把任意迴圈平行化而不須要考慮到太細節的東西,
在低負載時是看不出效果的(反而會稍慢),
要在複雜情況(反覆多層迴圈),
像是地圖讀取上,
可以把整體的時間減半(同時產生100個chunk),
程式碼暫時不會更新,
等完整一點再上傳。
由於spigot更新到了1.8.8,
雖然之前有跟md5聊到一些效能頻頸的問題,
不過不太清楚有沒有改善,
要再多看看他的原始碼,
這幾天會開測試服進行測試。


2015/07/19
將近2個月的等待,
目前OKRA這個介面的承辦人被AMD火掉後一直沒補人,
新的驅動無法使用舊版的okra,
JAVA的LLVM前端也尚未完成,
所以HSA專案必須放棄,
轉而走向之前的多核心支援,
採用非同步的IO來改善AI效能問題,
目前已將AI尋徑、流體、火等不需要強一致性的部分用Callable改寫,
能在2000生物同時尋徑的情況下將tps維持在18~19(以往會降到10左右),
大量的火焰也能維持在18~19(
以往也是降到10左右),
目前皆是試驗性質的程式碼,
執行緒方面並未使用pool來管理,
所以效能可能還是差了點,
不過可以確保往後可以擴充的便利性,
至於目前專案已經不用HSA了,
只要照原本的方式編譯即可。(我個人使用netbeans載入專案編譯)


2015/05/20
經過多天的測試及確認,
之前的寫法是錯的(怎麼有點重蹈覆轍的感覺  囧),
感謝參與測試的開服者,
踏出了麥塊的一大步,

本以為Aparapi.range()就可以啟用HSA的功能,
但實際上並沒有,
必須使用Device.hsa()

因此之前的程式碼多數都必須砍掉重練了,
而且因為即時運算的要求很高,
尚需考慮到HSA佇列是否滿載(同時發出多個HSA運算需求),
與效能問題(Chunk資料的同步化),
所以需要再比較jtp跟hsa運算效能,
實測發現hsa只有浮點數的表現上優於jtp,
快約10%或持平(100000ns~170000ns),
整數部份就慢了20~50倍,
所以目前將浮點數的亂數產生器重寫,
將CPU較弱的浮點運算交給GPU來處理。


2015/05/13
每次的更新都令人期待,
很高興詢問度開始漸漸提高了,
透過資訊交流能夠讓我更加確定問題點在哪而進行修正。
這次有蠻重大的突破,
我把之前會lag的地圖拿來測試,
果然完全改善了lag問題,
之前NL的舊地圖一開啟就載入了300多個chunk跟8000個entity,
其中不乏重生點的鐵人塔、連閃器等等眾多設施,
這是lag的主因,
原本期待tps是能維持在19.99,(其實就是20.0,完全無延遲的意思)
但是實際上極限是19.7,
通常在19.5,(
處理器每個核心負載皆低於30%
雖然跟之前10以下的tps來比已經改善很多,
不過我覺得不夠,
於是又改善演算法,
在相同條件下把tps拉到19.99,
這個目標算是達成了,
於是我又進行了更多的測試,
把entity數量提高到2萬
結果是令人滿意的,
tps一樣穩定在19.99,
頂多掉到19.96。
處理器每個核心負載皆低於30%
我這次更加提高了顯卡的使用率,
用於較為不重要的計算,
因為需要同步的資料放進顯卡算容易導致GPU無回應而當機,
這個問題需要使用R9 285X(
Tonga架構)這塊顯卡來改善GPU可能卡死的問題,
因為可以作執行緒切換,
這部份會於往後作測試。

目前蒐集到的資訊,
普遍情況是整體entity數量在1000~3000時就會讓伺服器lag,
tps降到15以下,
甚至是10以下的個位數,
我知道各位為了伺服器順暢而做了諸多的限制無非是為了讓玩家也有好的遊戲環境,
希望能跟有在開服的各位多多交流一些資訊,
這樣能讓我更快的找出問題點。

之前忘記一些指令需較高權限才能操作問題,
導致許多版友無法使用gc跟tps指令查詢,
目前權限已開,
供各位觀察與比較。


2015/04/30

目前版本來到了v2.2,
經過這幾天的努力,
entity計算的部份,
包含路徑搜尋已經能夠負荷的了單一chunk超過8000個單位,
測試玩家在45格外背對測試區域,
fps在2~5之間,
tps穩定在19.7,
處理器的平行運算加上HSA讓整體負載是低於30%的,
如此看來,
非常有可能是因為Spigot因tps延遲而把物件往後挪動到下個tick計算造成物件不斷累積而使單一處理器核心滿載。

目前將會持續優化伺服端。

最後建議有在寫插件或模組的玩家,
可以注意一下java8跟9的new pattern 和 expression,
能提升相當程度的效能。


2015/04/29

目前HSA伺服器測試中,
已改為固定IP,
IP請至招生子板搜尋。

測試情形:
1 tick 能計算約100萬個水流,
單一chunk的生物數能容許4000個,
超過後就會造成伺服器嚴重的lag,
否則單一核心都在30%以下,
推斷是封包同步的關係;
另外同樣數量雞比羊的負載低,
推斷是生物大小對碰撞計算的需求不同;
而地面物品過多同樣會造成lag問題,
個人認為也是與封包同步相關,
因為需要傳送物品位置。


目前,
程式碼修改的百分比約為5%,
還相當的低,
不過已把多數迴圈跟陣列修改完畢,
效能雖有顯著的改善,
不過個人認為還是不足,
現在要著手進行判斷式的修改與測試,
如果還能突破的話再發文告知各位。


2015/04/20
來這個版少說也有4年了,
一步一步的了解到造成伺服器LAG的原因,
就是tick的計算時間超過50ms,
而每每看到伺服器招生文在比硬體跟網路,
就覺得開服讓大家玩應該是件愉快輕鬆的事情,
而國內不像國外,
對於贊助,
國內有違法之虞,
學習國外的架設方式是不錯,
但希望大家在經營伺服器時不要把國外那套贊助的模式直接套用在國內,
這樣也能減少許多糾紛。


大略上說明一下目前造成 LAG的主因,
網路與硬體的因素本次就不列出了,
雖然可以透過提升硬體設備而稍作改善,
但是治標不治本,
沒有對核心問題作解決,
目前一般家用雙核心的主機都可以輕鬆負擔4~20人的遊戲環境:
1.地圖已拓展範圍太大:每個tick 都會針對玩家或功能性方塊存在的位置作chunk掃描,而且生物不會主動回收,怪物才會。故跑圖會造成伺服器附載提高。

2.生物密度過高:有鑽研過模組或插件的板友應該有注意到,有個計算Entity碰撞的函式,一旦生物密度過高,就會產生碰撞計算沒完沒了的情況,並影響生物的循徑計算。

3.紅石機關過多:由於紅石機關在判定路徑上,是使用一個計算6次的迴圈來判斷紅石訊號要走哪條路線,而且活塞在運作時會需要用到空氣方塊的判定,這些都是消耗大量運算能力的主因。

兩個月前我嘗試使用MPI的架構來解決,
寫著寫著問題變成要改到官方的原始碼(有寫信請官方考慮將多核心支援加入官方版本),
這樣就產生了侵權的問題,
於是又回到了需使用OPENCL來解,
剛好注意到支援HSA的處理器與顯示卡已經在台發售了一段時間,
於是就花了幾千塊買了套AMD的套件(A8-7600處理器、A88X主機板、DDR3-16GB記憶體),
成本約是8000塊,
並使用舊有2.5吋5400轉160G的硬碟,
到目前止,
開發的情形令人滿意,
以往OpenCL需要 DUMP記憶體的情形已不覆在,
處理速度快了近百倍,
加上可以把物件丟進GPU裡運算,
讓程式碼的編寫彈性大增。
詳情可至github專案參考程式碼的撰寫方式。

目前光是修改最基本的Entity物件,
CPU負載就比原本低了約20%(以整體負載來算),
而對水流作的測試,
使用fill指令一次在高度120的海面上(高度60)填入180x180x1的流動水源,
在2秒後先造成了File IO crash(tick 還在跑),
如果硬碟更換成更高性能或是使用RamDisk應可解決,
若降低到60x60x1則是無LAG並且順暢的讓水流流至海面(216,000個水流),
並發現水流消失時反而較吃CPU資源,
不過事後發現這是程式碼漏改造成。

總之這個專案讓人頗興奮,
預計可以將大型伺服器從限制地圖大小與分流中解脫出來,
也可讓玩家體會到無限紅石機關的美妙之處。

有興趣的人歡迎與我一同討論,
讓我們建立一個可以容納千人的地圖,
有興趣測試的開服者也可與我聯絡,
我將不定期更新開發訊息。

另外因為LGPL協定的關係,
需要做商業用途請告知,
並遵守LGPL或者GPL的協定。
142
-
未登入的勇者,要加入討論嗎?
板務人員:

1267 筆精華,11/11 更新
一個月內新增 4
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】