137 lines
5.2 KiB
Markdown
137 lines
5.2 KiB
Markdown
# Common Information
|
||
|
||
AimRT 进程在启动时需要一个配置文件,来定义各个组件的运行时表现。
|
||
|
||
|
||
## Yaml
|
||
|
||
AimRT 采用 Yaml 作为配置文件格式。YAML 是一种人类可读的数据序列化语言,通常用于编写配置文件。关于 Yaml 的语法细节,请参考互联网上的文档或[Yaml 官方网站](https://yaml.org/)。
|
||
|
||
|
||
## 不区分业务开发语言
|
||
|
||
AimRT 的配置文件不区分业务代码的开发语言,无论是 Python 还是 Cpp 都使用同一套配置标准。
|
||
|
||
|
||
## AimRT 框架配置的基本结构
|
||
|
||
AimRT 的配置文件中,在`aimrt`根节点下包含各个基本组件的配置节点,基本书写风格是小写字母+下划线,目前主要有以下这些基本组件可以配置,且所有的组件配置都是可选的:
|
||
|
||
|
||
| 节点 | 作用 | 文档 |
|
||
| ---- | ---- | ---- |
|
||
| configurator | 配置工具的配置 | [configurator](./configurator.md) |
|
||
| plugin | 插件配置 | [plugin](./plugin.md) |
|
||
| main_thread | 主线程配置 | [main_thread](./main_thread.md) |
|
||
| guard_thread | 守护线程配置 | [guard_thread](./guard_thread.md) |
|
||
| executor | 执行器配置 | [executor](./executor.md) |
|
||
| log | 日志配置 | [log](./log.md) |
|
||
| rpc | RPC 配置 | [rpc](./rpc.md) |
|
||
| channel | Channel 配置 | [channel](./channel.md) |
|
||
| module | 模块配置 | [module](./module.md) |
|
||
|
||
|
||
以下是一个简单的示例,先给读者一个感性的印象。关于各个组件的详细配置方法,请参考后续章节:
|
||
```yaml
|
||
aimrt:
|
||
configurator:
|
||
temp_cfg_path: ./cfg/tmp
|
||
plugin:
|
||
plugins:
|
||
- name: xxx_plugin
|
||
path: ./libaimrt_xxx_plugin.so
|
||
main_thread:
|
||
name: main_thread
|
||
guard_thread:
|
||
name: guard_thread
|
||
executor:
|
||
executors:
|
||
- name: work_executor
|
||
type: asio_thread
|
||
log:
|
||
core_lvl: INFO
|
||
backends:
|
||
- type: console
|
||
rpc:
|
||
backends:
|
||
- type: local
|
||
- type: mqtt
|
||
clients_options:
|
||
- func_name: "(.*)"
|
||
enable_backends: [local]
|
||
servers_options:
|
||
- func_name: "(.*)"
|
||
enable_backends: [local]
|
||
channel:
|
||
backends:
|
||
- type: local
|
||
- type: mqtt
|
||
pub_topics_options:
|
||
- topic_name: "(.*)"
|
||
enable_backends: [local]
|
||
sub_topics_options:
|
||
- topic_name: "(.*)"
|
||
enable_backends: [local]
|
||
module:
|
||
pkgs:
|
||
- path: /path/to/libxxx_pkg.so
|
||
modules:
|
||
- name: FooModule
|
||
enable: True
|
||
log_lvl: INFO
|
||
cfg_file_path: /path/to/foo_module_cfg.yaml
|
||
- name: BarModule
|
||
log_lvl: WARN
|
||
```
|
||
|
||
|
||
## 业务配置
|
||
|
||
除了框架的配置,AimRT 还支持用户将业务模块的配置也以 Yaml 的形式写在同一个配置文件中,以模块名称为节点名,示例如下:
|
||
```yaml
|
||
aimrt:
|
||
# ...
|
||
|
||
# Module custom configuration, with module name as node name
|
||
FooModule:
|
||
key_1: val_1
|
||
key_2: val_2
|
||
|
||
BarModule:
|
||
xxx_array:
|
||
- val1
|
||
- val2
|
||
xxx_map:
|
||
key_1: val_1
|
||
key_2: val_2
|
||
|
||
```
|
||
|
||
当然,如果用户不想要把业务模块配置与 AimRT 框架配置写在一个文件中,甚至不想要以 Yaml 格式来写配置,AimRT 也可以支持。具体的使用方式请参考[configurator](./configurator.md)的文档。
|
||
|
||
|
||
## 环境变量替换功能
|
||
|
||
AimRT 的配置文件支持替换环境变量。在解析配置文件前,AimRT 会将配置文件中形如`${XXX_ENV}`的字符串替换为环境变量`XXX_ENV`的值。注意,如果没有此环境变量,则会替换为字符串`null`。
|
||
|
||
|
||
## 配置文件 Dump 功能
|
||
|
||
如果使用者不确定自己的配置是否正确,可以使用 AimRT 的配置 Dump 功能,将 AimRT 解析后的完整配置文件 Dump 下来,看看和开发者自己的预期是否相符。具体可以参考[CPP运行时接口](../interface_cpp/runtime.md)中关于启动参数的章节。
|
||
|
||
|
||
## 线程绑核配置
|
||
|
||
AimRT 配置中很多地方都会有线程绑核的配置,这些配置基本都是一样的,在此处做一个集中说明。一般来说这些配置包含两个选项:
|
||
|
||
| 节点 | 类型 | 是否可选 | 默认值 | 作用 |
|
||
| ---- | ---- | ---- | ---- | ---- |
|
||
| thread_sched_policy | string | 可选 | "" | 线程调度策略 |
|
||
| thread_bind_cpu | unsigned int array | 可选 | [] | 绑核配置 |
|
||
|
||
使用注意点如下:
|
||
- `thread_sched_policy`配置了线程调度策略,通过调用操作系统的 API 来实现。目前仅在 Linux 下支持,在其他操作系统上此配置无效。
|
||
- 在 Linux 下通过调用`pthread_setschedparam`这个 API 来配置。支持的方式包括:`SCHED_OTHER`、`SCHED_FIFO:xx`、`SCHED_RR:xx`。`xx`为该模式下的权重值。详细的解释请参考[pthread_setschedparam官方文档](https://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html)。
|
||
- `thread_bind_cpu`配置了绑核策略,通过调用操作系统的 API 来实现。目前仅在 Linux 下支持,在其他操作系统上此配置无效。
|
||
- 在 Linux 下通过调用`pthread_setaffinity_np`这个 API 来配置,直接在数组中配置 CPU ID 即可。参考[pthread_setaffinity_np官方文档](https://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html)。
|