Ejecuto ruby-profiler en uno de mis programas. Estoy tratando de averiguar qué significa cada campo. Supongo que todo es tiempo de CPU (y no de reloj de pared), lo cual es fantástico. Quiero entender qué significa "---". ¿Hay algún tipo de información de pila allí? ¿Qué significa llamadas a/b?Comprender la salida de Ruby-prof
Thread ID: 81980260
Total Time: 0.28
%total %self total self wait child calls Name
--------------------------------------------------------------------------------
0.28 0.00 0.00 0.28 5/6 FrameParser#receive_data
100.00% 0.00% 0.28 0.00 0.00 0.28 6 FrameParser#read_frames
0.28 0.00 0.00 0.28 4/4 ChatServerClient#receive_frame
0.00 0.00 0.00 0.00 5/47 Fixnum#+
0.00 0.00 0.00 0.00 1/2 DebugServer#receive_frame
0.00 0.00 0.00 0.00 10/29 String#[]
0.00 0.00 0.00 0.00 10/21 <Class::Range>#allocate
0.00 0.00 0.00 0.00 10/71 String#index
--------------------------------------------------------------------------------
100.00% 0.00% 0.28 0.00 0.00 0.28 5 FrameParser#receive_data
0.28 0.00 0.00 0.28 5/6 FrameParser#read_frames
0.00 0.00 0.00 0.00 5/16 ActiveSupport::CoreExtensions::String::OutputSafety#add_with_safety
--------------------------------------------------------------------------------
0.28 0.00 0.00 0.28 4/4 FrameParser#read_frames
100.00% 0.00% 0.28 0.00 0.00 0.28 4 ChatServerClient#receive_frame
0.28 0.00 0.00 0.28 4/6 <Class::Lal>#safe_call
--------------------------------------------------------------------------------
0.00 0.00 0.00 0.00 1/6 <Class::Lal>#safe_call
0.00 0.00 0.00 0.00 1/6 DebugServer#receive_frame
0.28 0.00 0.00 0.28 4/6 ChatServerClient#receive_frame
100.00% 0.00% 0.28 0.00 0.00 0.28 6 <Class::Lal>#safe_call
0.21 0.00 0.00 0.21 2/4 ChatUserFunction#register
0.06 0.00 0.00 0.06 2/2 ChatUserFunction#packet
0.01 0.00 0.00 0.01 4/130 Class#new
0.00 0.00 0.00 0.00 1/1 DebugServer#profile_stop
0.00 0.00 0.00 0.00 1/33 String#==
0.00 0.00 0.00 0.00 1/6 <Class::Lal>#safe_call
0.00 0.00 0.00 0.00 5/5 JSON#parse
0.00 0.00 0.00 0.00 5/8 <Class::Log>#log
0.00 0.00 0.00 0.00 5/5 String#strip!
--------------------------------------------------------------------------------
me gustaría señalar que si se ejecuta en el depurador, interrumpir manualmente, y mostrar la pila de llamadas, 4 veces, en promedio 3 de esas muestras será la siguiente: 'read_frames -> receive_frame -> safe_call -> register -> ... 'por lo que su cuello de botella se le gritará para llamar la atención. Ese es [este método] (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024). El 25% restante del tiempo es principalmente '... -> paquete -> ...'. Todo lo demás es básicamente irrelevante. –
@Mike, sería útil que comunicara cómo interpreta el gráfico para sacar esa conclusión, ya que creo que eso es a lo que esta pregunta intenta llegar (cómo interpretar este resultado). ¡Sería útil para mí! –
@Charles: Estoy mirando la columna "total", que es la cantidad de tiempo que se pasa en la pila. El primer grupo de líneas trata sobre 'read_frames'. Todo su tiempo lo gasta llamando 'receive_frame'. El tercer grupo de líneas trata de 'receive_frame', que pasa todo su tiempo en' safe_call'. El cuarto grupo dice 'safe_call' pasa la mayor parte del tiempo en' register', luego 'packet', y un poco en' new'. (El segundo grupo dice que 'receive_data' siempre está en la parte superior.) –