Linux: Kernel Performance Tuning für ETQW

Alles rund um das Thema ET:QW
Antworten
Benutzeravatar
Master Mayhem
Helpdesk
Helpdesk
Beiträge: 1395
Registriert: Sa 28. Jun 2003, 13:36
Wohnort: Castle Wolfenstein
Alter: 90
Kontaktdaten:

Linux: Kernel Performance Tuning für ETQW

Beitrag von Master Mayhem »

Hallo zusammen,

bei dem Versuch ETQW unter Linux mit ausreichend FPS zocken zu wollen, hatte ich fast aufgegeben, obwohl ich mir es nicht erklären konnte, wo die FPS denn verloren gehen. In einem anderen Thread hier ist schonmal aufgefallen, dass bei mir vermutlich die CPU begrenzt. Erstmal das System:

ASUS A8N-SLI Delux NForce4 Board
2x1GB Corsair RAM
AUSU EN 7950 GT mit 512 MB RAM
AMD Athlon(tm) 64 X2 Dual Core Processor 4400+
24" Monitor 1920x1200 native Auflösung

Damit kann ich unter Windows recht gut mit 1920x1200 ETQW spielen, ich hatte immer 30 FPS auch mit hohen Grafik Einstellungen, und egal, was passiert (hab unter Windows nie unlock_FPS getestet). Unter Linux hatte ich immer extreme Einbrüche bis auf 15 FPS runter, wenns online richtig zur Sache ging - und da hat auch den zweiten Monitor ausstellen (hab Twinview und Xinerama getestet, beides kostet viel FPS) nichts gebracht, die FPS waren nie über 40 (da hab ich mit unlock_FPS usw getestet) und üble Einbrüche, die das ganze unspielbar gemacht haben.
Dabei hab ich öfter top, oder andere CPU Überwachungen laufen lassen und festgestellt es ist definitiv die CPU, die mir diese üblen Einbrüche bei den FPS verschafft.
Beim ETQW Config tunen (dazu später mehr) ist mir das README.txt im etqw Ordner aufgefallen, ich darf mal zitieren:
ETQW Dedicated Server and Client for GNU/Linux x86
==================================================

Important system requirements:
------------------------------

You need a low latency kernel for optimal performance (this applies to both client and server installatio
ns). Make sure your kernel
is configured with CONFIG_HZ_1000=y. You should also enable other low latency settings, such as the vario
us preemption settings.
Hmmm - warum wird sowas nicht deutlicher bei den System Voraussetzungen für Linux Client und Server gesagt??
Denke keine Distribution wird im Standard so einen Kernel ausliefern - debian auf jeden Fall nicht, bei lenny siehts im momentanen Kernel 2.6.22 auf jeden Fall so aus:

Code: Alles auswählen

schlachtfeld:~# cat /boot/config-2.6.22-3-k7 | grep CONFIG_HZ     
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
schlachtfeld:~#
Also mal eben schnell einen neuen Kernel bauen, dazu build-essential, kernel-package und kernel-sourcen installieren, die sourcen entpacken unter /usr/src in das neue Verzeichnis wechseln und:

Code: Alles auswählen

make-kpkg --append-to-version=.performance --revision 0.1 --config=menuconfig configure
Da geht auch xconfig, wenn ihr euch vorher mit sux in eine xshell eingeloggt habt (kernel kompilieren mache ich immer von anfang an, also auch das configure als root).
Naja, wer das zum ersten mal sieht ist evtl etwas schockiert von der Fülle, am besten als Grundlage die alte config aus dem /boot Verzeichnis holen und nur folgende Einstellungen ändern:

General setup -->
Local version - append to kernel release - add something in here to identify the kernel and give it a different name to the previous kernel.
[ ] Optimize for size - Disable this

Processor type and features --->
Processor family - select -> choose your processor type
Preemption Model - select -> (Low Latency Desktop)
[*] Preempt The Big Kernel Lock ) - enable this (if availible)
Timer frequency - select -> (1000 HZ)

Nach dem folgendem Befehl sollte man nen kleinen Spaziergang machen (bei mir ca 30 min.)

Code: Alles auswählen

