Battlefield 4 Tearing und Input Lag verhindern mit VSync und FPS Limit

17. Juni 2016 Keine Kommentare

In Battlefield 4 hatte ich das Problem dass Tearing auftritt. Man sieht es wenn man im Spiel einen großen Masten oder eine Antenne mittig anzeigen lässt und anschließend mit der Maus schnell von links nach rechts bewegt. Sieht man während dem Bewegen nicht nur eine Antenne sondern eine krumme Antenne oder gleich mehrere Antennen, dann tritt Tearing auf.

Tearing_(simulated)

Grundsätzlich kommt Tearing immer dann vor, wenn Grafikkarte und Monitor nicht synchronisiert arbeiten. Meist in Kombination mit einem 60Hz Monitor, die auch heute noch Standard sind und nur Enthusiasten einen 144Hz Monitor mit gutem Display besitzen. Letztere kosten mit IPS Display 700€ aufwärts. Für mich zu viel des Guten also musste eine andere Lösung gefunden werden.

Im Endeffekt gibt es Stand heute folgende Möglichkeiten Tearing nahezu komplett zu verhindern:

  1. Man kauft ein 144Hz Display und aktiviert (G-Sync|V-Sync|Freesync)
  2. Man kauft ein Display mit Freesync (AMD) oder GSync (Nvidia) Support
  3. Man aktiviert VSync das überall kostenlos funktioniert

Bei Variante 3. gibt es allerdings ein paar Nachteile. Das Größte davon sind die s.g. Input-Lags die hier erklärt werden.

Durch clevere Steuerung der Max FPS lässt sich aber auch dieses Phänomen eingrenzen.

Dazu habe ich im Battlefield 4 Ordner eine user.cfg Datei abgelegt und folgende Werte eingetragen:

GameTime.MaxVariableFPS 59.6
RenderDevice.VSyncEnable 1

Man sollte danach das Spiel starten und in den Grafik Optionen prüfen ob vertikale Synchronisation (VSync) auch wirklich aktiviert ist.
Ansonsten über das Menü aktivieren.

Das Ergebnis bei mir: Tearing wird verhindert und das Input-Lag ist klein.

Als netter Nebeneffekt lässt man die Grafikkarte auch nicht unnötig auf 100% laufen. Liefert eine Grafikkarte mehr als 60 FPS dann setzt sich auf einem 60Hz Display ein Einzelbild auf dem Monitor aus mehreren Bildern der Grafikkarte zusammen => Tearing entsteht.
Das spart Strom und die Lüfter drehen auch nicht sonderlich hoch.

Monitor Wishlist 2017: >=144Hz, 2160p oder 1440p, Displayport 1.3, IPS Panel, GSync oder Freesync Support

Bash ~/.bashrc, /etc/profile

31. Mai 2016 Keine Kommentare

Die folgende Grafik verdeutlicht welche Bash Konfigurationsdateien verwendet und geladen werden.
Grundsätzlich ist das davon abhängig ob es sich von um eine interactive shell handelt, welche Paramter verwendet werden und ob es eine login shell ist.

bash_config_files

Source

NTP Stratum 2 installieren und konfigurieren (ntp.conf)

15. Mai 2016 Keine Kommentare

Da immer mehr Geräte an das Internet angeschlossen sind, steigt die Anzahl der NTP Queries kontinuierlich an. Manche Hersteller wie Microsoft oder Apple stellen den Usern eigene Zeitserver zu Verfügung, aber viele andere Entwickler, Hersteller oder Provider nutzen frei zugängliche NTP Pools um die Uhrzeit synchronisieren zu lassen. Dazu zählen Linux Distributionen, DSL Router, Kabel Router und viele andere Betriebssysteme oder Appliances.

Der am häufigsten verwendete Pool ist pool.ntp.org an welchem auch mein Server angeschlossen ist. Die Last wird unter tausenden von angeschlossen NTP Servern verteilt, aber dennoch steigt der Bedarf an weiteren NTP Servern da immer mehr Anfragen zu bedienen sind.

Während die Zeitsynchronisierung und das NTP Protokoll eine Wissenschaft für sich sind, ist es denkbar einfach einen NTP Stratum 2 Server für die Nutzung im Pool zu installieren. Während Stratum 1 Server direkt an einen sehr genauen Zeitgeber angeschlossen sein müssen, reicht es für Stratum 2 aus die Uhrzeit über das Internet zu synchronisieren und den Usern zur Verfügung zu stellen.

Unter Debian / CentOS / RedHat installiert mein dazu einfach das ntp Paket und konfiguriert den NTP Daemon. Ich verwende sieben Stratum 1 Server als Zeitgeber. Das ist zum einen länderübergreifend redundant und zum anderen auch ziemlich genau. NTP sucht sich dann selbst die zu verwendenden Stratum 1 Zeitgeber heraus. Den Status kann man jederzeit mit „ntpq -p“ prüfen und sehen wie sich der eigene Server verhält.

Diese Konfiguration ist nur sinnvoll wenn man selbst die Uhrzeit weitergeben möchte. Also Mitglied eines Pools wird oder anderweitig (sehr) viele Clients bedient. Als Endnutzer oder für einen NTP Server im eigenen Netzwerk, reicht es völlig aus selbst einen NTP Pool als Client zu verwenden. So wie das in der default Konfiguration des NTP Pakets der Fall ist. Die Stratum 1 Server müssen hierfür nicht belastet werden. Möchte man aber selbst dem Pool beitreten, sollte der Server ein Stratum 2 oder Stratum 1 Server sein, allerdings ist das (zumindest bei pool.ntp.org) keine explizit definierte Voraussetzung.

Weitere Informationen zu pool.ntp.org und Statistiken meines NTP Servers gibt es hier.

Stratum 2 ntp.conf Settings Example:

/etc/ntp.conf

driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict default kod limited notrap nomodify nopeer noquery
restrict -6 default kod limited notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
 
# Stratum 1 DE
server ptbtime1.ptb.de iburst
server ntps1-0.cs.tu-berlin.de iburst
server ntp0.fau.de iburst
 
# Stratum 1 AT
server time.metrologie.at iburst
 
# Stratum 1 CH
server ntp.metas.ch iburst
 
# Stratum 1 NL
server ntp0.nl.net iburst
 
# Stratum 1 FR
server ntp-p1.obspm.fr iburst