pcsx2 out of memory的問題 - 模擬器

Megan avatar
By Megan
at 2015-05-09T00:06

Table of Contents

※ 引述《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:
由於動態編譯器的效率及優點,

通常幾乎所有近代主機的模擬器,都存在著動態編譯器的部份。

--

有圖有真相
http://goo.gl/w3xULw
可惜之後變成這樣
http://goo.gl/oDXbfw

--

All Comments

Eartha avatar
By Eartha
at 2015-05-10T15:00
好文!
Harry avatar
By Harry
at 2015-05-13T07:51
好文!
Frederica avatar
By Frederica
at 2015-05-14T10:45
好文! (不跟著推人家以為我看不懂XD)
Edward Lewis avatar
By Edward Lewis
at 2015-05-16T14:15
專業推
Una avatar
By Una
at 2015-05-17T09:35
推!
David avatar
By David
at 2015-05-21T23:38
Thomas avatar
By Thomas
at 2015-05-23T09:52
專業好文推!
Valerie avatar
By Valerie
at 2015-05-28T08:34
專業推一個 ^^
Callum avatar
By Callum
at 2015-05-29T06:02
推!淺顯易懂!

最終幻想12漢化版更新補丁1.01

Kama avatar
By Kama
at 2015-05-08T04:52
之前的補丁因為轉換之後的iso名稱有簡體中文的原因導致繁體系統在轉換的過程中無法 生成簡體名稱而失敗,最新的補丁修改轉換後為英文cn應該可以正確轉換了,感興趣的朋 友可以試試看 補丁下載地址: http://pan.baidu.com/s/1dDlgAdz 提取碼:bwuz -------------- ...

為什麼別人快打旋風總是贏你?來看看高手

Delia avatar
By Delia
at 2015-05-07T17:55
對於許多男生來說,從小到大對於「快打旋風」這一類型的格鬥遊戲絕對不會陌生,一生 中可能已經打了上千場的電腦格鬥,但是有些高手技巧讓人嘆為觀止,有些人則可能只是 一味地轉著搖桿,只想打出昇龍拳就好。或許有時候你也想過,為什麼自己打了多年的格 鬥遊戲,卻每次跟高手真人對打時,永遠都只有被別人K.O.的份? 日本 ...

(WIP) New PS2 Emulator attempt

Sierra Rose avatar
By Sierra Rose
at 2015-05-06T21:26
2015.05.05 Hi, Iand#39;m Roor, I hope someone remembers me... I made some emulators some time ago: AdriPSX, DuoS DSEmu, and some others that surely no on ...

冠軍不純! 網友諷梅威瑟「只會躲貓貓」

Edith avatar
By Edith
at 2015-05-06T16:00
http://sports.ltn.com.tw/news/breakingnews/1307523 〔體育中心/綜合報導〕新科世界拳王梅威瑟(Floyd Mayweather)前天雖然擊敗菲律賓 拳王帕奎奧(Manny Pacquiao)成功登頂,不過比賽內容引發許多拳迷憤怒,許多人認為 梅威瑟根本不配拳 ...

MAME 0.161 ROMs (7Zip-Merged)

Daph Bay avatar
By Daph Bay
at 2015-05-05T22:16
MAME 0.161 ROMs (不含 CHD 硬碟檔) 7Zip-Merged,9,205 個檔案,容量 31.8G 30,053 個 MAME ROMs (v0.161) sets (+ BIOS sets) 種子: http://pan.baidu.com/s/1eQlKzMM 或 ht ...