Re: [求助] pcsx2 out of memory的問題

作者: abac1230 (Planck超帥)   2015-05-09 00:06:45
※ 引述《iotohy (隨身聽)》之銘言:
: 我的系統是win7 64 bit 旗艦版 + 8G memory
: 遊戲是實況野球大聯盟3,不過我想實況野球系列都應該有這問題,
: 遇到這個問題我爬了很多文, 還是沒法解決,
: 不過我有發現幾個有幫助的現象,能讓我避掉out of memory.
: 1.
: 使用0.97到最新的1.3.1試過任何設定都會出現out of memory,
: 0.96則是黑畫面,0.97是最穩的
這代表新版本PCSX2的修正或運算法,是不適合你所玩的遊戲。
: 2.
: 用資源監視器觀察pcsx2主程式記憶體的變化,
: 會發現很快的增大,一開始是200MB左右,當增大到1.4G~1.6G時
: 就會出現out of memory或pcsx2程式當機,
: 即使你可用記憶體還很充足,也是會當(後來我加到16G,一樣out of memory)
因為那是遊戲本身與模擬器相容性的問題。
: 3.pcsx2當增大到1.4~1.6G時,做即時存取或讀取會出現分配記憶體失敗的錯誤訊息,
: 如果用1.2.1版會很容易搞爛即時存檔,0.97也是會但比較不會弄壞存檔
Save state實際上會把所有目前使用的記憶體區塊作備份。
所以存檔會壞掉很正常。
: 4.正常不會out of memory的遊戲,不會有記憶體增大現象,
: 會定期釋放記憶體,保持在200~300MB左右
因為正常的遊戲不會讓PCSX2出現Memory leak。
: 避掉方法:
: 開資源監視器觀察,如果pcsx2占用到達1.2G差不多就要out of memory的時候,
: 這時你可以重新設定圖型插件(不用改值,只要確認OK就好),或是關掉重開pcsx2,
: 他會reset memory到占用200MB的狀態,平均約每打一場就要做一次這個動作...XD
: 感覺問題應該不難解,因為記憶體占用莫名增大的現象是可穩定複製並觀察,
: 而且就算抓不到原因,只要掛個watch dog偵測到這現象,做reset的動作就可避掉.
: 目前不知有沒有人有更好的解決方式?
簡單的說,若PCSX2會出現out of memoery的問題。
有99%幾乎都是遊戲本身的相容性有問題。
大部份都是因為這些特定遊戲,在PCSX2模擬器的運算中會讓EE或GS算出來的數值溢位,
結果就是導致memory leak,記憶體被佔著不放、愈吃愈多。
最後就整個PCSX2 Crash掉。
至於少部份的PCSX2版本之間,對特定遊戲的相容性有差異,
甚至舊版的相容性還比新版好。
則是因為PCSX2的EE與GS的算法,在0.9.6、0.9.7、0.9.8及之後的1.0版之間,
都有好幾次大幅的變動。
例如0.9.8與0.9.6關於VU的程式碼的部份,幾乎整個被重新改寫過。
所以會出現這樣的情況也很非常正常的事。 :)
然而out of memory解決方法無他,
只能將會出錯的遊戲以及log回報給PCSX2開發群。
並不抱期待的等待開發者修正。
註1:
EE: Emotion Engine
PS2的CPU。
註2:
GS: Graphics Synthesizer
PS2的GPU。
註3:
micro VU: 由cottonvibes為首所開發的動態編譯器(dynamic recompiler),
用來取代舊的super VU。
這項工作的目的,是由於PS2機器本身的指令,對電腦來說無法理解也無法直接溝通。
所以需要有直譯器(interpreter),將PS2原始的指令碼轉換成電腦主機可以執行的代碼。
但直譯器的功能很簡單,就是一個口令,一個動作的方式在運作著。
只不過若依照原始主機的指令,一個接著一個,將指令慢慢拆解成電腦可以執行的指令碼
這樣子做的效率很差且速度太慢。
所以動態編譯器的方式,改善了直譯器的缺點。
它會預先將一大堆PS2原生的指令轉譯成電腦可以執行的代碼,並儲存在記憶體之中,
當實際遊戲運作的時候,當某個指令要被要被執行的當下,
模擬器就會預先讀取原本儲存在記憶體中的轉譯後的代碼,並且執行它。
好處是這樣做只要翻譯一次就好,大幅提高效率。
壞處則就像不同國家的語言之間的翻譯那樣,信、雅、達很難完美。
當遇到有被模擬者(PS2)的指令與模擬者(電腦)的指令之間有落差,
那動態編譯器的方式將有可能會放大這樣的問題,
結果就是某幾款遊戲會有相容性的問題出現。
而Cottenvibes的貢獻(Micro VU),就是將EE其中的一部分,或者可以說是VU的部分,
整個將代碼改寫成適合平行處理及管線化的方式。
最後才誕生了MTVU,讓VU0與VU1跑不同的執行緒。
註4:
由於動態編譯器的效率及優點,
通常幾乎所有近代主機的模擬器,都存在著動態編譯器的部份。
作者: jeff0811 (jeff)   2015-05-09 00:09:00
好文!
作者: reiden (雷電,經典的STG(?))   2015-05-09 00:47:00
好文!
作者: TevenChen ((\/)⊙⊙(\/)﹏﹏)   2015-05-09 02:15:00
好文! (不跟著推人家以為我看不懂XD)
作者: hipposman (井上多洛~喵)   2015-05-09 04:24:00
專業推
作者: Jedidiah (哪裡有FFXI的私服程式T_T)   2015-05-09 15:09:00
推!
作者: Jay915 (平靜的心…看世界)   2015-05-09 19:02:00
作者: conpo (獅子たちの旗)   2015-05-11 20:15:00
專業好文推!
作者: prudence (煩惱皆菩提)   2015-05-12 11:18:00
專業推一個 ^^

Links booklink

Contact Us: admin [ a t ] ucptt.com