0 votos

¿Cómo puedo comprender la salida de la "muestra"?

Esto NO es un duplicado de esta pregunta ¡¡!! La pregunta anterior no recibió una respuesta satisfactoria.

Estoy tratando de usar sample para hacer un perfil de tiempo en un proceso de Rust llamado saample . ¿Puede alguien ayudarme a comprender exactamente lo que está pasando?

Esto es lo que he descubierto hasta ahora en una línea como esta: 885 std::sys_common::backtrace::__rust_begin_short_backtrace::h5cb760574ede76e4 (in saample) + 10 [0x10d3556fa] backtrace.rs:125

885 - algún tipo de identificación

std::sys_common::backtrace::__rust_begin_short_backtrace::h5cb760574ede76e4 - qué función de Rust se está ejecutando

(in saample) - donde se ejecuta esta función

+ 10 ¿Creo que esto puede ser tiempo en milisegundos? Sin embargo, sumando todos los +\d hace que el total de "milisegundos" sea de 1624, que es mucho más que 1 segundo. Esto podría ser el recuento de llamadas entonces.

[0x10d3556fa] La dirección de la memoria

backtrace.rs:125 para la función ejecutada anteriormente.

¿El resultado de la muestra me dice algo sobre la duración o la frecuencia de las llamadas a estas funciones?

