Yeni başlayanlar için Silkroad Online x86 Mimarisinde Multi GameServer Neden Gereklidir?

PortalDark

Sıkıldım

.
Aktiflik: 100%
3000 mesaj Lord
Katılım
6 Şub 2019
Mesajlar
3,845
Çözümler
83
Tepkime puanı
18,669
Puan
113
Konum
Steam
Thread owner
Silkroad Online x86 Mimarisinde Multi GameServer Neden Gereklidir?



Giriş

Silkroad Online (vSRO / iSRO / kSRO / TRSRO) server files yapısı büyük ölçüde x86 (32-bit) mimari üzerine kuruludur.
Bu mimarinin en büyük teknik kısıtlaması, tek bir process’in kullanabileceği RAM miktarının sınırlı olmasıdır.

Bu konu, özellikle:
- Tek GameServer kullanıp crash yaşayanlar
- “Lag yok ama server çöküyor” diyenler
- Tüm bölgeleri açıp memory problemi yaşayanlar

için kritik bir konudur.



x86 Mimari ve RAM Limiti

32-bit (x86) bir process’in adresleyebileceği maksimum alan:

Kod:
İçeriği görebilmek için Giriş yap ya da üye ol.

Ancak gerçek kullanımda:
- Windows kernel alanı
- DLL’ler
- Heap fragmentation
- Memory mapping

nedeniyle kullanılabilir alan düşer.

Gerçek stabil limit:

~3.7 GB RAM

Bu sınır aşıldığında:
- Memory allocation fail
- std::bad_alloc
- Access violation
- Direct crash

kaçınılmaz hale gelir.



Silkroad Online’da Problem Nerede Başlıyor?

Silkroad server yapısı:
- Çok fazla region (Jangan, Donwhang, Hotan vb.)
- NPC AI sistemi
- Trade / Job system
- Mob spawn yoğunluğu
- Skill & skill effect yükü
- Player yoğunluğu

tüm bunları TEK bir GameServer process içine yükler.

Bu durumda:
- Memory sürekli artar
- Garbage/fragmentation oluşur
- Tek process 3.7 GB limitine ulaşır

ve sonuç:
Server crash



Multi GameServer Neden Gereklidir?

Multi GameServer yapısında amaç şudur:

Yükü tek process’e bindirmek yerine bölmek.

Örnek yapı:

- GameServer_1 → Jangan / Donwhang
- GameServer_2 → Hotan / Roc region
- GameServer_3 → Job / Battle zone

Bu sayede:
- Her GS kendi RAM alanını kullanır
- 3.7 GB limitine daha geç ulaşılır
- Fragmentation bölünür
- Stabilite ciddi şekilde artar



Tek GameServer Kullanmanın Sorunları

Tek GS ile:
- Tüm world tek memory heap’e yüklenir
- Uzun süreli uptime’da RAM sürekli artar
- Restart ihtiyacı sıklaşır
- Random crash riski yükselir

Özellikle:
- 200+ online player
- yoğun mob spawn
- aktif job war

gibi durumlarda bu limit çok hızlı dolabilir.



Multi GameServer Avantajları

✔ RAM yükü bölünür
✔ Crash riski düşer
✔ Region bazlı optimizasyon yapılır
✔ Uzun uptime sağlanır
✔ Daha stabil economy / event sistemi



Önemli Not

Multi GameServer:
- FPS artırmaz
- latency sihirli şekilde düşürmez

Ama:
server crash problemini büyük oranda çözer.



Sonuç

Silkroad Online x86 mimarisinde en büyük limit CPU değil, RAM adresleme sınırıdır.

Bu yüzden:

Tek GameServer = Riskli yapı
Multi GameServer = Stabil yapı


Özellikle vSRO / kSRO / TRSRO / iSRO türevlerinde, uzun süreli stabil server hedefleniyorsa Multi GameServer kullanımı neredeyse zorunludur.



Bu limit yazılımsal değil, mimari bir kısıttır.

1779971929957.png
 
Çok gerekli bir konu sağ olun. Sadece merak ediyorum Multi gameserver'in herhangi bir dezavantajı var mı?
 
Thread owner
Çok gerekli bir konu sağ olun. Sadece merak ediyorum Multi gameserver'in herhangi bir dezavantajı var mı?


Konuda geçen "Multi GameServer'in herhangi bir dezavantajı var mı?" sorusuna detaylı bir açıklık getirmek isterim. Aslında bu bir dezavantajdan ziyade, vSRO altyapısı için teknik bir zorunluluktur. Nedenlerine detaylıca gelirsek:

1. x86 (32-Bit) Mimarisinin RAM Sınırı
Bildiğiniz gibi GameServer.exe x86 mimarisinde çalışmaktadır. Bu mimarinin doğası gereği tek bir process (işlem) maksimum ~3.8 GB RAM kullanabilir. Sunucudaki yük arttıkça ve bu sınır aşıldığında GS direkt olarak crash verir (kapanır).

2. 50.000 Obje (Entity) Limiti
Tek bir GameServer üzerinde ortalama 50.000 obje limiti mevcuttur. Bu limite haritada gördüğünüz her şey dahildir:
  • NPC = 1 Obje
  • Karakter (Player) = 1 Obje
  • Mob (Canavar) = 1 Obje
  • Petler (Toplayıcı, Saldırı, Binek vb. hepsi kendi içinde ayrı sayılır) = 1 Obje

Peki bu limiti aşabiliyor muyuz?
Evet, reverse engineering (assembly) müdahaleleri ile bu sınırı istediğiniz sayıya çıkartabilirsiniz. Fakat limiti artırdığınızda GameServer'ın RAM kullanımı da o objeleri işleyebilmek için doğal olarak artacaktır. RAM kullanımı yukarıda bahsettiğim 3.8 GB sınırına ulaştığı an sunucu yine Crash verecektir.