make-kpkg clean && make-kpkg --initrd --append-to-version=.performance --revision 0.1 kernel_image kernel_headers
Dann hat man zwei deb Pakete im sourcen Ordner liegen, die man entweder mit dpkg -i installiert, oder eben ein lokales Archiv baut, bei mir ist das /var/cache/localpackages. Also deb Pakete dahin kopieren, in das Verzeichnis wechseln und:

Code: Alles auswählen

dpkg-scanpackages ./ /dev/null | gzip > Packages.gz
In die /etc/apt/sources.list dann folgendes Eintragen:

Code: Alles auswählen

deb file:/var/cache/localpackages ./
Nach nem apt-get update kann man das Paket dann über apt, oder aptitude installieren, und hat nen sauberen Paketmanager.

Jetzt zum ETQW config tunen. Obwohl der neue Kernel einiges bringt ist bei mir immernoch die CPU eine kleine Bremse, was ich durch

Code: Alles auswählen

seta com_unlock_timingMethod "1"
ausgeglichen habe.
Die vollen Einstellungen in meiner autoexec.cfg zum tuning:

Code: Alles auswählen

seta com_unlockFPS "1"
seta com_unlock_maxfps "60"
seta com_unlock_timingMethod "1"
seta com_showFPS "1"
seta com_videoRam "512"
Damit klebe ich beim ein Monitor Betrieb in der xorg.conf gesetzt und einer Auflösung von 1920x1200 in etqw an den 60 FPS fest...ob auch 90 drinsitzen teste ich mal heute abend. V-Sync, Antialiasing, und ansitropische Filterung ist komplett ausgestellt, und der rest auf niedrig gestellt, aber da geht bestimmt auch noch mehr. Ohne den neuen Kernel hat alles runterstellen gar nichts gebracht!
Mit Twinview, oder Xinerama und der zweite Monitor an mit dem neuen Kernel komm ich grade mal auf konstante 30 FPS, ohne die üblen FPS Einbrüche von vorher, ohne Kernel tuning.

Zusammengefasst:

Wenns deutlich an der CPU liegt, dass ETQW zu wenig FPS hat, erstmal Kernel mit den o.g. Einstellungen neu kompilieren, danach in der autoexec.cfg die Einstellungen vornehmen und dann mal den zweiten Monitor ausmachen.

Ja mich nervt der X Neustart auch, aber von Xinerama, oder Twinview auf ein Monitor Betrieb geht nur mit X Neustart. Ich nutze dann auch direkt die Gelegenheit und logge mich in eine icewm Session ein, die zieht fast keine System Ressourcen, und mein schöner enlightenment Desktop wird nicht vom Start in den ein Monitor Betrieb versaut...der ist schön konfiguriert und kommt gar nicht damit klar nur noch einen Monitor zu haben.

Hier die Quellen:
http://www.suseforums.net/index.php?showtopic=40440
http://wiki.debianforum.de/DebianizedLinuxKernel
http://debiananwenderhandbuch.de/kernelbauen.html
http://www.lug-kr.de/wiki/DebianKernelKompilieren
http://community.enemyterritory.com/for ... php?t=2042

Viel Spass beim kompilieren, und bei Fragen immer her damit.....bei suse, oder ubuntu gibts aber nur links auf howtos, oder wikis ;-)

mfg tyler

p.s.: wie wärs mit nem city-wiki?
Bild

Bild

Wer Rechtschreipfähler findet, darf diese NICHT behalten, die gehören mir!

