Guía de seguimiento dinámico de Solaris

Directiva switch

La memoria intermedia principal presenta de forma predeterminada una directiva de memoria intermedia switch. Con esta directiva, las memorias intermedias se asignan en pares por CPU: una memoria intermedia está activa, mientras que la otra está inactiva. Cuando un consumidor de DTrace intenta leer una memoria intermedia, el núcleo conmuta primero entre las memorias intermedias inactivas y activas. La conmutación de memorias intermedias se realiza de tal forma que no haya ninguna ventana en la que puedan perderse los datos del seguimiento. Una vez conmutadas las memorias intermedias, la memoria intermedia que se ha establecido como inactiva recientemente se copia en el consumidor de DTrace. Esta directiva garantiza que el consumidor siempre verá una memoria intermedia consecuente consigo misma: nunca se copia y se realiza un seguimiento de una memoria intermedia simultáneamente. Esta técnica también evita que se introduzca una ventana en la que se pause el seguimiento o, por el contrario, se impida. El consumidor controla la velocidad con la que la memoria intermedia se conmuta y se lee gracias a la opción switchrate. Al igual que con cualquier opción de velocidad, switchrate puede especificarse con cualquier sufijo de tiempo, aunque se establece de forma predeterminada en velocidad por segundo. Para obtener más información sobre switchrate y otras opciones, consulte el Capítulo 16Opciones y optimizables.


Nota –

Para procesar la memoria intermedia principal en el nivel del usuario con una velocidad superior a la predeterminada de una por segundo, ajuste el valor de switchrate. El sistema procesa las acciones que inducen la actividad del usuario (como printa() y system()) cuando se procesa el registro correspondiente en la memoria intermedia principal. El valor de switchrate indica la velocidad con la que el sistema procesará dichas acciones.


Con la directiva switch, si un determinado sondeo habilitado realiza un seguimiento de una cantidad de datos superior al espacio disponible en la memoria intermedia principal activa, los datos se anulan y se incrementa un recuento de anulación por CPU. En el caso de que se produzcan una o varias anulaciones, dtrace(1M) muestra un mensaje similar al siguiente:


dtrace: 11 drops on CPU 0

Si el tamaño de un determinado registro es superior al tamaño total de memoria intermedia, el registro se anulará independientemente de la directiva de memoria intermedia. Puede reducir o eliminar las anulaciones aumentando el tamaño de la memoria intermedia principal con la opción bufsize o aumentando la velocidad de conmutación con la opción switchrate.

Con la directiva switch, el espacio temporal de copyin(), copyinstr() y alloca() se asigna fuera de la memoria intermedia activa.