Çözüm: Haritaları Multi GS ile Bölmek
İşte tam olarak bu sınırları zorlayıp sistemi kararsızlaştırmamak ve stabiliteyi korumak adına, GameServer'ın limitlerini hiç ellemeden haritaları farklı GameServer'lara (Multi GS) böleriz.

Örnek bir Multi GS Dağılımı:
  • GameServer 1: Jangan, Donwhang, Hotan, Thief Map, Jangan Cave
  • GameServer 2: Samarkand, Constantinople, Roc Mountain
  • GameServer 3: Alexandria, Baghdad vb.

Özetle; Multi GameServer kullanmak dezavantaj değil, kalabalık oyunculu veya bol mob/pet içeren sunucularda lag ve crash sorunlarını ortadan kaldıran en sağlıklı ve profesyonel altyapıdır.
 
ben modulcüyüm ama kullandığı ram miktarına müdahale edemiyormuyuz daha da stabil çalıştırabilmek için.
 
Thread owner
ben modulcüyüm ama kullandığı ram miktarına müdahale edemiyormuyuz daha da stabil çalıştırabilmek için.
X86 nın malesef 3.7 gb limiti var
tüm bölgeleri açarak
hatta 50.000 limiti 400.000 gibi hatta 500.000 gibi yaparak gs açarsan 3.8 e gelince runtime hatasını alırsın ramdeki gibi
o yüzden
 
Varolanı boşaltmak benim amacım. Mesela yeni oyun motorlarında geride kalan map, mob, boss, ve animasyonları sürekli oynatmak yerine pasife çeker yeniden kullanılana kadar. Biz de düşen dropların sürelerini, mob slotlarındaki hep aynı olan sürekliliği bir nebze rahatlatabiliriz bence. Belirli bir sayıda belirli bir zaman içerisinde öldürülünce yan koordinatın mobu çıkıyor sroda. Biz bunu her slota 1 mob koyarak kesildiğinde yan koordinatları tetikleyecek şekilde hem bu 4gb alnından tasarruf ederiz hem de işlemcinin yükünü hafifletiriz. Hatta şöyle bir durum var: sroda düşük levelden, yüksek level e her giren oyuncu kasabilsin diye her levelin moblarının durması gerek. Level e göre mob çıkarabilmeyi pandora boxlarda yapabilmiştim gs de dll ye yönlendirerek, ama direk slottakileri nasıl yapabilirim düşünüp deneyeceğim.
 
Thread owner
Varolanı boşaltmak benim amacım. Mesela yeni oyun motorlarında geride kalan map, mob, boss, ve animasyonları sürekli oynatmak yerine pasife çeker yeniden kullanılana kadar. Biz de düşen dropların sürelerini, mob slotlarındaki hep aynı olan sürekliliği bir nebze rahatlatabiliriz bence. Belirli bir sayıda belirli bir zaman içerisinde öldürülünce yan koordinatın mobu çıkıyor sroda. Biz bunu her slota 1 mob koyarak kesildiğinde yan koordinatları tetikleyecek şekilde hem bu 4gb alnından tasarruf ederiz hem de işlemcinin yükünü hafifletiriz. Hatta şöyle bir durum var: sroda düşük levelden, yüksek level e her giren oyuncu kasabilsin diye her levelin moblarının durması gerek. Level e göre mob çıkarabilmeyi pandora boxlarda yapabilmiştim gs de dll ye yönlendirerek, ama direk slottakileri nasıl yapabilirim düşünüp deneyeceğim.
yapay zekaya dedim boş olan regionların navmeshlerini hafızaya alma eğer birisi o regiona girmeye çalışırsa tetikle ve navmeshi gameservere yükle vb vb algılamadı

tahminen anca Claude 4.8 vb de düzelir bu sorun belki

yapamadı yani

anca böyle azalır ram olayı


oyuncu yoksa navmesi sökecek o regiona oyuncu gelirse tetikleyip tak diye yükleyecek. ram o nvm yi
 
//SR_GameServer.exe

uint32_t monsterSpawnLimit = 50000;

WriteMemoryValue<uint32_t>(0x0054D609 + 1, monsterSpawnLimit);
WriteMemoryValue<uint32_t>(0x0054D61C + 3, monsterSpawnLimit);
WriteMemoryValue<uint32_t>(0x0054D654 + 1, monsterSpawnLimit);
WriteMemoryValue<uint32_t>(0x0054D662 + 2, monsterSpawnLimit);
WriteMemoryValue<uint32_t>(0x0054D6D8 + 2, monsterSpawnLimit * 0x1D0); // 0x1D0 Memory allocation for each object

/worldstats değerim yaklaşık 93.000. 100.000'in üzerinde GS çöküyor.
100.000'in altında tutun ve deneyin. Hiçbir gecikme yok.



yapay zekaya veri vermeden sana bir şey vermiyor. sro da map bloklardan oluşuyor src olsa çok basit yeni sistemi yapmak aslında ama dll ile dar boğaza sokar ve patlatır gibi geliyor. bir anda birden fazla map tetiklenip aynı anda mob tetiklenirse ve sadece bu işi yapmadığında dll şişer.
 
Claude'ye yeni bir silkroad yap de, emin ol senin için yapacaktır. Delirttin makinayı, oyuna dair her şeye hakim artık. Cevaplarını bile ona yazdırıyorsun be adam, dur artık! :D
 

Bu konuyu görüntüleyen kullanıcılar

Etiketler
Geri
Üst Alt