AMD will Profiling von Anwendungen vereinfachen
AMD unterbreitet einen Vorschlag, wie in Zukunft eine mäßige Erweiterung in den Prozessoren und Betriebssystemen das Performance-Monitoring ganz erheblich verbessern kann.
Mit einer Erweiterung des Konzepts des Performance Monitoring sollen es Anwendungen beziehungsweise deren Programmierer in Zukunft viel leichter haben, einzelne Programmteile zu profilieren, um etwa zur Laufzeit Optimierungen vornehmen zu können. Mit dem jetzt den Entwicklern vorgestellten Lightweight Profiling (LWP) Proposal (PDF-Datei) schlägt AMD einen einfachen Weg vor, bei dem sowohl der Prozessor als auch das Betriebssystem mitspielen müssen. Bislang sichern die üblichen Betriebssysteme bei einem Kontext-Wechsel weder die Konfiguration noch die Zählerinhalte der Performance-Register. Sollten zwei Prozesse gleichzeitig das Performance-Monitoring nutzen, gibts Kuddelmuddel – es darf also nur einen geben! Und der könnte auch andere Prozesse per Monitoring belauschen – auch das ist nicht immer erwünscht. Außerdem ist der Umgang mit dem Performance-Monitoring bei mehreren Kernen recht komplex, all das kann man besser machen. Die alten Performance-Monitoring-Register sollen aber aus Kompatibilitätsgründen erhalten bleiben.
Das Lightweight Profiling erfordert nur zwei neue User-Mode-Befehle: LLWPCB und SLWPCB. Mit ihnen werden Pointer auf LWP Control Blocks geladen oder abgespeichert. Jeder Thread kann dabei seine eigenen Kontrollblöcke erzeugen und verwalten, die dann bei einem Kontext-Wechsel mit zu retten und restaurieren sind. AMD schlägt dafür zwei weitere Befehle EXSAVE und EXRSTOR vor, die das Betriebssystem nutzen könnte. Alternativ könnte diesen Job auch ein Kernel-Treiber übernehmen, denn wie bei den Performance-Registern auch, stehen alle Inhalte über Maschinenspezifische Register (MSR) im Zugriff – dumm nur, dass Microsoft bei Windows aber keinen offiziellen Hook vorgesehen hat, in den man sich bei einem Kontext-Wechsel einhängen könnte.
Das Konzept umfasst ferner Interrupts, die ausgelöst werden, wenn der Ereigniszähler für ein beobachtetes Event einen vorgegebenen Wert überschreitet. Dazu ist dann ebenfalls etwas Mithilfe eines Kernel-Treibers nötig. Typische Performancezähler für LWP sind – wie beim herkömmlichen Performance Monitoring auch – die insgesamt ausgeführten Befehle, die Cachemisses von DCache oder Icache, die Zahl der Sprünge, der FPU- und SSE-Befehle und so weiter. Darüber hinaus enthält das LWP Proposal speziell zur Latenzmessung einige interessante Erweiterungen.
LWP ist eine längst überfällige Initiative, das nahezu noch auf DOS-ähnlichem Niveau dümpelnde Performance-Monitoring an aktuelle Multithreading- und Multicore-Umgebungen anzupassen und dabei auch die Virtualisierung mit zu berücksichtigen. Der AMD-Vorschlag macht insgesamt einen guten und ausgereiften Eindruck und er ist keineswegs auf AMD-Prozessoren beschränkt. Vielleicht rafft sich ja Intel auf und schließt sich an – das würde die Sache für alle erheblich vereinfachen. (as)