c linux operating-system system-calls strace

¿Cómo interpretar la salida de strace?



linux operating-system (2)

Para cada comando hay una página de manual, puede leerlo escribiendo man y el nombre de la función C, por ejemplo, man lseek (también verifique apropos ). También tienen descripción de los parámetros pasados.

Aquí hay breves resúmenes:

  • lseek - reposiciona el desplazamiento de lectura / escritura del archivo del descriptor de archivo
  • write - escribir en un descriptor de archivo desde el búfer
  • close : elimina un descriptor de la tabla de referencia de objetos por proceso
  • mmap : asigna memoria o asigna archivos o dispositivos en la memoria
  • munmap : elimina una asignación para el rango de direcciones especificado
  • fstat - obtener el estado del archivo señalado por ruta

Tenga en cuenta que la interpretación de syscals individuales / aleatorios no será significativa en términos de rendimiento. Para probar la importancia del rendimiento de estos syscalls, debe usar el parámetro -c que puede contar el tiempo, las llamadas y los errores para cada syscall e informar el resumen. Luego puedes leer más acerca de estos que están tomando el tiempo más largo.

Para obtener más información sobre los parámetros de salida y strace , compruebe man strace .

Vea también: ¿Cómo analizar strace en shell en texto plano?

Necesito perfilar el rendimiento de una aplicación para la que estoy usando strace. Sin embargo, realmente no sé cómo interpretar las diversas llamadas del sistema que emite la señal. Los ejemplos de algunos de ellos están abajo:

(A) lseek(3, 1600, SEEK_SET) = 1600 (B) write(3, "G_DATA 300 0 "..., 800) = 800 (C) close(3) = 0 (D) mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2b600b179000 (E) munmap(0x2b600b179000, 4096) = 0 (F) fstat(3, {st_mode=S_IFREG|0644, st_size=1600, ...}) = 0

Estaría agradecido si alguien pudiera explicar brevemente en inglés simple lo que estas líneas de (A) a (F) realmente significan en términos de E / S, datos transferidos, importancia en el rendimiento, etc.

Pasé por las páginas de manual de strace pero todavía no estoy muy seguro. Si tienes algún otro indicador para que lea, sería genial.

Tengo algunos antecedentes sobre sistemas operativos y entiendo qué son las llamadas de sistema, la memoria, la memoria virtual, la programación, etc.


Para comprender esto, debe familiarizarse con las llamadas al sistema POSIX. Son la interfaz que utiliza un programa de espacio de usuario para interactuar con el kernel.

lseek , write , close , mmap , munmap y fstat son todas llamadas al sistema y están documentadas en la sección 2 del manual de Linux.

Brevemente, lseek mueve el puntero interno del descriptor de archivo suministrado al byte con la posición señalada por el segundo argumento, comenzando desde SEEK_SET (el principio), SEEK_CUR (posición actual) o SEEK_END (el final). Cualquier llamada consecutiva de read y write en el mismo descriptor iniciará su acción desde esta posición. Tenga en cuenta que lseek no está implementado para todos los tipos de descriptores, tiene sentido para un archivo en el disco, pero no para un socket o una tubería.

write copia el búfer suministrado al kernelspace y devuelve el número de bytes realmente escritos. Según el tipo de descriptor, el núcleo puede escribir los datos en el disco o enviarlos a través de la red. Generalmente, esta es una operación costosa porque implica transferir este búfer al kernel.

close cierra el descriptor suministrado y se liberan todos los recursos asociados con él en el kernel. Tenga en cuenta que cada proceso tiene un límite en el número de descriptores abiertos simultáneamente, por lo que a veces es necesario cerrar los descriptores para no alcanzar este límite.

mmap es una llamada al sistema complejo y se usa para muchos propósitos, incluida la memoria compartida. Sin embargo, el uso general es asignar más memoria para el proceso. Las funciones de biblioteca malloc y calloc usualmente lo utilizan internamente.

munmap libera la memoria mmap ''ped.

fstat devuelve información diversa que el sistema de archivos guarda sobre un archivo: tamaño, última modificación, permisos, etc.