He was killed serving Project Mayhem, sir!
ciTy][Tyler

Ich bin /ruth, ich darf das!
silver
Hero of City
Hero of City
Beiträge: 4731
Registriert: Di 1. Jul 2003, 17:35
Wohnort: Castle Wolfenstein
Kontaktdaten:

Beitrag von silver »

nen wiki wäre sicher keine schlechte idee. da spiele aber meist keine allzu lange lebensdauer haben, glaub ich reicht das forum auch. mal schaun. ich werds mal intern ansprechen.

was etqw betrifft, hab ohne kernel tuning und mittleren einstellungen bei ner 11xx auflösung (ich spiele im window und mein 19" hat 1280x1024) mit twinview normale 40-60fps. wenn die welt untergeht hab ich mal 30. hab kernel noch nie selbst gemacht, daher weiß ich jetzt nicht ob ich das mal so schnell machen werde. hatte aber damals unter windows sogar weniger fps. also bei mir rennts mit dem normalen 2.6.22-14-generic unter 7.10 kubuntu sehr flüssig und angenehm. meine cpu taktet sogar sehr selten hoch bei qw. eigentlich nur beim laden der map oder wenns mal sehr sehr zu geht. qw ist ja normal eher gpu lastig. aber auf alle fälle ein netter tipp. mal schaun, vielleicht ist mir ja fad.

hilft das nur bei qw oder auch bei et und anderen spielen?
was genau macht CONFIG_HZ=250 eigentlich?

mein system
cpu: intel c2d e6750 (2x2.67MHz)
gpu: 7600gt golden sample (ab werk übertaktet)
ram: 2x 1gb corsair drr2-800 cl4
tft: 2x syncmaster 940bf @1280x1024
Bild
Bild
[url=irc://de.quakenet.org/wolfenstein-city]#wolfenstein-city @ quakenet[/url]
https://rtcw-city.de
www.EnemyTerritory.de
Benutzeravatar
Master Mayhem
Helpdesk
Helpdesk
Beiträge: 1395
Registriert: Sa 28. Jun 2003, 13:36
Wohnort: Castle Wolfenstein
Alter: 90
Kontaktdaten:

Beitrag von Master Mayhem »

Silver hat geschrieben:nen wiki wäre sicher keine schlechte idee. da spiele aber meist keine allzu lange lebensdauer haben, glaub ich reicht das forum auch. mal schaun. ich werds mal intern ansprechen.
Das würde ich auch wohl pflegen - und RTCW fragen kommen noch dann und wann...da ist mache Linux Distribution schneller gestorben
Silver hat geschrieben: hab kernel noch nie selbst gemacht, daher weiß ich jetzt nicht ob ich das mal so schnell machen werde.
Hört sich schwerer an, als es ist...sonlange man den alten Kernel installiert lässt und im Bootloader eingetragen lässt, kann eigentlich nichts passieren. Und wenns ausdrücklich im readme vom Spiel drinsteht kanns ja nicht falsch sein
Für Spieleserver und zum Benchmarken unter Linux wird die Option gerne gesetzt:
http://www.phoronix.com/forums/archive/ ... -5417.html
http://forum.pur3gaming.com/showthread.php?t=5
Silver hat geschrieben:qw ist ja normal eher gpu lastig.
Da habe ich andere Erfahrung gemacht, bei mir geht es gelegentlich noch bei einer CPU auf 99% und der anderen um die 90% hoch, vor dem neuen Kernel hatte ich häufiger beide auf 99%. Aber evtl hast du mit deinen 2x 2.67GHz genau die kritische Grenze überschritten - ich hab nur 2x 2.2GHz und schon überlegt auf 2.6 GHz zu übertakten.
Silver hat geschrieben:hilft das nur bei qw oder auch bei et und anderen spielen?
Das bringt was für alle Anwendungen, vor allem die latenz abhängig sind, was z.B. bei sound schnitt programmen sind...und ETQW ist halt auch sehr latenz abhängig.
Das bringt halt nur was bei einigermaßen neuen CPUs und da braucht RTCW oder ET kein Tuning mehr...aber ja es bringt trotzdem noch was..
Silver hat geschrieben:was genau macht CONFIG_HZ=250 eigentlich?
Keine Ahnung, aber auf mich wirkt es so, als würde ein Takt jetzt 4 mal so schnell laufen (vorher 250, jetzt 1000) das muss doch gut sein ;-)

mfg tyler
Bild

Bild

Wer Rechtschreipfähler findet, darf diese NICHT behalten, die gehören mir!

He was killed serving Project Mayhem, sir!
ciTy][Tyler

Ich bin /ruth, ich darf das!
silver
Hero of City
Hero of City
Beiträge: 4731
Registriert: Di 1. Jul 2003, 17:35
Wohnort: Castle Wolfenstein
Kontaktdaten:

Beitrag von silver »

viel infos dazu find ich leider nicht. hab irgendwas gelesen das es mit dem scheduler zutun hat. der wechsel der prozesse dürfte dann 4 mal so schnell sein. vielleicht weiß woodstokk da bissl mehr.

btw wie gesagt mein cpu taktet kaum hoch bei qw. eigentlich rennt die immer auf 2ghz.
habs nur beim governor eingestellt das sie bei et hoch taktet weil das mehr cpu lastig ist und ich immer laggs beim hoch und runter takten habe, die hab ich zwar jetzt auch noch aber nur ganz ganz selten. vielleicht 1mal bei alle paar std. vielleicht liegt das aber auch an dem mit den 1000. wer weiß. naja mal schaun.
Bild
Bild
[url=irc://de.quakenet.org/wolfenstein-city]#wolfenstein-city @ quakenet[/url]
https://rtcw-city.de
www.EnemyTerritory.de
MadGun
Hirngeschädigter
Hirngeschädigter
Beiträge: 1282
Registriert: Di 18. Feb 2003, 17:11
Wohnort: Bayern
Alter: 37
Kontaktdaten:

Beitrag von MadGun »

Also ich als Linux-Depp hab zwar keine Ahnung was genau mit CONFIG_HZ festgelegt wird, hab mich aber auch mal bisserl gegoogelt. Mit internal Timer Frequency im Zusammenhang mit I/O Scheduler ist meiner Meinung nach einfach die Zeit gemeint, die jeder Prozess vom Scheduler zugewiesen bekommt.

Gängige OS verwenden ja allesamt die RoundRobin (Zeitscheiben)-Strategie, sprich n Prozess bekommt ne bestimmte Zeit (bei 250 Hz wären das 4ms) die Ressourcen zum Rechnen (CPU usw) zugewiesen, bevor der Scheduler (bzw. auch das "ausführende Organ", der Dispatcher) die Ressourcen entzieht und für den nächsten Prozess wieder ne Zeitscheibe (wiederum 4ms) zur Verfügunge stellt. Das ganze läuft dann immer rekursiv rum.

Bei 1000Hz wäre dementsprechend ne Zeitscheibe nur 1ms --> nicht sehr rechenlastige, aber dafür viele nebenläufige Prozesse sind schneller als sie bei frequ=250==>Zeitscheibe=4ms wären; bei rechenintensiven Prozessen sieht die Sache wieder anders aus.

Mit Prozess meine ich dabei nicht den typischen Windows-prozess sondern vielmehr auch die Threads die innerhalb eines PRozesses ausgeführt werden.

Falls ich jetz auch noch recht habe ziehe ich drei schlussfolgerungen:
-ETQW hat viel gefächerte Prozesse
-Ich weiß endlich, wie lang eine Zeitscheibe in Linux is (habe ich mich das vergangen Semester öfter gefragt)
-UNI nutzt zT tatsächlich etwas ;)

Falls ich net recht habe:
:oops:
Bild
ciTy][MadGun

195.4.18.203:27960 - ciTy Gameserver
195.4.18.203:8767 - ciTy TeamSpeak
silver
Hero of City
Hero of City
Beiträge: 4731
Registriert: Di 1. Jul 2003, 17:35
Wohnort: Castle Wolfenstein
Kontaktdaten:

Beitrag von silver »

jop wie gesagt ich nehm auch an es betrifft den scheduler nur hab ich nach 2min nimmer weiter gesucht ^^
dann passt ja das was ich auf die schnelle gefunden hab.

hab die einstellung nur im zusammenhang mit servern gefunden die ja normalerweise mehr threads am laufen haben bzw eben die ganzen clients abfertigen müssen. bei vielen threads muss halt oft gewechselt werden damit keiner verhungert und jeder cpu zeit bekommt um nicht ins stocken zu kommen. gerade bei spielen würd ne verzögerung halt auffallen. ist die cpu nun schneller, kann die verzögerung wieder wegfallen da die cpu ja in den sagen wir 4ms mehr abarbeitet.

btw sind wir mal froh das round robin verwendet wird. sjf, fcfs, usw. wären nicht so optimal für ein aktuelles multitask/multiuser betriebssystem.
Bild
Bild
[url=irc://de.quakenet.org/wolfenstein-city]#wolfenstein-city @ quakenet[/url]
https://rtcw-city.de
www.EnemyTerritory.de
Antworten