Nachdem uns Marvel hier einen der Vorzüge des Export-Mechanismus näher gebracht hat, will ich diesbezüglich mal meine eigene Erfahrung und die mir dabei aufgefallenen Nachteile loswerden:
Ich war gestern auf der Suche nach den verlorenen Frames, nachdem ich zusammen mit Wildhog ein paar Benchmarktests gemacht hatte und ich beim Vergleich der Ergebnisse wegen der offenbar mieserablen Performance meiner neu angeschafften RTX 3080 TI erstmal aus allen volumetrischen Wolken gefallen bin.
Wir verwendeten in DCS die beim Supercarrier mitgelieferte Mission "Population Template", bei welcher man auf einem voll besetzten Carrier spawned. Hier hatte ich, nachdem wir die Grafik-Settings abgeglichen hatten, locker 20 FPS weniger als Wildhog auf seiner RTX 3070.
Also habe ich angefangen zu suchen: Treiberversion, Einstellungen in Windows, im Nvidia-Controllpanel, im Bios, PCI (4.0,3.0 usw.) - Alles in Ordnung.
Schlußendlich hat mir ein sehr gutes Tool, welches mit den Nvidia-Treibern mitgeliefert wird, unheimlich geholfen das Problem einzugrenzen.
Man sieht hier ganz deutlich, dass meine GPU nur Teils ausgelastet ist, das hat mich erstmal beruhigt. Jetzt war nur die Frage, woran das liegt bzw. wie ich das ändere.
Nachdem ich aller Variablen die mir eingefallen sind nach Rücksprache mit Wildhog aus der Gleichung entfernt hatte und immer noch keine Besserung eingetreten ist, fiel mir zum Glück noch die Export.lua ein, die ggf. anders ausehen könnte, als die von Wildhog.
Habe also testhalber mal alle Tools (4 an der Zahl) entfernt und die gleichen Tests erneut durchgeführt. Und siehe da, in den extremsten Fällen habe ich durch die Tools über 30 FPS verloren (in dem hier reproduzierten Fall waren es "nur" 22) .
Meine Vermutung:
Das Problem, das DCS (im Moment noch) hat, ist, dass es quasi single-threaded läuft. D.h. dass für jedes Frame, alles was zu tun ist nacheinander abgarbeitet werden muß. Von der Berechnung aller Einheiten in der 3D Welt, das eingene Flugmodel, Vorbereitung der Grafik, aufrufen aller Tools in der export.lua und schließlich die Anzeige, wobei nur letzteres auf die GPU geht, das andere auf die CPU. Wenn dann ein Tool in der Export.lua für seine Abarbeitung zu lange benötigt, dann hilft auch keine 4000 Euro teure RTX 3090 TI. Die wäre dann vielleicht nur zu 5% ausgelastet bei weiterhin mieserablen Frameraten.
Jetzt könne mann natürlich meinen, dass also entweder die GPU oder die CPU auf 100% laufen sollte. Am zweiten Screenshot ist aber gut zu sehen, dass weder die GPU noch die CPU annähernd ausgelastet sind. Der Flaschenhals muß also woanders liegen. Das kann dann nur noch etwas Bus-, IO-, IPC- oder TCP-Stack-technischens sein. Z.B. dass ein Tool zu lange benötigt, Koordinaten auf die Festplatte zu schreiben, wie es TacView macht. Oder u.U. suboptimal implementierte TCP Kommunikation zwischen DCS und einem externen Prozess wie sie z.B. in SRS Verwendung findet.
All das habe ich noch nicht vollends ausgewertet, aber fest steht: Entweder alle Tools ein bischen oder eines meiner 4 Tools im speziellen hängt sich etwas zu lange im DCS-Prozess fest und beschert mir diesen enormen FPS-Verlust.
So toll ich die Möglichkeiten, die mir die Export.lua bietet auch finde, solange die Abarbeitung von externen Zusatztools an den GFX-Thread gekoppelt ist, werde ich dieses Feature in Zukunft mit Vorsicht genießen.
Hoffnung gibt mir im Moment die sich in Entwicklung befindliche Vulkan API, die durch Multithreading eben genau diese Abkopplung bewirkt.
Da ich in letzter Zeit des öfteren in Diskussionen bzgl. Einbindung von Tools über die Export.lua involviert war, dachte ich, das es den einen oder anderen interessieren könnte...
Vielleicht gibt es ja auch doch nochmal Anreiz über die Nutzung des internen Voice-Chat nachzudenken - wobei ich noch nicht genau weiß, wieviel FPS-Verlußt der im Moment genutzen Alternative SRS zuzuschreiben sind.
Gruß
Joker