PS3 Emülatörü RPCS3 Performansı Nasıl Artırılır?

Adanali

Member
Emülasyon yazılımları donanımın elektronik kısımlarından çok, komutlara nasıl karşılık verdiği üzerine ağırlaşırlar. Birtakım sistemler hayli komplike olduğundan dolayı emülasyonu sağlayan donanımlar ortası sık sık irtibat gerekiyor ve PlayStation 3 de bu sistemler içinde yerini alıyor. Her ne kadar RPCS3 bu yükü azaltacak algoritmalara sahip olsa bile genel olarak uygun bir emülasyon tecrübesi için düzgün bir donanım ve donanımı güzel yönetebilen, hoş konfigüre edilmiş bir firmware gerekiyor. Çayınızı ve kahvenizi hazır etmeyi unutmayın, zira teknik bir sohbet edeceğiz ve başınızdaki soru işaretlerini mümkün olduğunca azaltacağız!

RPCS3’ün yüksek bellek performansı gerektirmesinin iki tane niçini var.

  1. Cell işlemci emülasyonu: SPU’nun (bir nevi “Cell” işlemcinin “SIMD” uzantısı denebilir) ana belleğe erişimi, sürat kazandırmak ismine işlemci yerine DMA (Direct Memory Access – Direkt Bellek Erişimi) denetimcisi üzerinden yapılmaktadır. Bunu emüle etmek zordur, zira RPCS3’ün gaye olarak çalıştığı x86 mimarisinde DMA sistemi yoktur. x86 sistemlerde işlemci kullanılarak makul bir bellek adresine erişim sağlanmaktadır.
  2. RSX GPU emülasyonu.
RSX bellek süreçleri, RPCS3’ün kendi içerisinde indirme ve yükleme (download ve upload) olmak üzere ikiye ayrılıyor. Yükleme süreci; kaplamalar, shader kodları üzere bilgilerin işlemciden GPU’ya taşınması sürecidir. Bu yükleme süreci, GPU şoförü tarafınca asenkron ve ağır bir biçimde yığınlama (batching) kullanarak hallediliyor. Büyük oranda data taşındığı için fazlaca fazla PCI-E bant genişliği (bandwidth) kullanılıyor. RPCS3 ekibi bunu kullanıcılara hissettirmemek hedefiyle çalışmalarını sürdürüyor lakin bu süreç RSX çipinin mimarisinde olduğundan dolayı zarurî. Bellekleriniz süratli değilse yahut eski bir PCI-E sürümü kullanıyorsanız, bu gecikmeyi hissedebilirsiniz.

İndirme süreci ise yükleme sürecinin aksisi bir biçimde, GPU’dan işlemciye data transferi sürecine deniyor. Bu süreçte ise maalesef bellek gecikmesinin üzeri fazlaca fazla örtülemiyor. Birden fazla vakit GPU belleğine işlemci tarafınca ihtar verilmeden ulaşılıyor. bu biçimdece GPU’nun istediğimiz bilgiyi işlemciye verip, PCI-E üzerinden cevap alınmasını bekliyoruz. Hatta birtakım oyunlar, ondan sonrasında fazlaca gereksinim duymayacakları dataları belleğe yazıyorlar, bu da daha fazla gecikme demek. Bundan dolayı RPCS3’te var iseyılan olarak “Buffer options” ayarı pasif olarak geliyor ve o bellek adresinde hiç bir şey olmamışçasına davranılmasını sağlıyor.

GPU kullanmasınız yüksek olduğu vakit RPCS3’ü kullanmamanız daha düzgün olacaktır. GPU’nuz bu bahsetiğimiz asenkron erişimlere yetişemeyebilir ve kararında düşük performans alabilirsiniz. Yani sistemde ekran kartını tek kullanan uygulamanın RCPS3 emülatörü olmasında yarar var.


RPCS3 ekibi daha uygun bir bellek kestirim algoritmasından bahsediyor. Bu algoritma hayata geçirilebilirse işlemcinin erişebileceği bellek bloğunu varsayım edip evvelde GPU komutlarını hazır hale getirecek, bu da biz kullanıcılara performans olarak yansıyacak. Öte yandan Resizable BAR (veya Smart Access Memory) teknolojisi yardımıyla bu gecikmeyi azaltabileceğinizi belirtelim.

