汽车软件开发,一切尽在掌握

针对可优化、可扩展及可维护型软件架构的可操作见解

 

行业变革

汽车行业当前正处于一个重要的变革阶段,这个阶段的特征常被总结为自动化、链接化、电动化以及共享化(ACES:Automated, Connected, Electric, and Shared)。这些特征自然会对新型汽车的硬件和软件架构产生重大影响:

  • 服务型的软件架构是由多个应用程序集成于一个通用计算平台上运行的,数百个分布式ECU将会被取代
  • 全新的中间件(middlewares)概念将被引入,例如机器人操作系统的第二版(ROS 2 [2])或自适应AUTOSAR(AA [3])
  • 软件开发会从C转变到C ++(例如,ROS 2和AA都将基于C ++ 14)
  • 数据驱动算法需要从静态调度转变为动态调度
  • 异构计算平台的应用范围会日趋广泛。例如基于现场可编程门阵列(FPGA)、图形处理单元(GPU),神经网络(NN)加速器,再比如相应的编程语言(HLS,CUDA,OpenCL,SYCL,Halide)也会更加常见。

尽管对软硬件提出的要求和挑战命题已经变得明晰,但我们仍然缺乏有效且可扩展地工具和方法来解决这些问题。

动态和静态源代码相结合的分析

当前的代码分析工具大致可分为两类:

  • 静态分析: 对于静态分析,通常是对应用程序的源代码或目标代码仅做直接分析(却不执行)。根据所使用的工具,通过所使用的工具得到的结果分析可以相当先进(特别是当正式方法可用于证明代码的某些属性时),不过这个方法的局限是通常只能代码的一个子集做静态分析。对于无法进行静态分析的代码部分,只能采用保守方法对潜在危险的严重程度进行分类,这可能会导致许多误报。静态分析工具可以用于确保代码遵守某些标准,例如,由汽车工业软件可靠性协会(MISRA [4])定义。
  • 动态分析: 对于动态分析,该应用程序必须以表示感兴趣的场景的方式执行(例如,通过提供相应的输入)。所获得的结果虽然不一定代表应用程序,但与所选择的感兴趣的场景高度相关。基于动态分析通常很难得出(正式)保证。但是它可以很好地理解应用程序的执行行为,因此常常被用于性能优化。

静态和动态分析工具对应用程序的分析和调试有所帮助,不过它们对软件体系结构提供的概述有限,对数据流和依赖性的视图也相对有限。为了克服这些限制,Silexica基于十余年的编译器研究经验,独特地结合了的静态和动态分析。此外,语义分析用于导出包含逻辑软件体系结构和动态执行行为,保证软件体系结构视图的完整性。此分析可用于防止体系结构侵蚀,并提供可操作的见解以优化软件体系结构和实现。

汽车用户案例

这种底层核心技术适用范围广泛,软件架构师和开发人员可因此享受诸多益处:

  • 对多二进制和多线程应用程序的提供深入应用程序见解,以防止软件架构侵蚀:Silexica编程工具(SLX)将线程族谱可视化,通过并发、通信、同步和数据依赖性,对源代码提供实时架构概述,可以检查是否与预想的架构一致,以防止软件架构侵蚀。它还可以广泛用于协作、用户引导和文档编制。
  • 识别跨应用程序的数据争用,了解通信和内存瓶颈。SLX共享内存分析(目前用于POSIX共享内存)使您了解应用程序如何在线程之间以及与其他应用程序之间的通信状态。 SLX显示所有对变量的访问,包括数组和结构的子对象,甚至包括通过指针的访问。基于实际源代码的这种架构概述可用于功能调试和代码重构。我们的保护分析功能是业界首创的,其功能可识别可能缺少线程间缺失和进程间共享内存保护(信号量,互斥量),避免数据损坏。这不仅可以检测线程之间的数据争用,还可以检测单独的进程和应用程序之间的数据争用。
  •  通过快速执行“what-if”分析对代码执行实现可视化,优化异构多核系统上硬件计算模块的软件分发。性能优化功能全面考虑到了标准化硬件描述格式(SHIM2 [5])中描述的CPU,DSP,FPGA和新的创新仿真功能对性能、功耗和内存的要求。支持动态分发和静态映射优化。
  • .对改进软件架构和性能提供可操作见解。自动识别代码中的优化机会,节省开发时间。 SLX提供指导,帮助代码重构,充分提高性能。示例包括数据结构、同步和循环优化。此外,SLX技术还提供自动并行检测以及针对潜在并行性的精确阻塞条件。支持不同级别(任务、管道和数据级并行性等)的并行性。

