macos wait system-calls dtrace darwin

macos - Interprete la salida de dtruss como "psynch_cvwait(…)=-1 Err#316”



system-calls dtrace (3)

Basado en una respuesta de Randy Howard , eché un vistazo al código fuente de XNU para esto. El archivo syscalls.master tiene la lista de todos los syscalls. Ese archivo describe la firma de psynch_cvwait así:

uint32_t psynch_cvwait( user_addr_t cv, uint64_t cvlsgen, uint32_t cvugen, user_addr_t mutex, uint64_t mugen, uint32_t flags, int64_t sec, uint32_t nsec)

que no parece tener mucha semejanza con la salida de dtruss citada en la pregunta. Sin embargo, la implementación real en pthread_support.c es más útil:

/* * psynch_cvwait: This system call is used for psynch cvar waiters to block in kernel. */ int psynch_cvwait(__unused proc_t p, struct psynch_cvwait_args * uap, uint32_t * retval)

Esto al menos da una idea de cuáles son los argumentos impresos por dtruss . Parece que la segunda podría ser una estructura, sus miembros descritos por el archivo syscalls.master . Así que la dirección sería de poca utilidad, y los miembros reales aparentemente no están impresos por dtruss en absoluto. dtruss se dtruss un dtruss , tal vez sea posible llegar a los miembros de esa estructura, aunque no estoy seguro de esto, y me pregunto por qué nadie lo ha hecho todavía.

He tenido menos suerte al tratar de asociar cualquier significado con esa salida Err#316 . Incluso al grepping todo el código fuente de XNU para el decimal y la representación hexadecimal de 316, no encontré ninguna ocurrencia que no incluyera otros dígitos también. El código de error no se menciona en la implementación de psynch_cvwait , pero esa implementación reenvía los códigos de error de otras funciones a las que llama. Uno realmente necesitaría un depurador del núcleo para desenredar eso y rastrear la fuente real de ese valor.

En general, ahora estoy un paso muy pequeño para comprender la salida de dtruss , pero con mucho trabajo. Por lo tanto, un documento de referencia adecuado y cualquier información sobre la fuente de ese código de error aún serían muy apreciados.

dtruss parece ser una herramienta útil para analizar el (mal) comportamiento de las aplicaciones en OS X. Lo más strace que encontré a mi querida strace en linux. Pero interpretar su salida requiere una comprensión de los syscalls a los que se refiere, y algunas veces las condiciones de error que podrían generar. Tomemos por ejemplo la línea

psynch_cvwait(0x6BE38D54, 0x100000100, 0x0) = -1 Err#316

Estoy interesado en una fuente de documentación que me permita saber qué pretende hacer este syscall, qué significan sus parámetros y qué significa este código de error. Más o menos como lo esperaría de una página de manual de función libc. Solicito una referencia que describa las llamadas anteriores y similares , con los errores anteriores y similares . Así que simplemente tome la línea como ejemplo para el tipo de salida que me gustaría poder entender.

¿Cuál es el documento de referencia apropiado para aprender sobre las llamadas de sistema operativo de OS X como esta?

Cuantos más syscalls cubra tu referencia, mejor.


Este podría ser un buen punto de partida, simplemente para familiarizarse con la operación de dtrace. http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html

En cuanto a syscalls, puedes comenzar aquí. http://www.opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master

http://developer.apple.com y http://www.opensource.apple.com son lugares para encontrar más detalles.

En forma de libro, "Mac OS X Internals - Un enfoque de sistemas" por Amit Singh es otra cosa útil para tener alrededor.


La única documentación que he encontrado en esto está en el código mismo.

Es el lado kernel de pthread_cond_wait () y pthread_cond_timedwait ().

En este caso, es el último ya que el código de error es # 316. psync_cvcontinue establece dos bits en el código de error para indicar si el tiempo de espera agotado (0x100) o si no hubo meseros (0x200). El error # 316 (0x13C) es el bit de tiempo de espera bit a bit con ETIMEDOUT (60).

https://github.com/apple/darwin-libpthread/blob/master/kern/kern_synch.c#L1216 https://github.com/apple/darwin-xnu/blob/master/bsd/sys/errno.h#L179