Partager via


Obtention de données de performance statistiques

Dans WMI, vous pouvez définir des données de performance statistiques basées sur des données dans des classes de performance formatées dérivées de Win32_PerfFormattedData. Les statistiques disponibles sont la moyenne, le minimum, le maximum, l’intervalle et la variance, comme défini dans les types de compteurs statistiques.

La liste suivante inclut les types de compteurs statistiques spéciaux :

Les exemples suivants montrent comment :

  • Créer un fichier MOF qui définit une classe de données calculées.
  • Écrire un script qui crée une instance de la classe et actualise périodiquement les données de l’instance avec les valeurs statistiques recalculées.

Fichier MOF

L’exemple de code MOF suivant crée une nouvelle classe de données calculées nommée Win32_PerfFormattedData_AvailableMBytes. Cette classe contient des données de la propriété AvailableMBytes de la classe brute Win32_PerfRawData_PerfOS_Memory. La classe Win32_PerfFormattedData_AvailableBytes définit les propriétés Average, Min, Max, Range, et Variance.

Le fichier MOF utilise les qualificatifs de propriété pour les classes de compteurs de performance formatées pour définir la source de données de la propriété et la formule de calcul.

  • La propriété Average obtient des données brutes de la propriété Win32_PerfRawData_PerfOS_Memory.AvailableMBytes.
  • Le qualificatif Counter pour la propriété Average spécifie la source de données brute.
  • Le qualificatif CookingType spécifie la formule COOKER_MIN pour le calcul des données.
  • Le qualificatif SampleWindow spécifie combien d’échantillons prendre avant de réaliser le calcul.
// Store the new Win32_PerfFormattedData_MemoryStatistics
//     class in the Root\Cimv2 namespace
#pragma autorecover
#pragma namespace("\\\\.\\Root\\CimV2")

qualifier vendor:ToInstance;
qualifier guid:ToInstance;
qualifier displayname:ToInstance;
qualifier perfindex:ToInstance;
qualifier helpindex:ToInstance;
qualifier perfdetail:ToInstance;
qualifier countertype:ToInstance;
qualifier perfdefault:ToInstance;
qualifier defaultscale:ToInstance;

qualifier dynamic:ToInstance;
qualifier hiperf:ToInstance;
qualifier AutoCook:ToInstance;
qualifier AutoCook_RawClass:ToInstance;
qualifier CookingType:ToInstance;
qualifier Counter:ToInstance;


// Define the Win32_PerFormattedData_MemoryStatistics
//     class, derived from Win32_PerfFormattedData
[
  dynamic,
  // Name of formatted data provider: "WMIPerfInst" for Vista 
  //   and later
  provider("HiPerfCooker_v1"), 
  // Text that will identify new counter in Perfmon
  displayname("My Calculated Counter"),                            
  // A high performance class     
  Hiperf,
  // Contains calculated data 
  Cooked, 
  // Value must be 1 
  AutoCook(1), 
  // Raw performance class to get data for calculations
  AutoCook_RawClass("Win32_PerfRawData_PerfOS_Memory"),
  // Value must be 1        
  AutoCook_RawDefault(1),
  // Name of raw class property to use for timestamp in formulas 
  PerfSysTimeStamp("Timestamp_PerfTime"), 
  // Name of raw class property to use for frequency in formulas
  PerfSysTimeFreq("Frequency_PerfTime"), 
  // Name of raw class property to use for timestamp in formulas
  Perf100NSTimeStamp("Timestamp_Sys100NS"),
  // Name of raw class property to use for frequency in formulas
  Perf100NSTimeFreq("Frequency_Sys100NS"),
  // Name of raw class property to use for timestamp in formulas
  PerfObjTimeStamp("Timestamp_Object"),
  // Name of raw class property to use for frequency in formulas 
  PerfObjTimeFreq("Frequency_Object"),
  // Only one instance of class allowed in namespace
  singleton                                                   
]

