鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

生成代码子模块功能说明

命令功能

支持对用户定义的.ini配置文件进行解析,生成对应的头文件和metadata文件。可在程序文件中包含头文件调用接口,记录日志信息。可在日志解析时使用metadata文件,解析日志信息。

若不需要使用生成代码子模块功能生成头文件和metadata文件,可使用工具提供的易用性接口,请参见易用性接口使用示例进行操作。

命令格式

tracelog generator [-h | --help] [-l {0,1,2,3} | --log-level {0,1,2,3}] {-i <INI_FILE> | --input <INI_FILE>} [-o <OUTPUT_PATH> | --output <OUTPUT_PATH>]

参数说明

表1 参数说明

参数

参数选项

参数说明

-h/--help

-

可选参数,获取帮助信息。

-l/--log-level

0/1/2/3

可选参数,设置日志级别,默认为1。

  • 0:日志级别为DEBUG。
  • 1:日志级别为INFO。
  • 2:日志级别为WARNING。
  • 3:日志级别为ERROR。

-i/--input

INI_FILE

必选参数,指定输入的.ini配置文件,.ini配置文件说明可参考.ini配置文件说明

-o/--output

OUTPUT_PATH

可选参数,指定生成头文件和metadata文件的目录,默认头文件和metadata生成在当前文件夹,生成的头文件名称与输入的.ini文件名相同。

.ini配置文件说明

以user.ini文件为例:

memoryKBs=5120
tracelog="/var/log/trace.log"

[normal_example]
name=char*
id=int
character=char


[callstack_example]
key=int
callstack=3


[pmu_example]
key=int
enablepmu=true

在.ini配置文件里包含以下两部分内容:

  1. 全局配置项。
    1. 缓存大小配置,不配置默认为5120KB。
    2. 日志路径和日志文件名配置,不配置默认为“/var/log/trace.log”
  2. 包含一个或多个section,每个section有以下两部分内容(最多支持16个section,每个section最多支持16个参数)。
    1. section名称,以“[section名称]”的形式呈现,例如:[normal_example]。
    2. 参数,可指定一个或多个参数。普通日志参数以“参数名=参数类型”的形式呈现,例如name=char*。其他参数请参见表2
表2 .ini配置文件参数说明

参数类型

参数说明

格式

memoryKBs

缓存大小。

memoryKBs=正整数,范围为80~81920,不配置默认为5120。

tracelog

日志生成路径。

字符串,用英文双引号包裹。

section名称

事件名。

字符串,用“[ ]”包裹。

普通日志参数

事件中传递的参数。

参数名=参数类型,类型支持int、char 、char*。

(可选)callstack参数

跟踪调用栈参数。

callstack=正整数,数字可自主定义为1~64内的正整数,否则默认为5。

(可选)enablepmu参数

采集PMU事件参数。

enablepmu=true,不区分大小写,等号前后可以有空格,除此之外其他情况配置不成功。

说明:

在配置文件中配置PMU采集后,在业务中第一次调用日志接口时会进行PMU采集初始化(大概6ms~7ms),此时调用日志接口无法获取到PMU数据信息,运行时终端会打印“[WARNING] Event information cannot be obtained because PMU collection is being initialized.”,此情况下cycles数据返回默认值0。

若使用PMU采集能力,请在程序结束前调用DestroyLoggerDevice()方法,否则可能会出现程序异常等情况。

callstack、enablepmu参数配置规则:

  • 若同一个section中callstack、enablepmu参数都未配置,仅会生成一个接口。
  • 若同一个section中已配置enablepmu参数,未配置callstack参数,则会生成两个接口。一个接口会记录PMU数据,一个接口不会记录PMU数据。为了避免函数同名,业务应用若要调用会记录PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu”内容。(若该section仅配置enablepmu参数,则仍会只生成一个接口,仅采集PMU数据。)
  • 若同一个section中已配置callstack参数,未配置enablepmu参数,则会生成两个接口。一个接口会记录callstack数据,一个接口不会记录callstack数据。为了避免函数同名,业务应用若要调用会记录callstack数据的接口,其对应的section名称要在原来的基础上增加“_callstack”内容。(若该section仅配置callstack参数,则仍会只生成一个接口,仅采集调用栈数据。)
  • 若同一个section中同时配置callstack、enablepmu参数,则会生成四个接口。

    一个接口会同时记录callstack数据和PMU数据,一个接口记录callstack数据不记录PMU数据,一个接口记录PMU数据不记录callstack数据,最后一个接口callstack和PMU数据均不记录。

    为了避免函数同名:

    • 业务应用若要调用会记录callstack数据和PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu_callstack”内容。
    • 业务应用若要调用仅记录callstack数据的接口,其对应的section名称要在原来的基础上增加“_callstack”内容。
    • 业务应用若要调用仅记录PMU数据的接口,其对应的section名称要在原来的基础上增加“_enablepmu”内容。

基于x86服务器提供的高性能程序追踪库工具,以上配置规则不生效。

不同日志量下缓存大小的最佳配置

在CPU核数128核、总内存250G,静止时CPU空载率为99%以上的服务器不同场景下,测得的最佳配置如下:

  • 业务应用启动10线程,每条线程10000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。
  • 业务应用启动10线程,每条线程100000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。
  • 业务应用启动10线程,每条线程1000000条日志,每条日志长度100bytes,推荐缓存大小最佳配置为320KB。

使用示例

执行以下命令,查看生成代码子模块支持的功能信息:

tracelog generator -h

返回信息如下:

NAME
    tracelog generator - Run the command to parse the .ini configuration file and generate the needed header file and metadata file.
USAGE
    tracelog generator
    [-h | --help]
    [-l {0,1,2,3} | --log-level {0,1,2,3}]
    {-i <INI_FILE> | --input <INI_FILE>}
    [-o <OUTPUT_PATH> | --output <OUTPUT_PATH>]
DESCRIPTION
    The generated header file contains the corresponding API. You can use this header file for log development and the metadata file for log parsing.
OPTIONS
    -h, --help
        Get help information and exit.
    -l {0,1,2,3}, --log-level {0,1,2,3}
        Specify the print log level, 0(debug) | 1(info) | 2(warning) | 3(error).Default is 1(info).
    -o, --output
        Generated file directory, which defaults to the current directory. The name of the generated header file is the same as the name of the inputted .ini file.
    -i, --input
        Input .ini file. For details about how to write the .ini file, see the example.ini file in the current directory.