Teorik olarak bilgilendiğimize göre bu bilgimizi kıyaslama ile pratiğe dökebiliriz. Öncelikle kıyaslanan konfigürasyonları sahneye alalım:

Konfigürasyon öncesi AIDA64 profili.
Konfigürasyon daha sonrası AIDA64 profili.

Manuel olarak bellek ayarı yapmak, yahut XMP’yi etkinleştirmek üzere ince dokunuşlar yalnızca RPCS3 üzerinde değil, tüm uygulamalarda işinize oldukcaça yarayacaktır. bu biçimdece gecikmeyi azaltabilir ve bant genişliğini arttırabilirsiniz. (Minimum ve azamî FPS kıymetleri içindeki farka dikkat ediniz.):

Konfigürasyon daha sonrasıKonfigürasyon öncesi

(Görselleri büyütmek için yeni sekmede açabilirsiniz.)

Birtakım bireyler PCI-e’nin hangi sürümünü kullandığını bile bilmiyor, ve bundan dolayı sürat düşüşleri yaşıyorlar. zatenız bu kriter, işlemci ile GPU’nun haberleşme suratını belirliyor. PCI-E sürümü ne kadar yeni olursa bant genişliği o kadar artıyor. bu biçimdece GPU-işlemci içindeki data transferleri, daha süratli gerçekleşiyor.

PCI-E 1.1 x16PCI-E 2.0 x16PCI-E 3.0 x16

PCI-E sürümünün aktüel olmasının yalnızca RPCS3 üzerinde değil, birçok oyunda da işe yaradığını belirtelim. “Horizon: Zero Dawn” oyununun PC portu, GPU ile daima bağlantı halinde olduğu için PCI-e standardının yeniliği oyun tecrübenizi etkileyecektir.

RPCS3, bilgisayarların sonlarını zorlaması ile bilinen bir uygulama. Husus overclock’a gelince beklenildiği üzere RPCS3’ün de performansı artıyor. Ama Sandy Bridge ve üstü bir Intel işlemcide birden fazla kullanıcı ringbus overclock’lamayı bilmiyor.

RPCS3’te bellek kullanması fazla olduğundan dolayı, L3 önbelleği de sık sık kullanılıyor. Bu yüzden ringbus frekansını arttırmak, transfer bant genişliğini arttıracaktır. Bu da bizlere FPS olarak geri dönecektir.

48x Cache40x Cache

Ayrıyeten RPCS3’ün AVX komut setlerinden faydalandığını belirtelim. AVX komut setlerini devre dışı bırakıp overclock yapan kullanıcılar performans düşüşü yaşayacaktır.

Nedir bu “ringbus”?

Sandy Bridge öncesi Intel işlemcilerde, her çekirdeğin özel L3 önbelleği irtibatları vardı. Bu da çekirdek başına yaklaşık 1000 çizgi daha fazla yer kaplanması demekti. Bu yaklaşımın, L3 belleğine gereksinimin artması ile birlikte o kadar da düzgün olmadığı gözlemlendi.

Ringbus sisteminin görselleştirilmiş hali.

Ayrıyeten Sandy Bridge mimarisine Intel, L3 belleğini paylaşan GPU ve görüntü transkodlama motoru koydu. Yaklaşık 1000 hat daha bağlamaktansa Intel, ringbus sistemi ile bu işi halletti. bu biçimdece Intel, ortak bir çizgi üzerine işlemci çekirdeği ve transkodlama motoru üzere komponentleri bağladı.

AMD kullanıcıları ne yapmalı?

Evet, Intel’de olduğu üzere AMD’de bir ringbus sistemi bulunmuyor. Zira ringbus teknolojisinin patenti Intel’in elinde.