SLX支持前文提到的POSIX环境。我们团队正在努力实现与未来的中间件的集成,例如Adaptive Autosar或ROS 2,重写ROS以实现实时系统和嵌入式平台中的生产环境。例如Apex.OS [6]等ROS 2的复刻也可被提供,这是一种针对安全关键应用的兼容ROS 2 API的分布。目前,它作为独立安全单元(SEooC)通过了汽车功能安全标准ISO 26262的ASIL D(Automotive Safety Integration Level:汽车安全完整性等级,D为最高级别,译者注)的认证。

ROS集成

SLX:对于ROS(版本一和二),已经存在广泛的开源生态系统工具,如Rviz、RQT图、Gazebo等,有助于自动系统的开发,但它们无法解决刚才提到的用例所遇到的问题。ROS的SLX集成(目前正在开发中)将允许SLX无缝集成到常规ROS开发流程中(比如通过刚才提到的工具)。 为此,我们目前正在对SLX进行扩展:

  • 完整的ROS 1 / ROS 2构建系统集成:
    • 单个模块的按需分析
    • 支持多个模块的并行分析
  • 支持完整的CI集成,允许自动回归测试等。
  • 通过全向后可追溯性回到原始源代码行,自动对应用程序可变性的进行根本原因分析。这有助于理解为什么同一软件产生不同的运行行为。 其原因包括由于不同的输入数据或状态而导致的不同执行路径的变化,或者不同的执行长度造成,或者由于不同的动态调度排列导致的递归算法或执行行为的差异等。

下面的视频向我们展示了ROS是如何首先集成到SLX中的:

1. 运行您的ROS场景,在这里:

  • Autoware [7] v1.8(修补增加稳定性)
  • 基于”Moriyama”数据集
  • 单独的GPS测试场景(运行时间:~10秒)
  • GPS传感器的速率(由ROSbag提供):25 Hz
  • 环境:自定义Nvidia Docker容器(包括完整的Autoware堆栈和SLX)

2. 使用SLX系统概述图表总览整个系统,该图表涵盖了操作系统概要信息(上下文切换次数、内核/进程运行时间、空闲时间等)与ROS特定信息(例如活动模块/主题,依赖性等)。

3. 选择一个模块进行SLX深入分析(此处为Autoware“GPS”模块:nmea2tfpose)

4. 调查线程、函数和变量依赖关系,以了解软件体系结构

5. 对结果进行排序会显示大量的同步调用,特别是给定所需的模块频率(25 Hz)和场景运行时间(10 秒)

6. 直接跳转到源代码以查找同步调用的根本原因,并将其替换为应减少同步调用的代码段

7. 重新运行场景会看到同步调用显著减少

尽管场景非常简单,所建议代码的变化也很少[8],但这个例子却能充分证明ROS SLX集成对于未来软件开发可能带来关键性变化的巨大潜力。 尤其是对于大型开发团队来说尤其重要,因为他们往往对于拥有多个内部ROS模块,软件架构也因其复杂性而无法使用市场上现有的工具。

如果您的团队对我们的产品感兴趣,欢迎与我们联系,跟我们交流您的需求或者遇到的挑战。 我们也非常乐意为您提供产品(包括测试版)演示、人员培训、工程支持,以帮助您尽快实现开发流程的紧密集成。 欢迎发邮件max@silexica.com直接跟我联系。

 

[1] Center for Automotive Research (https://www.cargroup.org)

[2] Robot Operating System 2 (https://index.ros.org/doc/ros2)

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

[4] Motor industry software reliability association (https://misra.org.uk)

[5] Multicore Association SHIM2 (https://multicore-association.org/workgroup/shim.php)

[6] Apex.OS by Apex.AI: https://www.apex.ai/products

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

[8] 所提建议甚至可能是不可移植的,所以使用ros :: Rate也许更为合适,当然保持更新速率稳定,机制也会产生一定的成本。

 

Maximilian Odendahl, co-founder and CEO of Silexica
MAXIMILIAN ODENDAHL

Maximilian致力于实现下一代计算的普及化,以实现未来的智能电子产品。 他是Silexica的CEO及联合创始人,自从2014年建立公司,他已成为异构计算软件设计自动化的全球领导者。Silexica现在拥有一支由50名编译、软件、硬件和AI专家组成的团队,总部设在德国,日本和美国均设有分公司。

Max于2010年获得了亚琛工业大学的计算机工程学位,曾担任硅系统软件(Software for Systems on Silicon )的首席工程师,并领导15名研究助理。 他在国际计算机会议和期刊上已发表了20余篇学术文章。

发表评论

电子邮件地址不会被公开。 必填项已用*标注