Manuel de suivi dynamique Solaris

Stratégie fill

Dans le cas de certains problèmes, vous pouvez utiliser un tampon unique interne au noyau. Tant que cette approche peut être implémentée avec la stratégie switch et les constructions D appropriées en incrémentant une variable en D et en réalisant un prédicat d'action exit() correctement, cette implémentation n'élimine pas le risque d'abandons. Pour demander un tampon unique de grande capacité interne au noyau et poursuivre le suivi jusqu'à ce qu'au moins un des tampons par CPU soit rempli, utilisez la stratégie de tampon fill. Dans le cadre de cette stratégie, le suivi se poursuit jusqu'à ce qu'une sonde activée tente de suivre plus de données que ne peut en accueillir l'espace restant sur le tampon principal. Lorsque l'espace restant est insuffisant, le tampon est marqué comme rempli et le consommateur est notifié qu'au moins un de ses tampons par CPU est rempli. Une fois que dtrace(1M) détecte un tampon rempli, le suivi est arrêté, tous les tampons sont traités, puis dtrace se ferme. Aucune autre donnée n'est suivie dans un tampon rempli même s'il reste suffisamment de place pour l'accueillir.

Pour utiliser la stratégie fill, définissez l'option bufpolicy sur fill. Par exemple, la commande suivante procède au suivi de chaque entrée d'appel système dans un tampon par CPU de 2K avec la stratégie de tampon définie sur fill :


# dtrace -n syscall:::entry -b 2k -x bufpolicy=fill

Stratégie fill et sondes END

En règle générale, les sondes END ne se déclenchent pas avant que le suivi n'ait été arrêté de manière explicite par le consommateur DTrace. Les sondes END se déclenchent toujours sur une CPU, mais celle-ci n'est pas définie. Avec les tampons fill, le suivi est arrêté de manière explicite lorsqu'au moins l'un des tampons principaux par CPU est marqué comme rempli. Si la stratégie fill est sélectionnée, la sonde END est susceptible de se déclencher sur une CPU ayant un tampon rempli. Pour accueillir le suivi END dans des tampons fill, DTrace calcule la quantité d'espace potentiellement consommée par les sondes END et soustrait cet espace de la taille du tampon principal. Si la taille nette est négative, DTrace refuse de démarrer et dtrace(1M) affiche un message d'erreur correspondant.


dtrace: END enablings exceed size of principal buffer

Le mécanisme de réservation garantit qu'un tampon plein dispose toujours d'un espace suffisant pour n'importe quelle sonde END.