Warum beschleunigt die Aktivierung von Hyper-V den Prozessstart von MSYS2?

658
Mehrdad

Wenn ich diese Schleife in der Bash-Shell von MSYS2 starte

function test() { bcdedit | grep hypervisorlaunchtype printf "Press ENTER to begin..." 1>&2 read # warm-up for ((i=0; i<"$1"; i++)); do $(:); done  # actual iterations local tstart="$(date "+%s%3N")" iterations=0 local i for ((i=2; i<"$1"; i++)); do $(:); done local tend="$(date "+%s%3N")" # 2 extra spawns here printf "%s ms/spawn" $((("$tend" - "$tstart") / "$i")) 1>&2 read } test 300 

Ich bekomme ungefähr 23 ms / Spawn, wenn es hypervisorlaunchtypeist off, aber um 4 ms / Spawn, wenn es ist auto.

Hier sind GIFs, die die beiden mit gleichen Iterationen vergleichen: Hyper-V aus vs. Hyper-V- Auto .
(Beachten Sie, dass die CPU - Zeit Statistiken werden nicht bei Null bleiben wegen gebrochen -. Sie sind auf Null zu bleiben, weil sie tatsächlich zu klein sind, wenn Sie das Programm laufen lange genug verlassen, sie wird zunehmen.)

Wodurch wird diese Diskrepanz verursacht?

3
Seltsam, die meisten Leute berichten genau den gegenteiligen Effekt. Durch die Aktivierung von Hyper-V in Windows 8+ wird es tatsächlich zum Betriebssystem, während Windows als virtuelle Maschine ausgeführt wird, jedoch mit speziellen Hardwarezugriffsberechtigungen, was die Leistung beeinträchtigen kann. Ich könnte vermuten, dass ein Grund für diesen Unterschied möglicherweise darin besteht, dass Hyper-V Speicher anders als Windows vorab reserviert, der jedoch besser in Ihren Fall passt. Könnten Sie bitte einige Details zu Ihrer Umgebung und Messmethode angeben? harrymc vor 7 Jahren 0
@ harrymc: Ja, es weckt auch meine Gedanken. Die Messmethode ist buchstäblich der Code selbst - das Timing selbst (über den Befehl "Datum"). Führen Sie ihn einfach aus. Ich bemerkte es zuerst, weil ich bemerkte, dass MSYS2 mit aktiviertem Hyper-V plötzlich schneller startete. (!) Nicht sicher, was Sie von meiner "Umgebung" konkret sagen ... es ist Windows 8.1 x64 mit den neuesten Updates, wenn Sie das meinen. Ich habe dies auf zwei verschiedenen Laptops reproduziert, daher denke ich nicht, dass es sehr spezifisch für meine Laptops ist. Haben Sie Windows 8.1 / können Sie es reproduzieren? Mehrdad vor 7 Jahren 0
Ich habe Windows 10, das ein weiterentwickeltes Hyper-V enthält. Ich meinte die Art und Weise, wie Sie Software ausführen. Wenn ich es richtig verstehe, führen Sie eine Bash-Schleife aus (zeigen Sie uns das Skript besser). Ich vermute, Sie messen die Startzeiten oder Systemaufrufe wirklich. Versuchen Sie, den Ressourcenmonitor auszuführen, um zu sehen, wo der Unterschied ist. Sie können auch im Task-Manager die Spalten Seitenfehler, E / A-Lesevorgänge, E / A andere, Ziehpunkte und Threads anzeigen - die Unterschiede im Ausführungsprofil können hilfreich sein. Auch wenn keine Unterschiede festgestellt werden, ist dies eine nützliche Tatsache. harrymc vor 7 Jahren 0
@ harrymc: Dieser Code * ist * das Skript - Ich kopiere es einfach in die Shell und schaue mir die Ausgabe an. Ich werde versuchen zu sehen, ob ich diese Informationen sammeln kann, aber es könnte etwas dauern, bevor ich dazu komme. Es wäre hilfreich, wenn Sie versuchen könnten, MSYS2 an Ihrem Ende auszuführen und zu sehen, ob Sie dasselbe Verhalten unter Win10 feststellen. Mehrdad vor 7 Jahren 0
@harrymc: Eigentlich * deren * Seitenfehler und I / O etc. fragst du? Der übergeordnete Prozess, der die Kinder startet, oder die Kinder selbst? Ich würde erwarten, dass es für die Kinder relevanter ist, aber ich bin mir nicht sicher, wie ich sie messen soll, da sie offensichtlich nach kurzer Zeit gekündigt haben und ich sie nicht kurz vor dem Ende aufhalten kann. Mehrdad vor 7 Jahren 0
Ändern Sie das Skript so, dass es in einer langen Schleife ausgeführt wird, wobei die ms-Differenz akkumuliert wird, sodass Sie Zeit haben, das Verhalten zu beobachten. Der Ressourcenmonitor zeigt das allgemeine Systemverhalten. Ich kenne MSYS2 nicht genug, um zu sagen, ob "Datum" ein Kind oder ein eingebauter ist. harrymc vor 7 Jahren 0
@ harrymc: Oh, der ganze Punkt hier ist, dass `date 'ein Kind ist, und so ist auch die Subshell, die es nennt (daher die Division durch 2, die Sie in der Berechnung sehen). Deshalb sage ich, dass ich das Verhalten von Kindern nicht messen kann - beide Prozesse beginnen und enden schnell. Ich werde versuchen zu sehen, ob die Eltern etwas bringen, aber ich erwarte es nicht. Mehrdad vor 7 Jahren 0
Der Ressourcenmonitor wird weiterhin nützlich sein. Der kostenlose [Process Hacker] (http://processhacker.sourceforge.net/) kann dies tun - aktivieren Sie Optionen-> Erweitert-> CPU- (und andere) Verwendung von untergeordneten Objekten in ausgeblendeten Prozessen einschließen und dann das übergeordnete Element reduzieren ([weitere Informationen und Screenshot] (https://superuser.com/a/1153795/8672)). harrymc vor 7 Jahren 0
@harrymc: Okay, wenn ich das Skript für ~ 10 Sekunden laufen lasse, sehe ich einen signifikanten Unterschied in der Anzahl der E / A- und Seitenfehler sowie der Zeit, die im übergeordneten Bash-Prozess im Benutzer- oder Kernel-Modus verbracht wurde. Siehe [Hyper-V aus] (https://i.stack.imgur.com/WirSR.png) vs. [Hyper-V auto] (https://i.stack.imgur.com/JZKSp.png). Nicht sicher, was ich davon halten soll. Mehrdad vor 7 Jahren 0
Sind Sie sicher, dass die Arbeitszeit für beide ungefähr gleich war? Die "Hyper-V-Auto-Nummern" sind zwei bis viermal so groß wie "Hyper-V aus". Sie können das Skript möglicherweise so modifizieren, dass es nach 10 Sekunden angehalten wird, anstatt sich auf Ihre Uhr zu verlassen und Screenshots der Statistiken vor und nach dem Ausführen der Schleife zu erstellen. Und was ist dein Computer? harrymc vor 7 Jahren 0
@ harrymc: Ja, ich bin mir sicher, ich habe es mehrmals gemacht. Sie sind konsequent so. Es scheint, dass die CPU mit hyper-v einfach mehr Arbeit verrichtet. Der Computer ist ein ThinkPad. Mehrdad vor 7 Jahren 0
Mehr Arbeit sollte langsamer sein, nicht schneller. So unwahrscheinlich es auch klingt, es sieht so aus, als würde der Kernel in Hyper-V Ihre Hardware viel besser einsetzen als in Windows 8.1 (besser [HAL] (https://en.wikipedia.org/wiki/Hardware_abstraction)?). Scheint Ihr Computer im Allgemeinen mit Hyper-V bissiger? harrymc vor 7 Jahren 0
@ harrymc: Nicht wirklich, überhaupt nicht, sonst hätte ich es schon vor Jahren bemerkt. Ich merke nur den Unterschied in MSYS2-Skripten. Es könnte sein, dass der Kernel die Hardware "besser" verwendet, aber ich bezweifle, dass es aufgrund der Diskrepanz in den Zyklen wahrscheinlicher ist, dass mehr Arbeit zu erledigen ist, als dass die gleiche Arbeit schneller erledigt wird. Ich vermute, dass es irgendwo eine künstliche Pause gibt, die im Hyper-V-fähigen System nicht passiert, aber ich habe keine Ahnung, was es sein könnte. Mehrdad vor 7 Jahren 0
Dadurch besteht die Möglichkeit, dass das Problem bei den MSYS2-Bibliotheken liegt. Irgendwie missverstehen sie die Hardware und machen einige Operationen auf langsame Weise. Unter Hyper-V führt die Hardwareidentifikation zu besseren Ergebnissen. harrymc vor 7 Jahren 0
@ harrymc: Das scheint unwahrscheinlich möglich zu sein. Ich habe das schon gefragt, aber Sie haben nichts gesagt. Würden Sie MSYS2 installieren und versuchen, es auf Ihrem Computer zu reproduzieren? Es verschmutzt nichts; Soweit ich weiß, befindet sich alles unterhalb des Hauptordners \ MSYS2. Es scheint, dass es viel einfacher sein könnte, Ihnen zu helfen, zu verstehen, was passiert, als nur im Dunkeln Vermutungen anzustellen. Mehrdad vor 7 Jahren 0
@ McDonald's: Ich habe Hyper-V bereits deinstalliert / neu installiert. habe keinen Unterschied gesehen Wie ich schon sagte, das passiert bei verschiedenen Laptops-Modellen - ich glaube nicht, dass es sich um ein BIOS-Problem handelt (und unabhängig davon ist mindestens eines der beiden auf dem neuesten Stand). Und nein, ich verwende keine VM-Software. Mehrdad vor 7 Jahren 0
@ McDonald's: Ich habe GIFs in die Fragen eingefügt, schaut mal rein. Das ist hoffentlich so überzeugend, dass ich nicht über meinen Laptop mailen muss. :-) Mehrdad vor 7 Jahren 0
@ harrymc: Ich habe GIFs in die Fragen eingefügt und das Skript so bearbeitet, dass es nach einer bestimmten Anzahl von Iterationen angehalten wird. Mit Hyper-V ist es lächerlich schneller. Mehrdad vor 7 Jahren 0
Sie haben keine Antworten mehr. Ich bin nie auf ein solches Verhalten gestoßen, und ich brauche deine kleine Kopfprämie nicht. harrymc vor 7 Jahren 0

0 Antworten auf die Frage