class Win32_PerfFormattedData_MemoryStatistics
          : Win32_PerfFormattedData
{

// Define the properties for the class. 
// All the properties perform different
//     statistical operations on the same
//     property, AvailableMBytes, in the raw class

// Define the Average property,
//     which uses the "COOKER_AVERAGE" counter type and 
//     gets its data from the AvailableMBytes 
//     property in the raw class

    [
     CookingType("COOKER_AVERAGE"),
     Counter("AvailableMBytes"),
     SampleWindow(10)
    ]
    uint64 Average = 0;

// Define the Min property, which uses
//     the "COOKER_MIN" counter type and 
//     gets its data from the AvailableMBytes
//     property in the raw class

    [
     CookingType("COOKER_MIN"),
     Counter("AvailableMBytes"),
     SampleWindow(10)
    ]
    uint64 Min = 0;

// Define the Max property, which uses
//     the "COOKER_MAX" counter type and 
//     gets its data from the
//     AvailableMBytes property in the raw class

    [
     CookingType("COOKER_MAX"),
     Counter("AvailableMBytes"),
     SampleWindow(10)
    ]
    uint64 Max = 0;

// Define the Range property, which uses
//     the "COOKER_RANGE" counter type and 
//     gets its data from the AvailableMBytes
//     property in the raw class

    [
     CookingType("COOKER_RANGE"),
     Counter("AvailableMBytes"),
     SampleWindow(10)
    ]
    uint64 Range = 0;

// Define the Variance property, which uses
//     the "COOKER_VARIANCE" counter type and 
//     gets its data from the AvailableMBytes
//     property in the raw class

    [
     CookingType("COOKER_VARIANCE"),
     Counter("AvailableMBytes"),
     SampleWindow(10)
    ]
    uint64 Variance = 0;
};

Script

L’exemple de code de script suivant obtient des statistiques sur la mémoire disponible, en mégaoctets, en utilisant le MOF créé précédemment. Le script utilise l’objet de script SWbemRefresher pour créer un rafraîchisseur contenant une instance de la classe de statistiques que le fichier MOF crée, qui est Win32_PerfFormattedData_MemoryStatistics. Pour plus d’informations sur l’utilisation des scripts, veuillez consulter Actualisation des données WMI dans les scripts. Si vous travaillez en C++, consultez Accès aux données de performance en C++.

Remarque

SWbemRefreshableItem.Object doit être appelé après avoir obtenu l’élément de l’appel à SWbemRefresher.Add ou le script échouera. SWbemRefresher.Refresh doit être appelé avant d’entrer dans la boucle pour obtenir les valeurs de référence, ou les propriétés statistiques seront nulles (0) lors du premier passage.

 

' Connect to the Root\Cimv2 namespace
strComputer = "."
Set objService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")

' Create a refresher
Set Refresher = CreateObject("WbemScripting.SWbemRefresher")
If Err <> 0 Then
WScript.Echo Err
WScript.Quit
End If

' Add the single instance of the statistics
'    class to the refresher
Set obMemoryStatistics = Refresher.Add(objService, _
    "Win32_PerfFormattedData_MemoryStatistics=@").Object

' Refresh once to obtain base values for cooking calculations
Refresher.Refresh

Const REFRESH_INTERVAL = 10

' Refresh every REFRESH_INTERVAL seconds 
For I=1 to 3
  WScript.Sleep REFRESH_INTERVAL * 1000
  Refresher.Refresh

  WScript.Echo "System memory statistics" _
      & "(Available Megabytes) " _
      & "for the past 100 seconds - pass " & i 
  WScript.Echo "Average = " _
     & obMemoryStatistics.Average & VBNewLine & "Max = " _
     & obMemoryStatistics.Max & VBNewLine & "Min = " _
     & obMemoryStatistics.Min & VBNewLine & "Range = " _ 
     & obMemoryStatistics.Range & VBNewLine & "Variance = " _
     & obMemoryStatistics.Variance 
Next

Exécution du script

La procédure suivante décrit comment exécuter l’exemple.

Pour exécuter le script d’exemple

  1. Copiez le code MOF et le script dans des fichiers sur votre ordinateur.
  2. Donnez au fichier MOF une extension .mof et au fichier de script une extension .vbs.
  3. Dans la ligne de commande, changez de répertoire vers le dossier où les fichiers sont stockés, et exécutez Mofcomp sur le fichier MOF. Par exemple, si vous nommez le fichier CalculatedData.mof, alors la commande est Mofcomp CalculatedData.mof.
  4. Exécutez le script.

Surveillance des données de performance

Accès aux classes de performance préinstallées WMI

Qualificatifs de propriété pour les classes de compteurs de performance formatées

Types de compteurs statistiques