Analysis of sampling saample (pid 2561) every 1 millisecond
Process:         saample [2561]
Path:            /Users/USER/*/saample
Load Address:    0x10d354000
Identifier:      saample
Version:         0
Code Type:       X86-64
Parent Process:  zsh [2467]

Date/Time:       2021-07-23 13:02:03.889 -0700
Launch Time:     2021-07-23 13:02:02.691 -0700
OS Version:      Mac OS X 10.15.6 (19G2021)
Report Version:  7
Analysis Tool:   /usr/bin/sample

Physical footprint:         332K
Physical footprint (peak):  332K
----

Call graph:
    885 Thread_45257   DispatchQueue_1: com.apple.main-thread  (serial)
      885 start  (in libdyld.dylib) + 1  [0x7fff715a3cc9]
        885 main  (in saample) + 41  [0x10d356209]
          885 std::rt::lang_start_internal::h0c37a46739a0311d  (in saample) + 644  [0x10d378a84]  rt.rs:51
            885 std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h5cdae29307de47d2  (in saample) + 12  [0x10d3554cc]  rt.rs:66
              885 std::sys_common::backtrace::__rust_begin_short_backtrace::h5cb760574ede76e4  (in saample) + 10  [0x10d3556fa]  backtrace.rs:125
                885 saample::main::he5a59bfa88e51949  (in saample) + 295  [0x10d355f17]  main.rs:5
                  885 std::process::Command::output::h1b9edbfbdd42bee8  (in saample) + 82  [0x10d375432]  process.rs:885
                    885 std::process::Child::wait_with_output::h7a56dcf388f23038  (in saample) + 376  [0x10d3755f8]  process.rs:1689
                      885 poll  (in libsystem_kernel.dylib) + 10  [0x7fff716eb3d6]

Total number in stack (recursive counted multiple, when >=5):

Sort by top of stack, same collapsed (when >= 5):
        poll  (in libsystem_kernel.dylib)        885

Binary Images:
       0x10d354000 -        0x10d397fff +saample (0) <CAEBBABC-C8CE-3E86-A17A-24F047B7E157> /Users/*/saample
       0x1152a7000 -        0x115338f47  dyld (750.6) <F9D4DEDC-8296-3E3F-B517-9C8B89A4C094> /usr/lib/dyld
    0x7fff6e588000 -     0x7fff6e589fff  libSystem.B.dylib (1281.100.1) <C0C9872A-E730-37EA-954A-3CE087C15535> /usr/lib/libSystem.B.dylib
    0x7fff6e86e000 -     0x7fff6e8c0fff  libc++.1.dylib (902.1) <59A8239F-C28A-3B59-B8FA-11340DC85EDC> /usr/lib/libc++.1.dylib
    0x7fff6e8c1000 -     0x7fff6e8d6ffb  libc++abi.dylib (902) <E692F14F-C65E-303B-9921-BB7E97D77855> /usr/lib/libc++abi.dylib
    0x7fff6e8d7000 -     0x7fff6e8d7fff  libcharset.1.dylib (59) <72447768-9244-39AB-8E79-2FA14EC0AD33> /usr/lib/libcharset.1.dylib
    0x7fff6f361000 -     0x7fff6f451fff  libiconv.2.dylib (59) <18311A67-E4EF-3CC7-95B3-C0EDEE3A282F> /usr/lib/libiconv.2.dylib
    0x7fff703e8000 -     0x7fff7041bfde  libobjc.A.dylib (787.1) <6DF81160-5E7F-3E31-AA1E-C875E3B98AF6> /usr/lib/libobjc.A.dylib
    0x7fff704ef000 -     0x7fff70507fff  libresolv.9.dylib (67.40.1) <C57EDFEF-D36A-310B-8D14-8C68A625B1E8> /usr/lib/libresolv.9.dylib
    0x7fff71385000 -     0x7fff7138aff3  libcache.dylib (83) <AF488D13-9E89-35E0-B078-BE37CC5B8586> /usr/lib/system/libcache.dylib
    0x7fff7138b000 -     0x7fff71396fff  libcommonCrypto.dylib (60165.120.1) <C7912BE5-993E-3581-B2A0-6AABDC8C5562> /usr/lib/system/libcommonCrypto.dylib
    0x7fff71397000 -     0x7fff7139efff  libcompiler_rt.dylib (101.2) <49B8F644-5705-3F16-BBE0-6FFF9B17C36E> /usr/lib/system/libcompiler_rt.dylib
    0x7fff7139f000 -     0x7fff713a8ff7  libcopyfile.dylib (166.40.1) <3C481225-21E7-370A-A30E-0CCFDD64A92C> /usr/lib/system/libcopyfile.dylib
    0x7fff713a9000 -     0x7fff7143bfdb  libcorecrypto.dylib (866.140.1) <60567BF8-80FA-359A-B2F3-A3BAEFB288FD> /usr/lib/system/libcorecrypto.dylib
    0x7fff71548000 -     0x7fff71588ff0  libdispatch.dylib (1173.100.2) <CD9C059C-91D9-30E8-8926-5B9CD0D5D4F5> /usr/lib/system/libdispatch.dylib
    0x7fff71589000 -     0x7fff715bffff  libdyld.dylib (750.6) <789A18C2-8AC7-3C88-813D-CD674376585D> /usr/lib/system/libdyld.dylib
    0x7fff715c0000 -     0x7fff715c0ffb  libkeymgr.dylib (30) <DB3337BE-01CA-3425-BD0C-87774FC0CDC0> /usr/lib/system/libkeymgr.dylib
    0x7fff715ce000 -     0x7fff715ceff7  liblaunch.dylib (1738.140.1) <AFBCBDD3-0B55-3ECD-8E04-A73A3A57356B> /usr/lib/system/liblaunch.dylib
    0x7fff715cf000 -     0x7fff715d4ff7  libmacho.dylib (959.0.1) <AA613A9C-961A-3B67-B696-4622FA59FC4E> /usr/lib/system/libmacho.dylib
    0x7fff715d5000 -     0x7fff715d7ff3  libquarantine.dylib (110.40.3) <F234E51D-FD0B-3EE4-B679-AE3EE9C536C3> /usr/lib/system/libquarantine.dylib
    0x7fff715d8000 -     0x7fff715d9ff7  libremovefile.dylib (48) <7C7EFC79-BD24-33EF-B073-06AED234593E> /usr/lib/system/libremovefile.dylib
    0x7fff715da000 -     0x7fff715f1ff3  libsystem_asl.dylib (377.60.2) <1563EE02-0657-3B78-99BE-A947C24122EF> /usr/lib/system/libsystem_asl.dylib
    0x7fff715f2000 -     0x7fff715f2ff7  libsystem_blocks.dylib (74) <0D53847E-AF5F-3ACF-B51F-A15DEA4DEC58> /usr/lib/system/libsystem_blocks.dylib
    0x7fff715f3000 -     0x7fff7167afff  libsystem_c.dylib (1353.100.2) <BBDED5E6-A646-3EED-B33A-91E4331EA063> /usr/lib/system/libsystem_c.dylib
    0x7fff7167b000 -     0x7fff7167effb  libsystem_configuration.dylib (1061.141.1) <0EE84C33-64FD-372B-974A-AF7A136F2068> /usr/lib/system/libsystem_configuration.dylib
    0x7fff7167f000 -     0x7fff71682fff  libsystem_coreservices.dylib (114) <A199156E-058D-3ABB-BCE9-4B9F20DCED0F> /usr/lib/system/libsystem_coreservices.dylib
    0x7fff71683000 -     0x7fff7168bfff  libsystem_darwin.dylib (1353.100.2) <5B12B5DB-3F30-37C1-8ECC-49A66B1F2864> /usr/lib/system/libsystem_darwin.dylib
    0x7fff7168c000 -     0x7fff71693fff  libsystem_dnssd.dylib (1096.100.3) <EBB4C2C2-E031-3094-B40A-E67BF261D295> /usr/lib/system/libsystem_dnssd.dylib
    0x7fff71694000 -     0x7fff71695ffb  libsystem_featureflags.dylib (17) <29FD922A-EC2C-3F25-BCCC-B58D716E60EC> /usr/lib/system/libsystem_featureflags.dylib
    0x7fff71696000 -     0x7fff716e3ff7  libsystem_info.dylib (538) <8A321605-5480-330B-AF9E-64E65DE61747> /usr/lib/system/libsystem_info.dylib
    0x7fff716e4000 -     0x7fff71710ff7  libsystem_kernel.dylib (6153.141.1) <2B6311E6-6240-3EF7-8C87-475B66F7452C> /usr/lib/system/libsystem_kernel.dylib
    0x7fff71711000 -     0x7fff71758fff  libsystem_m.dylib (3178) <00F331F1-0D09-39B3-8736-1FE90E64E903> /usr/lib/system/libsystem_m.dylib
    0x7fff71759000 -     0x7fff71780fff  libsystem_malloc.dylib (283.100.6) <8549294E-4C53-36EB-99F3-584A7393D8D5> /usr/lib/system/libsystem_malloc.dylib
    0x7fff71781000 -     0x7fff7178effb  libsystem_networkextension.dylib (1095.140.2) <F06C65C5-2CBE-313C-96E1-A09240F9FE57> /usr/lib/system/libsystem_networkextension.dylib
    0x7fff7178f000 -     0x7fff71798ff7  libsystem_notify.dylib (241.100.2) <FA22F928-D91B-3AA5-96BB-3186AC0FB264> /usr/lib/system/libsystem_notify.dylib
    0x7fff71799000 -     0x7fff717a1fef  libsystem_platform.dylib (220.100.1) <009A7C1F-313A-318E-B9F2-30F4C06FEA5C> /usr/lib/system/libsystem_platform.dylib
    0x7fff717a2000 -     0x7fff717acfff  libsystem_pthread.dylib (416.100.3) <62CB1A98-0B8F-31E7-A02B-A1139927F61D> /usr/lib/system/libsystem_pthread.dylib
    0x7fff717ad000 -     0x7fff717b1ff3  libsystem_sandbox.dylib (1217.141.1) <6DE13684-5A67-3009-A53A-C9086CF241C3> /usr/lib/system/libsystem_sandbox.dylib
    0x7fff717b2000 -     0x7fff717b4fff  libsystem_secinit.dylib (62.100.2) <F80872AA-E1FD-3D7E-8729-467656EC6561> /usr/lib/system/libsystem_secinit.dylib
    0x7fff717b5000 -     0x7fff717bcffb  libsystem_symptoms.dylib (1238.120.1) <5820A2AF-CE72-3AB3-ABCC-273A3419FB55> /usr/lib/system/libsystem_symptoms.dylib
    0x7fff717bd000 -     0x7fff717d3ff2  libsystem_trace.dylib (1147.120) <04B47629-847B-3D74-8ABE-C05EF9DEEFE4> /usr/lib/system/libsystem_trace.dylib
    0x7fff717d5000 -     0x7fff717daff7  libunwind.dylib (35.4) <42B7B509-BAFE-365B-893A-72414C92F5BF> /usr/lib/system/libunwind.dylib
    0x7fff717db000 -     0x7fff71810ffe  libxpc.dylib (1738.140.1) <3E243A41-030F-38E3-9FD2-7B38C66C35B1> /usr/lib/system/libxpc.dylib

