cyclonedds与shm

执行步骤

1、sudo apt install cmake libacl1-dev libncurses5-dev pkg-config maven

2、下载iceoryx

git clone https://github.com/eclipse-iceoryx/iceoryx.git -b release_2.0
cd iceoryx
cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_SHARED_LIBS=ON -Hiceoryx_meta

cmake --build build --config Release --target install

3、下载cyclonedds

git clone https://github.com/eclipse-cyclonedds/cyclonedds.git
cd cyclonedds
cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DBUILD_EXAMPLES=On -DCMAKE_PREFIX_PATH=~/iceoryx/install/
cmake --build build --config Release --target install

4、共享内存的配置和通信中间件的切换

共享内存服务的性能在很大程度上取决于其性能 它的配置与要求它支持的用例相匹配。通过配置 正确共享内存,可以大幅提高性能。

冰羚的记忆被布置为固定大小的片段的数量,这些片段是 冰羚羊的记忆池。当订阅者从 iceoryx 请求内存块时, 适合所需尺寸(并且可用)的最小块提供给 池中的订阅者。如果找不到满足这些要求的块, 请求块的发布者给出错误并中止进程。

默认配置具有不同数量和大小的块,最大可达 4MiB。冰羚羊 未提供合适的配置时回退到此配置 文件,或者在默认位置找不到。

下面是一个内存池为 2^15 的 iceoryx 配置文件的示例 块,可以存储 16384 字节的数据类型(+64 字节标头 = 16448 字节块):

[general]
version = 1

[[segment]]

[[segment.mempool]]
size = 16448
count = 32768

将此文件另存为主目录中的 iox_config.toml

Cyclone DDS 也需要正确配置,以允许它使用共享内存交换。

export CYCLONEDDS_URI=path/cyclonedds.xml

<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/iceoryx/etc/cyclonedds.xsd">
    <Domain id="any">
        <SharedMemory>
            <Enable>true</Enable>
            <LogLevel>info</LogLevel>
        </SharedMemory>
    </Domain>
</CycloneDDS>
  • 将 Tracing::Category 设置为 shm 会显示与共享内存相关的 Cyclone DDS 日志,而 SharedMemory::LogLevel 决定 iceoryx 显示的日志级别:
<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/iceoryx/etc/cyclonedds.xsd">
    <Domain id="any">
        <Tracing>
            <Category>shm</Category>
            <OutputFile>stdout</OutputFile>
        </Tracing>
        <SharedMemory>
            <Enable>true</Enable>
            <LogLevel>info</LogLevel>
        </SharedMemory>
    </Domain>
</CycloneDDS>

5、示例使用

  • 打开一个新终端,使用RouDi
~/iceoryx/build/iox-roudi -c iox_config.toml
  • 打开一个新终端,运行发布服务器。
export LD_LIBRARY_PATH=~/iceoryx/install/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export CYCLONEDDS_URI=file://cyclonedds.xml
~/cyclonedds/build/bin/ShmThroughputPublisher 16384 0 1 10 "Throughput example"
  • 打开一个新终端,运行订阅者。
export LD_LIBRARY_PATH=~/iceoryx/install/lib/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
export CYCLONEDDS_URI=file://cyclonedds.xml
~/cyclonedds/build/bin/ShmThroughputSubscriber 10 0 "Throughput example" 16384

相对性能取决于许多因素,例如:

  • 邮件大小
  • Iceoryx 内存池配置
  • 进行的其他交换次数
  • 等等

因此,个别结果可能有所不同

6、共享内存的限制

由于数据在共享内存上交换的方式,有一些 需要限制可以交换的数据类型,并需要交付以确保其正确性功能。
  • 固定大小的数据类型:

要交换的数据类型需要具有固定大小。这排除了 在数据类型的任何级别使用字符串和序列。这并不能阻止 数组的使用,因为它们的大小在编译时是固定的。如果这些类型中的任何一种 在生成数据类型的 IDL 代码中遇到成员变量, 共享内存交换已禁用。

此限制的可能解决方法是使用固定大小的字符数组 而不是字符串(以及代替序列的其他类型的数组),并接受 开销。

  • 数据交换:

在这里插入图片描述

  • 进一步的限制是每个进程的最大订阅数 Iceoryx服务是127。

7、iceoryx内部事件

要了解Eclipse iceoryx服务的内部事件,请点击此处 是来自Iceoryx的有用工具,称为Iceoryx Introspection

~/iceoryx/build/iox-introspection-client --all
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要对shm波形进行debug,您可以使用以下方法之一来打开相应的波形数据库: 1. 如果shm波形是通过Novas生成的FSDB格式,您可以使用nwave工具来打开。您可以使用以下命令来打开FSDB数据库: ``` $fsdbDumpfile("shm.fsdb"); // 打开FSDB数据库 $fsdbDumpvars(0, top.shm); // 设置scope为top.shm, 深度为0 ``` 2. 如果shm波形是通过Synopsys生成的VPD格式,您可以使用dve工具来打开。您可以使用以下命令来打开VPD数据库: ``` $vcdplusfile("shm.vpd"); // 打开VPD数据库 $vcdpluson(1, top.shm); // 设置scope为top.shm, 深度为1 ``` 3. 如果shm波形是通过其他方式生成的VCD格式,您可以使用相应的调试工具来打开。您可以使用以下命令来打开VCD数据库: ``` $dumpfile("shm.vcd"); // 打开VCD数据库 $dumpvars(1, top.shm); // 设置scope为top.shm, 深度为1 ``` 请注意,以上方法中的"top.shm"是一个示例,您需要将其替换为您实际的shm波形的作用域名称。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [处女项目后关于IC验证经验的总结](https://blog.csdn.net/benqiangchan/article/details/11733485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏马潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值