zoukankan      html  css  js  c++  java
  • luaprofiler探索

    什么是luaprofiler?

    http://luaprofiler.luaforge.net/manual.html

    LuaProfiler is a time profiler designed to help finding bottlenecks on your Lua program.

    If you use LuaProfiler into your program, it will generate a log of all your function calls and their respective running times. You can use this log to generate a summary of the functions your program uses, along with how long it stayed in each of them, or you can import the log into a spreadsheet for further analysis.

    LuaProfiler is free software and uses the same license as Lua 5.1.

    此工具是检测lua代码中, 对于lua执行速度有影响代码点, 即程序的效率瓶颈。

    此工具会产生一个 函数调用的 log, 每个调用会产生响应的运行时间。

    可以使用工具产生 总结性质的表, 此表能够统计各个函数调用的耗时, 并可以将此表导入 电子表格软件,然后进一步分析。

    最重要的一点是, 此工具仅仅与lua5.1 兼容。

    Status

    Current version is 2.0.2. It was developed for Lua 5.1.

    github网址:

    https://github.com/luaforge/luaprofiler

    软件下载:

    release bin

    http://files.luaforge.net/releases/luaprofiler/LuaProfilerbinaries/version1.1forlinux

    code

    http://files.luaforge.net/releases/luaprofiler/LuaProfiler/LuaProfiler2.0.2

    luaprofiler构成

    http://luaprofiler.luaforge.net/manual.html

    For flexibility reasons, LuaProfiler is divided in 2 parts: the Lua code profiler, written in C to maximize the precision of timing, and the analyzer that generates information about the program execution, written in Lua to allow greater variance in the analysis process.

    analyzer 中是 summary.lua

    image

    安装

    The easies way to install LuaProfiler is through LuaRocks. Just do luarocks install luaprofiler and LuaRocks will download and install LuaProfiler on all major platforms.

    If you want to install by hand, LuaProfiler source is distributed as a group of C files and some makefile templates. LuaProfiler follows the package model for Lua 5.1, therefore it should be "installed" in your package.path.

    http://luaprofiler.luaforge.net/manual.html

    luarocks install luaprofiler

    luaprofiler使用

    http://luaprofiler.luaforge.net/manual.html

    Just require"profiler" in your script and this will define a profiler module with two functions:

    start([filename])
    Starts the profiler using the optional filename as the log file.
    stop()
    Stops the profiler.

    You can restart the profiler after a stop with another call to start.

    All you need now is to run your program and get the output generated by the profiler. The default log file is written to the working directory of the program, in a file like lprof_randomid.out where randomid is a random number. The log format uses a line for every function call in your program which may result in huge files, so be careful with disk space if your program runs for a long time, or use localized profiling wrapping the target section with a start()/stop() call sequence.

    示例

    在 replace.lua中添加 profiler检测代码:

    local profiler = require("profiler")

    profiler.start()

    for _,file in ipairs(targetFiles) do
        print("handling file =".. file)
        handle_file(file)
    end

    profiler.stop()

    ------------------------------------------  handle file end ------------------------------------------

    运行 replace.lua,发现确实产生一个 lprof_fileYLIo8z.out:

    root@fqs:/home/share/luascript/replace# lua replace.lua
    parse trans_table starting .....
    line=    you  lucy
    well formed line=    you  lucy
    line=
    parse trans_table ending .....
    handling file =./replaceFiles/test.txt
    you==>lucy
    root@fqs:/home/share/luascript/replace# ls
    config.lua  lprof_fileYLIo8z.out  replaceFiles  replace.lua

    查看日志内容:

    root@fqs:/home/share/luascript/replace# cat lprof_fileYLIo8z.out
    stack_level    file_defined    function_name    line_defined    current_line    local_time    total_time
    0    (C)    profiler_init    -1    -1    0.000010    0.000010
    0    =[C]    ipairs    -1    232    0.000002    0.000002
    0    =[C]    (for generator)    -1    232    0.000002    0.000001
    1    =[C]    called from print    -1    -1    0.000003    0.000003
    0    =[C]    print    -1    233    0.000024    0.000028
    1    =[C]    open    -1    151    0.000010    0.000010
    1    =[C]    assert    -1    151    0.000001    0.000001
    1    =[C]    read    -1    152    0.000014    0.000014
    1    =[C]    close    -1    153    0.000007    0.000008
    1    =[C]    pairs    -1    155    0.000001    0.000002
    1    =[C]    (for generator)    -1    155    0.000002    0.000002
    2    =[C]    called from print    -1    -1    0.000003    0.000002
    1    =[C]    print    -1    156    0.000012    0.000016
    1    =[C]    gsub    -1    157    0.000003    0.000003
    1    =[C]    (for generator)    -1    155    0.000001    0.000001
    1    =[C]    open    -1    223    0.000033    0.000033
    1    =[C]    assert    -1    223    0.000005    0.000004
    1    =[C]    write    -1    224    0.000009    0.000008
    1    =[C]    close    -1    225    0.000096    0.000096
    0    @replace.lua    handle_file    147    234    0.000114    0.000300
    0    =[C]    (for generator)    -1    232    0.000002    0.000002
    0    =[C]    stop    -1    237    0.000001    0.000001
    root@fqs:/home/share/luascript/replace#

    使用summary统计下:

    root@fqs:/home/share/luascript/replace# /usr/local/bin/summary.lua -v lprof_fileYLIo8z.out
    Node name    Calls    Average per call    Total time    %Time
    handle_file    1    0.000114    0.000114    32.112676056338
    close    2    5.15e-05    0.000103    29.014084507042
    open    2    2.15e-05    4.3e-05    12.112676056338
    print    2    1.8e-05    3.6e-05    10.140845070423
    read    1    1.4e-05    0.000014    3.943661971831
    profiler_init    1    1e-05    0.000010    2.8169014084507
    write    1    9e-06    0.000009    2.5352112676056
    (for generator)    4    1.75e-06    7e-06    1.9718309859155
    called from print    2    3e-06    6e-06    1.6901408450704
    assert    2    3e-06    6e-06    1.6901408450704
    gsub    1    3e-06    0.000003    0.84507042253521
    ipairs    1    2e-06    0.000002    0.56338028169014
    pairs    1    1e-06    0.000001    0.28169014084507
    stop    1    1e-06    0.000001    0.28169014084507
    root@fqs:/home/share/luascript/replace#

  • 相关阅读:
    FOC中的Clarke变换和Park变换详解(动图+推导+仿真+附件代码)
    有感FOC算法学习与实现总结
    永磁同步电机 spmsm 和 ipmsm 的区别总结
    Jekyll 解决Jekyll server本地预览文章not found的问题
    STM32 TIM 多通道互补PWM波形输出配置快速入门
    STM32 TIM1高级定时器配置快速入门
    STM32 ADC多通道规则采样和注入采样
    STM32 时钟树配置快速入门
    STM32 TIM 编码器模式采集编码器信号
    STM32 标准库V3.5启动文件startup_stm32f10xxx.s分析
  • 原文地址:https://www.cnblogs.com/lightsong/p/5576100.html
Copyright © 2011-2022 走看看