AMD işlemcilerde ise bunun yerine “Infinity Fabric” denilen alternatif bir teknoloji mevcut. DRAM denetimcisi, PCI-E denetimcisi üzere komponentlerin gecikme ve bant genişliğini bu teknoloji denetim ediyor. Infinity Fabric, konfigüre edilebiliyor ve sürat olarak bellek süratiyle 1:1 oranda çalışması optimal stabilite ve performans ayarı olarak geçiyor. Birtakım durumlarda 1:1 oranında çalışmadığı da olabiliyor, bu da gecikmeyi arttırabiliyor. Ancak 3600 MHz’in üstündeki bellek suratlarında stabiliteden ödün verilerek genel manada bir performans elde etmek mümkün.

Bir çoğumuzun hatırladığı üzere, 2018’in başlarında Meltdown ve Spectre açıkları donanım dünyasını kasıp kavurmuştu. Çağdaş işlemcilerin daha süratli çalışmasını sağlayan kimi özelliklerde açık bulunmuştu, bundan dolayı bu özellikler kullanıcıların güvenliği ismine devre dışı bırakılmıştı. Kullanıcı güvenliği ismine hayli düzgün bir adım olduğu su götürmez bir gerçek. Ama daha fazla performans isteyen bireyler için performans azalması can sıkıcı.

RPCS3’ün performansı da bu süreç kararı birebir öteki uygulamalarda olduğu üzere düşmüş durumda. Aşağıda bulunan görsellerde performans farkını bakılırsabilirsiniz.

Muhafaza açıkMüdafaa kapalı

Ryzen ve yeni jenerasyon Intel makinelerin üstte bahsedilen açıklardan yalnızca birinden etkilendiğini dipnot olarak düşelim. Ayrıyeten Technopat olarak bu müdafaaların kapatılmasını önermediğimizi ve yalnızca aklınızda bulunması ismine sizlere bu bilgiyi sağlamış olduğumuzu belirtelim.

Aşağıdaki fotoğraflarda bellek ve cache (ringbus) frekanslarını arttırdıktan daha sonra oluşan artışı gorebilirsiniz.

Optimizasyon öncesiOptimizasyon daha sonrası

Donanım değişikliği yapmadan nasıl emülasyon performansınızı arttırabileceğinizden bahsettik. Şayet işlemciniz sizin emülasyon performansınızı düşük tutuyorsa, hangi işlemciyi alabileceğiz konusundaki soru işaretini giderebiliriz.

zatenız bu soru RPCS3’ün kendi sitesinde cevaplanmış bulunuyor. Lakin bu özellikler, RPCS3’ün uyumluluk listesindeki oyunlar için önerilmiş. Şayet bu listede sıralanmayıp, oynanabilir olarak düşündüğünüz oyunları oynamak istiyorsanız; yeni bir işlemci alırken şu noktalara dikkat etmenizde yarar var:

  • Kaç adet mantıksal işlemci (thread) var?
  • Tek çekirdek performansı ne durumda?
  • Oynamak istediğiniz oyunların TSX’e gereksinimi var mı?
RPCS3, işlemcideki “multithreading” özelliğini sıkça kullanan bir uygulama. O denli ki, kendi sitelerinde 16 thread’e kadar yüklüce bir biçimde kullanabileceği yazıyor. Ancak 16 thread’in üzerine çıkılmasının hayli fazla fark etmediği gözlemlenmiş. Bu cins bir durumda ise tekli çekirdek performansı daha büyük bir kriter oluyor. Ayrıyeten 16 thread’in bir mecburilik olmadığını hatırlatalım; mesela RDR ve başka birtakım oyunlar için 8 çekirdek/8 thread bir işlemciden 8 çekirdek/16 thread bir işlemciye geçmek büyük bir fark oluşturmayacaktır.


Transactional Synchronization Extensions (TSX), donanımsal olarak işlemsel bellek setini (transactional memory) ekleyen bir komut setidir. Yani TSX komut setleri, belleğin bir modülüne eriştikten daha sonra bir süreci devam ettirmemize müsaade verir ama diğer bir süreç (veya öteki bir iş parçacığı) birebir belleğe erişirse, bellekte evvelki süreçte yapılan değişiklikler yok sayılır. özetlemek gerekirse TSX, “mutex” sisteminin donanımsal olarak hızlandırılmış halidir.

