赞
踩
Roudi作为中间件守护进程,主要职责包括:
Chunk:在 Iceoryx 中,chunk 是数据交换的基本单位,当一个进程或线程需要发送数据时,会从内存池中请求一个 chunk,将数据写入其中,然后将 chunk 发送到目标进程或线程。接收方收到 chunk 后,可以直接从中读取数据。
Block:block 是 Iceoryx 中用于管理内存的基本单位。每个 block 都有一个固定的大小,可以包含并管理一个或多个 chunk。当请求一个新的 chunk 时,实际上是从一个 block 中分配的。
Segment:segment 是一段连续的内存区域,由多个 block 组成。在 Iceoryx 中,所有的数据交换都发生在同一个 segment 中,这样可以保证数据的连续性,提高数据传输的效率。
文档参考这里
.toml格式的配置,如果使用需要设置CMake选项-DTOML_CONFIG=ON
。
可以通过命令行参数指定配置文件:./iox-roudi -c /absolute/path/to/config/file.toml
格式如下
[general]
version = 1
[[segment]]
# 以下可以是多个
[[segment.mempool]]
size = 512 # size为chunk的大小
count = 10 # size的个数
如果没有配置,则设置默认配置
/// this is the default memory pool configuration if no one is provided by the user
MePooConfig& MePooConfig::setDefaults() noexcept {
m_mempoolConfig.push_back({128, 10000});
m_mempoolConfig.push_back({1024, 5000});
m_mempoolConfig.push_back({1024 * 16, 1000});
m_mempoolConfig.push_back({1024 * 128, 200});
m_mempoolConfig.push_back({1024 * 512, 50});
m_mempoolConfig.push_back({1024 * 1024, 30});
m_mempoolConfig.push_back({1024 * 1024 * 4, 10});
return *this;
}
iceoryx使用一个management的segment用于管理,若个user segment用于event通信。这些segment被划分为mempools,mempool包含若干chunks,可以参考上面的配置文件。chunk就是iceoryx中内存分配的基本单元。这部分内容可以参考文档
Roudi中设计到的主要有以下类:
Roudi中申请的共享内存分布,以一个provider为例:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。