2015-09-13 4 views
2

Je sais que les processeurs comptent tous les échecs de cache L1/2/3, et cette information est en principe accessible. Par exemple. il y a une visionneuse de performance d'Intel. Je ne trouve tout simplement pas d'exemple en C#. Ces données sont-elles accessibles à partir de .NET?C# Récupère le cache de performance du compteur CPU

+0

Par visionneuse de performances, vous entendez Intel Performance Counter Monitor? – Evk

+0

Il n'y a pas de compteur de performance intégré pour cela. Ils sont trop difficiles à atteindre, seul le code 0 peut les lire. Et ils dépendent fortement de la marque et du modèle du processeur. Bien sûr, une raison d'être pour le logiciel Intel. Ne l'exécutez pas sur un processeur AMD :) –

Répondre

1

Eh bien, vous pouvez le faire (sur les fenêtres au moins) en utilisant Intel Perfomance Counter Monitor. En plus des autres outils qui sont livrés avec, il contient le service PCM-Service - Windows qui ajoute des compteurs de performances PCM Windows. Une fois que vous avez téléchargé, compilé et installé ce service, vous pouvez accéder à la mémoire cache L2 misses (par exemple), aussi facile que cela:

var pc = new PerformanceCounter("PCM Core Counters", "L2 Cache Misses", "total_"); // instead of total_ you can use number of core 
var value = pc.RawValue; // or pc.NextValue() and so on. 

Intel PCM ajoute des compteurs beaucoup plus intéressants que manque juste cache bien sûr, tous sont accessibles depuis .NET.

+0

Est-il possible d'appeler une librairie native via P/Invoke? Je ne veux pas de dépendances système telles que le service Windows, mais je suis d'accord avec une dépendance xcopy-able native. –

+0

La bibliothèque est écrite en C++ et fournie avec toutes les sources. Donc, je suppose qu'il devrait être possible d'invoquer p-là, bien que personnellement, je n'ai pas enquêté sur les détails. Au lien ci-dessus vous pouvez voir un exemple de la façon dont ils suggèrent d'utiliser leur bibliothèque à partir du code (code C++), donc vous pouvez essayer de créer une bibliothèque C++ \ CLI pour faire la tâche. – Evk