İş parçacığı denetimi yapılmadığı vakit, “race condition” denilen durum oluşabilir. Yani bilgisayar tıpkı anda iki işi bir arada yapmaya çalışır. Bilgisayarın tabiatında bu biçimde bir şey olmadığından dolayı problemler baş gösterir. Bu yüzden iş parçacığı denetimi yapılmalıdır. TSX komut setleri ise bu denetimleri donanım düzeyinde verdiğinden dolayı epeyce süratli bir biçimde iş parçacığı denetimi yapabiliriz.


TSX fazlaca hoş gözükse de, üstte kelam ettiğimiz güvenlik açıkları kararı kırpılmak zorunda kaldı. TSX takviyeli işlemcisi olup Meltdown ve Spectre açıklarına karşı müdafaa güncellemesi alan kullanıcılar, RPCS3’ün emülatör log’larının ikinci satırında “TSX-FA” ibaresiyle karşılaşacaklardır. Bu da “Force abort“, yani zarurî durdurma manasına geliyor. Evvelce bahsetmiş olduğumiz üzere TSX, belleğin bir kısmını modifiye etmemize ve sonrasındasındasında süreci devam ettirmemize müsaade verse de, öbür bir süreç (thread) tıpkı bellek adresini modifiye ederse evvelki modifiyeyi yok sayar.

Mecburî yok sayma durumu ise açık tersi microcode’un bu sürece müsaade vermemesinden dolayı kaynaklanıyor. Yok sayma sayıları artınca da, performansta düşüş baş gösteriyor. Bu durum Nekotekina isimli geliştiricinin uyguladığı “Fallback Path” ile sıklıkla düzeltildi. Bu sayede, fazlaca fazla yok sayma durumu yaşandığı vakit RPCS3 emülatörü, donanımsal mutex sistemi olan TSX uzantıları yerine yazılımsal mutex sistemine geçiyor.

Microcode güncellemesini olağan olarak geri alabilirsiniz, ancak güvenlik açıklarına karşı müdafaasız olacağınızı hatırlatalım.


TSX teknolojisinin patenti de bir daha Intel’in elinde. AMD bir vakit içinder ASF ismini verdiği alternatif bir teknoloji ile Intel’in TSX’ine baş tutacaktı ancak bu gerçekleşmedi. Bilhassa TSX’te bulunan açıkların tesiri bu durumda büyük rol oynuyor. Ayrıyeten “elad335” rumuzlu RPCS3 geliştiricisi, RPCS3’te birtakım şeyleri değiştirdi. bu biçimdece TSX olmayan işlemciler ile olanlar içinde evvelce olduğu kadar performans farkı kalmadı. TSX’e geçiş artık getirdiği performans ve stabilite yardımıyla tercihe bağlı hale geldi.

Oyunların büyük çoğunluğu TSX gerektirmiyor ama birçok revaçtaki oyun için TSX kullanması zarurî sayılabilir. Örneğin God of War III, God of War Ascension, Uncharted 2/3 ve The Last of Us üzere oyunlarda TSX komut seti sıkça kullanılıyor. TSX olmadığı vakit bu oyunlarda donma ve çökme sorunları sıkça baş gösteriyor. Bu da TSX komut setine sahip olmayan kullanıcılarda doğal olarak bir telaş uyandırabiliyor. Ancak RPCS3’te bulunan “Accurate RSX Reservations” ayarı, TSX komut setini de emüle edebiliyor. Bu olağan ki performans açısından TSX kadar süratli olmayan bir prosedür, lakin bahsetmiş olduğumiz üzere TSX’i sıkça kullanan oyunlarda sizlere stabilite kazandıracaktır. Ayrıyeten “kd-11” rumuzlu geliştiricinin daha düzgün bir TSX emülasyonu üzerinde çalıştığını dipnot olarak belirtelim.

TSX kapalı, eski TSX emülasyon metodu açıkTSX kapalı, yeni emülasyon metodu açıkTSX açık

