Bootanalyse mit Xperf (ein Beispiel)

Dieses Mal würde ich ihnen gerne ein Tool zur Analyse des Bootvorgangs zeigen. Mit Xperf können sie den Bootvorgang aufzeichnen und auswerten. Dieses Tool ist Bestandteil des Windows SDKs das sie sich kostenlos herunterladen können.

Nehmen wir einmal an, dass sie einen Windows Client haben, der eine Bootzeit von 15 Minuten hat. Sie beobachten (in diesem Beispiel), dass der Client beim Booten plötzlich nicht mehr auf die Platte zugreift. Jetzt stellt sich die Frage, was macht der Client in dieser Zeit?

Damit Xperf eine Aufzeichnung des Bootvorgangs macht, muss ein Event Tracing erstellt werden. Dieses Event Tracing protokolliert dann, was sich wann genau beim Bootvorgang abspielt.

Starten sie das Event Tracing aus der Eingabeaufforderung (in meinen Fall liegt Xperf auf C:\Xperf).

Mit dem Parameter "-trace boot" erstellt Xperf beim nächsten Boot die Aufzeichnung. Weitere Parameter für xbootmgr.exe findet man hier.
Außerdem wird der Client in einen Reboot gezwungen.

Nach diesem Reboot und der Anmeldung, werden weitere 120 Sekunden lang alle Aktivitäten aufgezeichnet. In dieser Zeit werden z. B. noch Dienste oder Autostart Anwendungen nachgezogen. Auch diese Aktivitäten sind für eine Bootanalyse von Interesse.
In dieser Zeit wird eine Info mit einen Countdown dargestellt. (Bitte brechen sie die Aufzeichnung nicht ab.)

Nachdem die Aufzeichnung abgeschlossen ist, sollten sie das Event Tracing wieder deaktivieren. Dieses erreichen sie mit dem folgenden Befehl:

Jetzt geht es an die Auswertung. Prüfen sie nun, ob im Verzeichnis von Xpref (in meinen Beispiel C:\Xperf) eine Datei Namens boot_BASE+CSWITCH_1.etl zu finden ist. In dieser Datei ist der komplette Bootvorgang dokumentiert.

Zum Auswerten selber müssen sie die Anwendung xperfview.exe starten und die ETL Datei reinladen. Diese befinden sich ebenfalls in diesem Verzeichnis.

Daraufhin öffnet sich der Windows Performance Analyzer, der Ihnen die einzelnen CPU’s, I/O, ausliest:

In der oberen Hälfte sieht man die CPU Last und in der unteren Hälfte, die Festplatten Last (beides in Prozent).
Bei einem Bootvorgang ist die Festplatte normalerweise der Flaschenhals und ist meistens nahe der 100% Last. In diesem Beispielsfall ist Festplatte nur soweit auffällig, da sie sich die meiste Zeit langweilt.
Die CPU ist jedoch unter Last und arbeitet wohl sehr intensiv.

Um festzustellen welche Applikation die CPU die Last verursacht, markieren sie im oberen Bereich die Stelle, wo die CPU hohe Last hat und die Festplatte nichts lädt. Anschließend drücken sie bitte die rechte Maustaste auf die Markierung und wählen den Punkt „Summary Table“ aus.

 Nun fällt eine svchost.exe Datei auf, die auf den ersten Platz der CPU-Last-Anwendungen steht. Mit dem Plus Symbol vor dem Prozess können sie die Anwendungen aufklappen, um die benützen Module und deren CPU Last sehen.

Nun kommt Licht ins Dunkel. Die Datei DNSRSLVR.DLL ist die auffällige Komponente. Nun stellt sich nur noch die Frage, was diese DLL macht. Hierzu habe ich im Internet nach der Beschreibung zu dieser DLL gesucht.

Bei Microsoft findet man dann die Information, dass diese DLL zum DNS Client Service (dnscache) gehört. In der Beschreibung steht außerdem, dass diese DLL auch für die Abarbeitung der Hosts Datei (C:\Windows\System32\drivers\etc\hosts) zuständig ist.
Der Kunde in diesem Beispiel, nutzte die Hosts Datei um nicht ganz jugendfreie Webseiten auf 127.0.0.1 umzuleiten. Die Hosts Datei ist mehr als 10 Mbytes groß. Nachdem wir die Hosts Datei in den Auslieferzustand zurückgesetzt haben, startete der Client in nur 2 Minuten.

Natürlich ist das nur ein Beispiel (jedoch wirklich so bei einen Kunden geschehen). Sie können natürlich mit Xperf auch andere Bootvorgänge auswerten.
Ich wünsche ihnen viel Erfolg und Spaß bei den Auswertungen ihrer Xperf Logs.