Common Information

AimRT 进程在启动时需要一个配置文件,来定义各个组件的运行时表现。

Yaml

AimRT 采用 Yaml 作为配置文件格式。YAML 是一种人类可读的数据序列化语言,通常用于编写配置文件。关于 Yaml 的语法细节,请参考互联网上的文档或Yaml 官方网站

不区分业务开发语言

AimRT 的配置文件不区分业务代码的开发语言,无论是 Python 还是 Cpp 都使用同一套配置标准。

AimRT 框架配置的基本结构

AimRT 的配置文件中,在aimrt根节点下包含各个基本组件的配置节点,基本书写风格是小写字母+下划线,目前主要有以下这些基本组件可以配置,且所有的组件配置都是可选的:

节点

作用

文档

configurator

配置工具的配置

configurator

plugin

插件配置

plugin

main_thread

主线程配置

main_thread

guard_thread

守护线程配置

guard_thread

executor

执行器配置

executor

log

日志配置

log

rpc

RPC 配置

rpc

channel

Channel 配置

channel

module

模块配置

module

以下是一个简单的示例,先给读者一个感性的印象。关于各个组件的详细配置方法,请参考后续章节:

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 的形式写在同一个配置文件中,以模块名称为节点名,示例如下:

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的文档。

环境变量替换功能

AimRT 的配置文件支持替换环境变量。在解析配置文件前,AimRT 会将配置文件中形如${XXX_ENV}的字符串替换为环境变量XXX_ENV的值。注意,如果没有此环境变量,则会替换为字符串null

配置文件 Dump 功能

如果使用者不确定自己的配置是否正确,可以使用 AimRT 的配置 Dump 功能,将 AimRT 解析后的完整配置文件 Dump 下来,看看和开发者自己的预期是否相符。具体可以参考CPP运行时接口中关于启动参数的章节。

线程绑核配置

AimRT 配置中很多地方都会有线程绑核的配置,这些配置基本都是一样的,在此处做一个集中说明。一般来说这些配置包含两个选项:

节点

类型

是否可选

默认值

作用

thread_sched_policy

string

可选

“”

线程调度策略

thread_bind_cpu

unsigned int array

可选

[]

绑核配置

使用注意点如下:

  • thread_sched_policy配置了线程调度策略,通过调用操作系统的 API 来实现。目前仅在 Linux 下支持,在其他操作系统上此配置无效。

    • 在 Linux 下通过调用pthread_setschedparam这个 API 来配置。支持的方式包括:SCHED_OTHERSCHED_FIFO:xxSCHED_RR:xxxx为该模式下的权重值。详细的解释请参考pthread_setschedparam官方文档

  • thread_bind_cpu配置了绑核策略,通过调用操作系统的 API 来实现。目前仅在 Linux 下支持,在其他操作系统上此配置无效。