TSX’e sahip olmayan işlemci kullanıcıları için yeni metod bizce fazlaca uygun oldu. Bilhassa Intel’in 10.nesilde TSX’i kaldırdığını düşünürsek, gelecekte de bu metod işe yararlılığını koruyacaktır.

RPCS3 Discord sunucusunda, kullanıcıların kullandığı işlemcilerin kıyaslanması ve yeni işlemci alan bireylerin soru işaretlerini gidermesi ismine istekli bir benchmark testi yapılmış. Bu test kararında çıkan grafik aşağıdaki üzere olmuş:

İşlemcilerin Red Dead Redemption oyunu içerisindeki kıyaslamaları.

Bu testlerde şu ayarlar kullanılmış:

  • İşletim sistemi: Windows 10 2004
  • SPU Döngü Algılaması (SPU Loop Detection): Devre dışı
  • SPU Blok Boyutu (SPU Block Size): Mega
  • Anti-Aliasing: Devre dışı
  • Renderer: Vulkan
  • Relaxed ZCull: Etkin
  • Uyku vakit içindeyıcı Bütünlükleri (Sleep Timers Accuracy): Ana makine ile tıpkı
  • VBlank: 120 Hz (30 FPS limiti üzerine çıkmak hedefli faal.)
Birden fazla kişi Ryzen 9 3950X’in nasıl olur da iki katı fazla çekirdek sayısı ve cache boyutu bulunmasına karşın Ryzen 7 3800X’in gerisinde kaldığını merak ediyor. Bunun niçini ise, 3950X’te birebir Threadripper işlemcilerde olduğu üzere “oldukçalu die” bir dizaynın hakim olmasıdır. Bu yüzden de çekirdekler ortası gecikme oluyor.

Ormanda bir Threadripper’ın dört Ryzen 7 gücünde olduğu söylentileri gerçekmiş!

Başka yazılımlardan farklı bir biçimde RPCS3’te sanal PPU ve SPU iş parçacıkları daima olarak irtibat halinde olduğundan dolayı, bu iş parçacıklarının farklı die’larda olması büyük bir darboğaz oluşturuyor. Bundan dolayı die başına 3 yahut 4 çekirdeğe sahip olmadığı sürece Ryzen işlemcilerin kullanılması, RPCS3 tarafınca pek tavsiye edilmiyor.

Tavsiye edilen Ryzen işlemciler ise; RPCS3, PPU ve SPU iş parçacıklarını tek bir die’a sığdırabileceği öngörülerek tavsiye ediliyor. bu biçimdece gecikmenin de önüne geçiliyor. Her ne kadar başka Ryzen işlemcilerde de artık bunun önüne geçiliyor olsa da, RPCS3 için hala büyük bir darboğaz demek. Ayrıyeten Microsoft’un da, Windows 10’un 1903 sürümünde Ryzen işlemciler için fazlacalu nazaranv vakit içindeyıcısını güncellediğini hatırlatalım.

Intel işlemcilerde ise bu biçimde bir gecikme sorunu yok, zira Intel işlemciler tek bir die üzerinde çalışacak biçimde tasarlanıyor. Ayrıyeten Intel işlemcilerin tekli çekirdek performansının daha yüksek olduğunu düşünürsek, çoklukla niye AMD tarafında denk işlemcileri geçtiğini daha güzel anlayabiliriz.

i7 8700K işlemcideki die.

Bunlarla birlikte, i9 9900KS ile i9 9900K’nın içindeki 5 FPS’lik fark sıklıkla saat suratından dolayı olsa da, daha büyük önbellek boyutu ve daha süratli bellekler bu farkın oluşmasında tesirli. Red Dead Redemption’ın bu şekil ayrıntılara bayıldığını üstte nazaranbilirsiniz.

Özet

Bu yazımızda sizlere RPCS3’ün emülasyon performansını nasıl arttırabileceğinizi teknik ayrıntılar ile birlikte anlattık ve Technopat’lar için okuması çok keyifli bir yazı ortaya çıktı! Aklınızda kalan soru işaretlerini Technopat Toplumsal üzerinden sorabilir, eklemek istediğiniz bir şey olursa yorumlar kısmında bizimle buluşabilirsiniz!