Ich vereinfache leicht, aber das Muster sollte so klar werden:
Das Vblank oder die
Austastlücke ist ein Relikt aus Zeiten von Röhrenmonitoren. Dort hat man mit der Elektronenkanone Zeile für Zeile und da Punkt für Punkt von oben nach unten auf die richtigen Phosphorpartikel geschossen und die so zum leuchten gebracht. Kam man ganz dabei unten an musste die Elektronenkanone danach wieder verdunkelt zur ersten Zeile gerichtet werden, das braucht etwas Zeit. Die Zeit zwischen Beschiessen des letzten Bildpunkts eines Bilds bis zum Erreichen des ersten Bildpunkts des nächsten Bilds ist das vblank. Real werden da auch noch ein paar Leerzeilen nach dem Ende gesendet, so funktionierte zum Beispiel Videotext anner Glotze.
Dieses Vblank gibts bis heute in der Bildübertragung.
Die meisten Grafikkarten, herstellerübergreifend, können Teile ihrer Taktdomains nur im Vblank ändern, sonst sind Artefakte da oder andere Probleme. Ist die zur Verfügung stehende Zeit dort zu kurz werden irgendwelche Takte nicht gesenkt. Hoher Takt frisst Energie, sorgt aber für eine gesichert immer brauchbare Bilddarstellung.
Wie lang in Zeit das Vblank ist, ist von mehreren Faktoren abhängig. Zunächst hat jeder moderne Monitor einen Datenkanal zur Grafikkarte und einen kleinen Speicher für Timingwerte, auch
EDID genannt. Diese Informationen liest die Grafikkarte und versteht so wie sie Bildsignale timen muss, damit ein Bild herauskommt.
Ein kurzes Vblank ist nun eigentlich keine schlechte Sache, weil es Totzeiten kürzt. Es killt aber eben auch den Mechanismus zum Stromsparen. Alles hat seinen Preis.
Man hat nun folgendes Problem: Wie lang das Vblank ist wird im Kern als Anzahl von Zeilen aus dem Monitor gelesen. Je mehr Zeilen es gibt und je höher die Bildwiederholfrequenz ist desto weniger Zeit verbringt man in einer gegebenen Menge blanker Zeilen am Bildende. Man braucht aber eine bestimmte absolute Menge Zeit um den Takt ändern zu können. Das heisst nicht nur Auflösung und Bildwiederholfrequenz bestimmen wie lange ein Vblank dauert, sondern auch wieviele blinde Zeilen der Monitor für sich haben will.
Man kann also entweder die Auflösung senken, die Bildwiederholfrequenz senken oder die Anzahl der Leerzeilen erhöhen um den Vblank länger dauern zu lassen. Ein Kombination von all den Sachen führt auch zum Ziel. Ziel ist aber immer das Vblank ausreichend lang zu machen.
Es gibt Monitorhersteller, mir fällt da immer besonders LG auf, die ziemlich durch die Bank wirklich vergleichsweise kurze Vblanks in ihren EDIDs definieren. Das bedeutet dann übersetzt, dass maximales Stromsparen mit LG Monitoren besonders schlechte Chancen hat zu funktionieren.
Nervig sind auch Multimonitorkonfigurationen, weil da teilweise Vblanks geräteübergreifend in einen Einklang gebracht werden müssen damit der Takt geändert werden kann. Haben die Monitore dann unterschiedliche Eigenschaften wirds schwierig.
Das Problem ist damit wirklich komplexer als "mal eben" nen Grafiktreiber zu fixen und auf einfache allgemein bekannte Muster zu schiessen, das wird dem nicht gerecht. Klar muss das Muster dahinter sein, und wo die Stellschrauben sind: Auflösung, Bildwiederholrate, Timingparameter des Monitors oder der Monitore.
Ich fahre privat einen 4K/60Hz und einen FHD/60Hz Monitor. Mein 4K Monitor ist ein LG, mit dem gewinne ich mit Stock Konfiguration und ohne den zweiten Monitor schon keinen Blumentopf. Ich hab das Monitortiming dort händisch angepasst und einfach mehr Leerzeilen im Vblank eingefügt, bis zu einem gewissen Grad geht das immer gut. Man verlässt dabei die Spezifikation des Monitorherstellers, aber wenn ich meiner 4K Glotze meinen Modus aufzwinge macht die weiter ein sauberes Bild. Der zweite FHD Monitor ist total entspannt, der stört den Ablauf nicht, der hat da gleich genug Luft.
Grob dasselbe Spiel hab ich schon bei X anderen Kisten durchgezogen und oft gewonnen.
Und woher ich den ganzen Quatsch weiss? Ein Grundverständnis kommt aus Linuxfummeleien um die Jahrtausendwende. Damals musste man für X11 Modelines zusammenbasteln um irgendwas buntes da raus zu bekommen. Eine Modeline ist nichts anderes als die Beschreibung einer Auflösung und aller Monitortimingparameter dazu, danach weiss man was die bedeuten, inzwischen ist das wie in Windows seit vielen Jahren alles automatisch, aber ich kenns noch. Dazu hab ich den AMD Treiberentwicklern für Linux fleissig zugelesen, die das alles öfter mal erklärt haben und einige Commits im Mesa und Kernel Git durchgestöbert.