系统与设计
的意见

得到一个完整的汽车软件

工具如何帮助有效地处理复杂的汽车软件架构。

受欢迎程度

汽车行业正在经历一次重大的中断,通常称为转向自动化,连接,电气,和共享车辆(ace [1])。自然地,这些变化也产生重大影响的要求这些新车的硬,软件架构:

  • 面向服务的软件架构由多个应用程序使用通用计算平台上运行,而不是数以百计的分布式ecu
  • 引入新的中间件),如第二个版本的机器人操作系统(ROS 2[2])或自适应AUTOSAR (AA [3])
  • 从C, c++的转变在软件开发(例如ROS 2和AA是基于c++ 14)
  • 数据驱动算法需要从静态转向动态调度
  • 更广泛使用异构计算平台(例如基于现场可编程门阵列(fpga),图形处理单元(gpu),神经网络(NN)加速器,等等)和相应的编程语言(HLS, CUDA OpenCL, SYCL,卤化物,等等)。

虽然相关的需求和挑战变得更加清晰,工具和方法来解决这些问题有效和可伸缩的方式仍然缺乏。

源代码静态和动态分析
目前,代码分析工具大致可以分为两类:

  • 静态分析:静态分析,典型的应用程序的源或目标代码直接分析(不执行)。取决于所使用的工具,结果分析可以是相当先进的(特别是当正式的方法可以用来证明某些属性的代码),但通常只有一个子集的代码可以完全静态分析。对于无法分析静态的代码部分,保守的方法对潜在危险的严重程度进行分类会导致许多假阳性。静态分析工具例如可以用来确保代码遵循一定的标准,例如汽车行业定义的软件可靠性协会(MISRA [4])。
  • 动态分析:动态分析,应用程序必须执行的方式代表了感兴趣的场景(例如,通过提供相应的输入)。因此,获得的结果并不一定代表应用程序,但可以选择场景中感兴趣的高度相关。推导(正式)保证基于动态分析通常是困难的。然而,动态分析可以提供一个良好的应用程序的执行行为的理解和常用的如在性能优化。

静态和动态分析工具可以帮助分析和调试应用程序,他们只提供有限的软件架构,允许有限视角数据流和依赖关系。为了克服这些限制,Silexica结合基于十年的编译器的静态和动态分析研究。此外,语义分析用于获得一个完整的软件体系结构,包括逻辑软件体系结构和动态执行的行为。这种分析可以用来防止建筑侵蚀并提供可行的见解来优化软件体系结构和实现。

汽车用例
这个底层核心技术可用于几个用例直接好处为软件架构师和开发人员:

  • 提供深度应用见解multi-binary防止软件架构流失和多线程应用程序:Silexica编程工具(基金)可视化线程家谱和并发性、通信、同步和数据依赖关系,提供一个活的体系结构概述从源代码,可以设想架构的一致性检查,防止软件架构侵蚀。也可以广泛用于协作、新员工培训,和文档。
  • 跨应用程序识别数据竞争和理解沟通和内存瓶颈。共享内存分析(目前为POSIX共享内存)让你知道如何应用程序线程之间的通信和与其他应用程序。基金显示所有访问的变量,包括其子对象即使通过指针访问数组和结构体。这个体系结构概述基于实际的源代码可用于功能调试和代码重构。此外,保护分析确定失踪inter-thread和进程间共享内存保护(信号量,互斥锁),可能会导致数据损坏。这不仅使线程之间的数据竞争检测,而且在单独的流程和应用程序之间。
  • 优化硬件的软件分发计算块异构多核系统上通过执行快速“假设”分析可视化代码执行。优化是由性能、权力和内存需求给定cpu、dsp、fpga中描述一个标准化的硬件描述格式(SHIM2[5])和新的创新的仿真功能。这两个动态分布以及静态映射优化支持。
  • 可行的见解来提高软件架构和性能。节省开发时间通过自动识别代码的优化机会。基金为提高性能提供指导帮助代码重构。例子包括数据结构、同步和循环优化。此外,技术提供自动并行检测以及形成阻塞条件,潜在的并行性。不同级别的并行支持包括任务、管道和数据级并行性。

基金已经支持上述用例POSIX环境。我们现在正在与未来的集成中间件),如自适应Autosar或ROS 2,重写的ROS,使生产环境实时系统和嵌入式平台。也有可用的ROS 2叉如顶点。操作系统[6],ROS 2 API-compatible分布,旨在对安全性要求苛刻的应用程序。它目前正在根据汽车功能安全标准ISO 26262认证作为一个安全元素的上下文(SEooC) ASIL D。

ROS集成
ROS(无论是在版本1和2)已经存在一个广泛的工具,如Rviz开源生态系统,RQT图,露台,帮助发展中自主系统等,但他们不会帮助解决上述用例。ROS基金集成(目前正在开发)将允许基金的平稳集成到常规ROS开发流(例如基于上述工具)。为此,我们正在扩大基金:

  • 完整的ROS 1 / ROS 2构建系统集成:
    • 随需应变的分析各个模块
    • 支持并行多个模块的分析
  • 完整的CI集成支持允许自动化回归测试,等等。
  • 根源分析的自动化应用程序变化完全向后追溯回到最初的源代码行。这有助于理解为什么不同的运行相同的软件行为不同。原因包括方差不同的执行路径由于不同输入数据或状态,不同的执行长度由于执行行为如递归算法或差异由于不同的动态调度排列。

下面的视频展示了一个先看看如何集成ROS的基金可能看起来像:

  1. 运行您的ROS的场景中,在这里:
  • Autoware [7] v1.8(补丁增加稳定)
  • 基于“本森山”数据集
  • 孤立的GPS测试场景(运行时:~ 10秒)
  • GPS速度传感器(由ROSbag): 25 Hz
  • 环境:风俗Nvidia码头工人容器(包括完整的Autoware堆栈和基金)
  1. 得到整个系统的概述与基金系统概述图表,融合操作系统配置信息(数量的上下文切换,内核/进程运行时,空闲时间,等等)与ROS-specific信息(如活动模块/话题,依赖,等等)。
  2. 为深入的基金分析选择一个模块(这里Autoware“GPS”模块:nmea2tfpose)
  3. 调查线程、函数和变量的依赖关系在软件架构概述
  4. 排序结果显示大量的同步调用(尤其是考虑到所需的模块频率(25 Hz)和场景运行时(10))
  5. 直接跳转到源代码中找到问题的根源为同步调用,代之以一个代码段,应该减少同步调用
  6. 重新运行场景将显著减少同步调用

而场景非常简单,该代码更改微不足道的[8],ROS的例子说明了游戏改变潜在基金未来软件开发集成。这同样适用于更大的开发团队与多个内部ROS模块和软件体系结构过于复杂,掌握在市场上使用目前可用的工具。

引用
[1]汽车研究中心(https://www.cargroup.org)

[2]机器人操作系统2 (https://index.ros.org/doc/ros2)

[3]AUTOSAR自适应(https://www.autosar.org/standards/adaptive-platform)

[4]汽车行业软件可靠性协会(https://misra.org.uk)

[5]多核协会SHIM2 (https://multicore-association.org/workgroup/shim.php)

[6]顶点。由Apex.AI操作系统:https://www.apex.ai/products

[7]Autoware (https://github.com/CPFL/Autowarev1.8)

[8]它甚至可以认为,拟议的改变是不可移植的,ros的使用::率更加合适,尽管机制不断更新率稳定也带来一定的成本



留下一个回复


(注意:这个名字会显示公开)

Baidu