---
title: 生成代码子模块功能说明
description: "支持对配置文件进行解析生成对应的头文件和metadata文件，将生成的头文件添加至业务代码中，可使用高性能程序追踪库进行业务流程追踪。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/development/tracer/KunpengDevKitCli_0116.html
sourcePath: /source/zh/kunpengdevps/development/tracer/KunpengDevKitCli_0116.html
indexId: 2f163e608e0a36f269941be0bddc71ff9dc85923d6b12d7dc9318d0fcd8e0c2369
---
# 生成代码子模块功能说明

支持对配置文件进行解析生成对应的头文件和metadata文件，将生成的头文件添加至业务代码中，可使用高性能程序追踪库进行业务流程追踪。

#### 命令功能

支持对用户定义的.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配置文件，.ini配置文件说明可参考.ini配置文件说明。 |
| \-o/\-\-output | \- | 可选参数，指定生成头文件和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配置文件里包含以下两部分内容：

- 全局配置项。

  - 缓存大小配置，不配置默认为5120KB。
  - 日志路径和日志文件名配置，不配置默认为“/var/log/trace.log”。
- 包含一个或多个section，每个section有以下两部分内容（最多支持16个section，每个section最多支持16个参数）。

  - section名称，以“[section名称]”的形式呈现，例如：[normal_example]。
  - 参数，可指定一个或多个参数。普通日志参数以“参数名=参数类型”的形式呈现，例如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核、总内存为250GB且静止时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.
```
