En esta sección, se describen las mejoras de plataforma y rendimiento nuevas de esta versión. Estas funciones ayudan a optimizar sistemas basados en Oracle Solaris para SPARC y x86, por lo que aumentan el rendimiento y proporcionan un mejor diagnóstico para sus sistemas.
Oracle Solaris 11.4 introduce un nuevo proveedor de DTrace SCSI diseñado para rastrear comandos SCSI y funciones de gestión de tareas emitidas por un sistema Oracle Solaris. El proveedor SCSI tiene las siguientes ventajas:
Le permite rastrear comandos SCSI en un sistema Oracle Solaris sin conocer la estructura interna.
Incluye sondeos y estructuras que siguen lo más posible los estándares SCSI T10.
Proporciona una contraparte para el proveedor de E/S de DTrace que rastrea el tráfico de E/S en una capa distinta.
Brinda una secuencia de comandos scsitrace que consume los nuevos sondeos.
En el siguiente ejemplo, se muestra un rastreo de una línea que identifica restablecimientos de destinos SCSI:
# dtrace -n 'scsi:::tmf-request /(args[1] == SCSI_TMF_TARGET_RESET) && (args[0]->addr_path != "NULL")/ { printf("Target Reset sent to %s", args[0]->addr_path);}'
Para obtener más información, consulte iscsi Provider de Guía de Oracle Solaris 12 DTrace (Dynamic Tracing).
El proveedor de fileops expone un juego completo de sondeos de operación de archivos UNIX estándar destinados más a un administrador de Oracle Solaris que a un desarrollador. Por ejemplo, el proveedor puede mostrar información de latencia de read o write para todos los sistemas de archivos, incluidos los pseudosistemas de archivos.
Los sondeos de fileops corresponden a las operaciones de archivo open, close, read, write, etc. Estos sondeos no son específicos de ningún tipo de sistema de archivos ni dependen de la E/S a dispositivos de almacenamiento externo. Por ejemplo, el sondeo de fileops:::read se activa con cualquier operación de lectura desde un archivo, independientemente de si los datos provienen de un disco o están almacenados en la memoria caché.
Puede usar el sondeo de read para observar las latencias de lectura en distintos tipos de sistemas de archivos. Por ejemplo:
fileops:::read { @[args[0]->fi_fs] = quantize(args[1]); }
La salida resultante proporciona un gráfico de recuentos de lecturas y latencias para todos los tipos de sistemas de archivos presentes en el sistema.
Para obtener más información, consulte fileops Provider de Guía de Oracle Solaris 12 DTrace (Dynamic Tracing).
Oracle Solaris 11.4 extiende el proveedor de DTrace MIB existente para observar eventos de la pila de red con información de protocolo, de modo de poder identificar conexiones TCP, UDP e IP.
Para obtener más información, consulte mib Provider de Guía de Oracle Solaris 12 DTrace (Dynamic Tracing).
Se agregó una nueva acción, pcap(), a DTrace. La acción pcap() ejecutará una de las siguientes opciones:
Mostrar datos de paquetes como lo hace tracemem(), pero fusionados en un buffer contiguo.
Si freopen() especificó un archivo de captura, la acción pcap() capturará los datos de paquete en un archivo de captura de paquete mediante la función pcap_dump() de libpcap. DTrace hace lo siguiente con los datos del paquete:
Recopila los datos del paquete en un contexto de sondeo.
Fusiona los datos del paquete en un buffer contiguo si todavía no están en uno.
Vuelca los datos en el archivo especificado mediante la función pcap_dump(), que se llamó al recopilar los datos.
La siguiente acción de pcap() vuelca memoria en stdout como lo hace tracemem():
pcap(mblk, protocol);
Las llamadas siguientes vuelcan los datos del paquete en el archivo de captura con un sufijo que especifica el valor de pid actual:
freopen("/tmp/cap.%d", pid); pcap(mblk, protocol);
Esto le permite organizar seguimientos de paquetes por proceso o servicio, por ejemplo. Como freopen() está clasificada como una acción destructiva, la secuencia de comandos anterior debe especificar la opción –w (”destructive”) dtrace. La acción pcap() no es destructiva.
DTrace tiene una nueva acción print() para mostrar tipos arbitrarios, como se muestra en el siguiente ejemplo:
# dtrace -q -n 'fop_close:entry {print(*args[0]);exit(0)}' vnode_t { v_lock = { _opaque = [ NULL ] } v_flag = 0x0 v_count = 0x1 v_data = 0xffffc10054425378 v_vfsp = specfs`spec_vfs v_stream = 0xffffc100623354e8 v_type = VCHR v_rdev = 0xee00000026 v_vfsmountedhere = NULL v_op = 0xffffc10029d98040 v_pages = NULL v_filocks = NULL v_shrlocks = NULL v_nbllock = { _opaque = [ NULL ] } v_cv = { _opaque = 0x0 } v_pad = 0xbadd v_count_dnlc = 0x0 v_locality = NULL v_femhead = NULL v_path = "/devices/pseudo/udp@0:udp" v_rdcnt = 0x0 v_wrcnt = 0x0 v_mmap_read = 0x0 v_mmap_write = 0x0 v_mpssdata = NULL v_fopdata = NULL v_vsd_lock = { _opaque = [ NULL ] } v_vsd = NULL v_xattrdir = NULL v_fw = 0xbaddcafebaddcafe } #
Para obtener más información, consulte print Action de Guía de Oracle Solaris 12 DTrace (Dynamic Tracing).
La estructura de estadísticas de núcleo (kstats) v2 proporciona mejor rendimiento y una serie de optimizaciones con respecto a la estructura de kstats anterior. Estos son algunos de los componentes nuevos más destacados:
API de núcleo, que proporciona la funcionalidad para crear y manipular kstats v2. Las estadísticas de núcleo se identifican mediante un URI único e incluyen metadatos tanto para la estadística de núcleo como para los pares de nombre y valor que contiene la estadística de núcleo. Esta API permite a la estadística de núcleo describir los valores que informa.
Biblioteca libkstat2, que proporciona acceso a kstats v2 creadas en el núcleo. Las kstats se buscan por medio del URI único que las identifica y se presentan como hashmaps. Los desarrolladores pueden suscribirse a eventos en un nivel de URI de kstats en particular y recibirán notificaciones cuando se agregue o elimine alguna estadística de núcleo debajo de ese nivel del árbol de URI.
Utilidad /usr/bin/kstat2 que proporciona acceso de CLI a las kstats. Esta nueva utilidad examina las kstats disponibles en el sistema e informa las estadísticas que coinciden con los criterios especificados en la línea de comandos. A continuación, cada estadística coincidente se imprime con su URI y el valor real. Se admiten diversos formatos de salida, incluidos el formato legible por el usuario, el formato analizable y el formato de notación de objetos JavaScript (JSON).
Para obtener información sobre la API del núcleo, consulte las páginas del comando man kstat2_create(9F), kstat2_create_with_template(9F) y kstat2_create_histogram(9F). Para obtener más información sobre la biblioteca libkstat2, consulte las páginas del comando man libkstat2(3LIB) y kstat2(3KSTAT2). Para obtener información sobre la utilidad kstat2, consulte la página del comando man kstat2(8).
Oracle Solaris 11.4 incluye la característica de diagnóstico de archivos de núcleo, que proporciona un resumen de telemetría básica para archivos de núcleo de espacio de usuario, genera alertas de FMA para notificar al usuario y proporciona una política de retención de núcleo de diagnóstico y asociación de casos de SMF.
Los archivos de núcleo de diagnóstico incluyen solo el contenido necesario, por lo que el tamaño del contenido es pequeño. Los archivos de núcleo se suprimirán una vez que se hayan generado los archivos de resumen de texto a partir de ellos, lo que reduce el uso de espacio en disco. Con otras características nuevas, como el diagnóstico de pilas, FMA podrá buscar en las pilas del archivo de resumen de la base de datos de Oracle para detectar problemas conocidos. La política de retención permite al usuario establecer la política de núcleo de diagnóstico mediante el comando coreadm. El comando coreadm también proporciona funcionalidades como la supresión de núcleos de inmediato o la conservación de un cierto número de núcleos durante un tiempo determinado. La característica de asociación de casos es para el motor de diagnóstico sw-diag-response. Se pueden ver todas las alertas de diagnóstico de núcleo que llevan a un fallo del servicio de software, junto con el juego de datos de entorno y pila de cada evento.
El usuario ahora tiene más control sobre los núcleos de diagnóstico. Cuando un servicio de software no se ejecuta correctamente y se retira de servicio, el administrador puede ver con rapidez y facilidad todos los eventos que originaron el fallo del servicio y estar mejor informado acerca de los procesos que tuvieron errores y en qué lugar de la ejecución de código se produjeron los errores.
Para obtener más información, consulte la página del comando man coreadm(8).
En Oracle Solaris 11.4, el comando pfiles acepta un nombre de archivo de núcleo como argumento y puede mostrar información acerca de los descriptores de archivo abiertos por un proceso que hace volcados de núcleo. Esta funcionalidad proporciona ayuda adicional en la depuración del volcado de núcleo del proceso para determinar la causa raíz del volcado.
A diferencia de versiones anteriores de Oracle Solaris, en Oracle Solaris 11.4 el comando pfiles ya no detiene un proceso objetivo en ejecución mientras recupera datos sobre archivos abiertos en ese proceso.
Para obtener más información, consulte la página del comando man proc(1).
El comando fsstat tiene una nueva opción –l que devuelve la información de latencia correspondiente a las operaciones de read, write y readdir. La información de latencia es independiente de las operaciones de E/S físicas, de modo que representa el rendimiento del sistema de archivos tal como lo ven las aplicaciones. Esta característica permite a los usuarios observar la latencia del sistema de archivos para tipos de sistemas de archivos o sistemas de archivos individuales. Esta característica es útil para la resolución de problemas de rendimiento de sistemas de archivos.
Para obtener más información, consulte la página del comando man fsstat(8).
Oracle Solaris 11.4 ahora proporciona información de distribución de latencia de E/S o de tiempo de respuesta de E/S de SCSI para mejorar la capacidad de observación. La distribución de tiempo de respuesta de E/S se puede usar para identificar valores atípicos de tiempo de respuesta. La distribución se almacena en un histograma con tres opciones distintas de escala para x: linear, log2-based y log10-based. La distribución se puede mostrar mediante el comando iostat. La opción –L se agrega en combinación con las opciones –x e –Y para mostrar el histograma. La información de distribución se puede usar para investigar problemas de rendimiento.
Para obtener más información, consulte las páginas del comando man sd(4D) y iostat(8).