2010-07-01 11 views
11

Ich habe eine Anwendung, die wenig CPU-Rechenarbeit, aber vor allem Speicherzugriffe (Zuweisung von Objekten und Verschieben von ihnen, gibt es einige numerische oder arithmetische Code).Wie überprüft man, ob App cpu-gebunden oder speichergebunden ist?

Wie kann ich den Anteil der Zeit messen, die ich in Speicherzugriffswartezeiten (aufgrund von Cache-Misses) verbringe, während die CPU inaktiv ist?

Ich sollte beachten, dass die App auf einem Hyper-V-Gast ausgeführt wird; Ich bin mir nicht sicher, ob es irgendwelche Schwierigkeiten geben wird, aber es könnte.

Antwort

2

Sie könnten immer profile Ihre Anwendung zu sehen, wo es die meiste Zeit verbringt.

Sie können auf diese Weise viel über das Verhalten und die Datenzugriffsmuster Ihrer Anwendung erfahren.

Wenn Sie Linux verwenden, haben Sie eine große Auswahl an verfügbaren Tools für die Profilerstellung, wie zB:

EDIT:

Für eine genauere Messung der Prozessorleistung sowie Speicherzugriffe können Sie auch die AMD CodeAnalyst Performance Analyzer ausprobieren. Here sind Anweisungen, wie man es mit Intel-Prozessoren benutzt, obwohl ich es selbst nicht versucht habe.

Ein anderes Werkzeug, das Sie vielleicht auch nützlich finden, ist die Intel Performance Tuning Utility.

+0

Sie sehen, ich habe bereits die Anwendung profiliert. Es hat ein ziemlich flaches Leistungsprofil mit viel Zeit, die verschiedene Speicherzugriffsfunktionen wie memset, memmove usw. benötigen (eigentlich ist dies eine .NET-Anwendung, die unter Windows läuft, und diese Funktionen werden von der CLR während der Objektkonstruktion aufgerufen). Ich würde gerne wissen, ob ihre Zeit von CPU oder vom Speicherbus dominiert wird. – jkff

+1

Sie könnten ** AMD CodeAnalyst Performance Analyzer ** ausprobieren: http://developer.amd.com/cpu/codeanalyst/Pages/default.aspx oder http://www.virtualdub.org/blog/pivot/entry.php ? id = 288 –

2

Sofern Sie keine Latenz in das System eingebaut haben, führen Sie die Anwendung für einige Zeit auf einem dedizierten Rechner aus und überprüfen Sie die CPU-Zähler. Wenn die App 100% des CPU-Kerns verwendet, auf den sie zugreifen kann, ist sie CPU-gebunden. Ansonsten verbringt es Zeit mit anderen Dingen wie Speicherzuweisungen und IOs.

+2

Sind Speicherzugriffslatenzien nicht in Leistungsindikatoren für die CPU-Auslastung enthalten? – jkff

+1

Ich glaube nicht, dass sie speziell * ausgeschlossen * sind, aber diese Art von Granularität ist schwer festzumachen. Ihr Prozess erhält die CPU für einen festgelegten Zeitraum, aber das Warten auf Cache-Ladevorgänge zählt immer noch als CPU-Auslastung, da Ihr Prozess nicht entfernt wurde. Ich weiß nicht, dass es wirklich möglich ist, harte Zahlen für die Speicherwartezeit zu bekommen, ohne den Bus zu schnüffeln. – TMN

+1

Mit 'Callgrind' können Sie die Zähler für' L1' und 'L2' Cache-Misses bekommen. Aggregieren Sie diese Daten mit Profilinformationen, und Sie erhalten eine Schätzung, wie gut die Datenzugriffsmuster für Ihre Anwendung funktionieren. –

Verwandte Themen