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