Wie viel SMT (Hyperthreading) bringt hängt nicht vom Betriebssystem ab, stattdessen vom Workload. Alle gängigen Betriebssysteme versuchen erst einmal die physischen Kerne zu belegen. SMT kommt also erst ins Spiel wenn mehr Prozesse nenneswert CPU-Leistung einfordern, als die CPU physische Kerne hat. Dann verteilt sich die Leistung des Kerns auf beide Hardware-Threads. Angenommen ein Kern ist mit einem Prozess zu 100% ausgelastet und der Scheduler legt einen weiteren Prozess, der den Kern ebenfalls zu 100% auslastet, auf den zweiten Hardware-Thread. Nun teilen sich beide Prozesse die zur Verfügung stehende Leistung, bekommen als jeder 50%. In diesem Szenario ist also nichts gewonnen.
Der Trick liegt nun darin, dass ein CPU-Kern niemals zu 100% ausgelastet ist. Der meiste real existierende Code bewegt sich zu einem Zeitpunkt lediglich auf einer Funktionseinheit. Er nutzt z.B. hauptsächlich die ALU, die FPU wird aber kaum genutzt. Auch innerhalb einer Funktionseinheit kommt es immer wieder zu Leerläufen, beispielsweise da Daten aus dem Cache oder sogar RAM nachgeladen werden müssen oder durch Abhängigkeiten zwischen einzelnen Instruktionen. SMT erlaubt es diese sonst brach liegenden Ressourcen zu nutzen. Nutzen beide Prozesse die gleiche Funktionseinheit ist der Gewinn gering, beide Prozesse bringen zusammen vielleicht 10% oder wenn es hoch kommt 20% Mehrleistung gegenüber nur einem Prozess. Wenn sie aber unterschiedliche Funktionseinheiten nutzen, kann man Bereiche von 40% bis sogar 60% Mehrleistung bringen.
Ein weiterer Faktor ist die Mikroarchitektur. Meiner eigenen, vielleicht nicht unbedingt wissenschaftlichen Erfahrung nach bringt SMT bei Skylake unabhängig des Workload deutlich mehr als noch bei Sandy Bridge. AMDs Zen Architektur ist diversen Berichten zu folge noch etwas breiter angelegt, wodurch SMT überdurchschnittlich profitiert. Das kann zu bis zu 80% Mehrleistung führen.