Skip to content
AdrienSchadle edited this page Nov 5, 2021 · 5 revisions

Présentation

PresentMon est une application qui s'appuie sur les ETW pour fournir des statistiques sur l'affichage des applications. ETW permet aux applications la création de sessions pour être à l'écoute d'événements système. Dans le cas de PresentMon se sont tous les événements liées à l'affichage (DWM, DXGI, DXG kernel, ...). 

Dans notre cas ces sessions sont nommées par défaut, ainsi il ne peut y avoir qu'une session en cours sur la machine. Ces sessions doivent être stoppée à la fin de chaque stream sous peine de ne générer aucune statistique sur les streams suivants. Lorsque PresentMon s'arrête normalement il ferme la session ETW.

Compilation

PresentMon est compilée sur une machine Windows à l'aide de Visual Studio (dernière version utilisée - 2019).

Lister les sessions etw

Il est possible de lister les sessions ouvertes sur le serveur avec la commande suivante:

  • logman query -ets

Dans la liste des "Data Collector Set" si "PresentMon" apparait alors la session précédente de PresentMon est encore présente.

Démarrage d'une session

Le démarrage d'une session s'exécute de la manière suivante:

PresentMon-blk-x64 -no_csv -process_id <game_pid> -terminate_on_proc_exit -output_statsd <statsd_port>

  • le paramètre "no-csv" interdit l'écriture des statistiques dans un fichier csv.
  • le paramètre "process_id" permet de ne calculer les statistiques que sur le processus désigné par son PID
  • le paramètre "terminate_on_proc_exit" indique à PresentMon de s'arrêter lorsque le processus désigné s'arrête
  • le paramètre "output_statd" est le paramètre ajouté par Blacknut pour récupérer des statistiques via statsd. Attention seul le fps du processus désigné n'est récupéré.

Codes de sortie de PresentMon:

  • 0 -> PresentMon s'est arrêté normalement,
  • 6 -> PresentMon s'est arrếté suite à un échec de la création de la session ETW.

Arrêt d'une session

Il est possible de fermer une session ETW avec PresentMon via la commande suivante:

PresentMon-blk-x64.exe -terminate_existing

Codes de sortie:

  • 0 -> une session a bien été arrếtée,
  • 7 -> aucune session n'a été trouvée.

Attention cette commande ne permet que de stopper la session en cours. Elle ne redémarre pas une autre session ensuite.

Fichier de log

Il est possible d'écrire des logs dans un fichier en ajoutant le paramètres "-log_file" à la ligne de commande. Ce fichier de log a pour objectif de s'assurer que les session ETW sont bien démarrées et arrêtées.

Le nom du fichier doit OBLIGATOIREMENT se présenter de la manière suivante.

<path>\stream.<stream_id>.<presentmon.log>

  • path est le chemin où le fichier sera écrit
  • stream_id est l'identifiant du stream qui sera inscrit dans le fichier de log
  • presentmon.log est le suffix utilisé dans la cadre de mushroom.