0voto

Jose Chavez Puntos 645

Lo tienes casi correcto, pero no del todo:

885 no es un número de identificación, es en realidad el número de milisegundos gastados en este nodo del gráfico de llamadas y sus hijos. Tenga en cuenta que esto se acumula, de modo que, por ejemplo, el número de milisegundos que se muestra para la función "main" cerca de la parte superior incluye el número de milisegundos gastados en las funciones llamadas por main (y así sucesivamente para sus hijos).

+ 10 no es el tiempo en milisegundos. En su lugar, es en realidad el número de distancia desde el inicio de la función especificada y hasta el contador actual del programa. Es decir, por ejemplo + 800 indicaría que esto no es algo que ocurre al principio de la función, sino más bien un número de instrucciones dentro.

backtrace.rs:125 no es la función previamente ejecutada, sino que es el archivo de código fuente y el número de línea para este nodo en particular en el gráfico de llamadas. Es decir, esto significa que en la línea 125 de backtrace.rs está el código que representa este nodo (que es entonces 10 bytes de código máquina después del comienzo de la función.

Nota: En lo anterior escribo "tiempo gastado", sin embargo debes tener en cuenta que técnicamente este es un perfilador de muestreo - por lo que en realidad significa "cuántas veces fue muestreado el programa en este punto en particular".

Como sample por defecto muestrea una vez por milisegundo (lo que también estás haciendo) esto significa que puedes pensar en esto como el número de milisegundos pasados en ese nodo.

De nuevo, como es un perfilador de muestreo, no obtienes información sobre lo que ocurre cuando el proceso no está siendo muestreado. Es decir, que el proceso esté haciendo X cuando lo muestreas 10 veces seguidas no significa necesariamente que haya gastado 10 milisegundos haciendo X, podría estar gastando 5 milisegundos haciendo X y 5 milisegundos haciendo Y, pero nunca has muestreado cuando estaba haciendo Y.

En cuanto a su última pregunta, esto significa que la salida no indica la frecuencia con la que se ha llamado a una función concreta (es decir, 100 muestras de 100 llamadas distintas a una función podrían aparecer igual en la salida que 100 muestras de una llamada muy larga a la función).

0 votos

Muchas gracias por su detallada respuesta. Esencialmente, 885 me dice que todo el proceso ha durado 885 ms? Si es así, esta salida de muestra es trivial, porque sólo se llamó a una función.

0 votos

Creo que debe dar más detalles sobre lo que quiere conseguir exactamente. El 885 no significa necesariamente que el proceso haya durado 885 ms, sino más bien que 885 muestras estaban en ese hilo. Si miras las marcas de tiempo en la parte superior, verás que hay aproximadamente 1,2 segundos entre el lanzamiento y la hora actual, así que ¿qué más esperabas que 885 milisegundos? Es subjetivo decir que la salida es "trivial" - puede que lo sea para ti. No es cierto que sólo una función fue llamada, hay múltiples funciones en la salida que has incluido.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X