微内核:除调度、进程管理、中断及操作系统核心的功能外,其余部分都处于用户态,包括驱动、协议栈、文件系统及功能模块等。
模块化:操作系统的各个功能单元都模块化设计,内存保护,并且相互隔离,可按照需要动态加载或卸载,基于消息机制通信,按照Client-Server的架构设计。
弱耦合:模块与模块之间互不影响,都在独立的虚拟地址空间运行。
分布式:局域网内的QNX系统对于用户角度可以认为是一台QNX系统,资源可以复用。
QNX是类UNIX操作系统
QNX是功能安全和信息安全的操作系统
QNX其他特性
2.QNXIPC通讯机制
QNX除了支持Native的IPC机制如Massagepassing、Signal等,同时还提供POSIX标准的IPC例如MessageQ、Piple、SharedMemory等IPC通讯方式,多种IPC方式供用户在不同的应用场景下进行选择。
3.QNX的IDE集成开发环境
03
QNX在自动辅助驾驶领域的应用
由于QNX实时性、确定性行为和功能安全的特性,契合自动辅助驾驶对功能安全ISO26262ASILD的安全等级要求,因此由于国内外主机厂项目的需求,QNX被广泛的应用于自动辅助驾驶领域,作为基础软件承载上层的各种实时和高可靠性应用。由于在自动辅助驾驶领域,芯片和基础软件越来越成为一个整体方案,因此QNX也被包含在主流的高性能自动辅助驾驶芯片的整体基础软件平台方案中,作为关键的一部分提供给最终用户。
英伟达与黑莓QNX的合作
国内自动辅助驾驶芯片公司与黑莓QNX的合作
近年来高性能的国产芯片层出不穷,在自动辅助驾驶领域,也有越来越多有潜力的国产公司展露头角,黑莓QNX目前已经完成适配黑芝麻A1000和地平线J5等芯片,由芯片公司提供一站式的整体解决方案。值得一提的是,后续还有多家重视功能安全的顶级国产大算力高性能自动辅助驾驶芯片合作,将于明年正式发布。
04
中国自动辅助驾驶领域基础平台软件所遇到的问题
一般主机厂也有平台组,负责部分的驱动及驱动以上的中间件的整合,系统组负责系统设计统筹,功能安全团队负责整体的功能安全,而算法团队负责算法应用的开发和实现,那么问题就来了,除纯算法团队外,一般国外的主机厂都会有一个成建制的叫算法嵌入式工程实现的团队,负责算法在非工控机的嵌入式环境和实时操作系统的优化实现落地,这样的团队即要懂一点算法架构,又要懂嵌入式软件的开发和硬件特性,又要对操作系统有足够的理解。
05
QNX算法移植以及性能优化举例
算法移植
自动辅助驾驶以开源的算法居多,由于QNX符合POSIXPSE54标准,API兼容基本一致,因此各类开源算法可以很方便的移植到QNX的平台上,使用QNX的工具链进行编译并运行,但是虽然API是一致的,但由于实时操作系统的特性,表现的行为会有所差异,需要对系统进行优化调整。
1.IPC优化
2.编译选项优化
3.驱动级别优化
如网络/存储设备驱动,根据以往的经验,大部分的性能问题的瓶颈在设备驱动这层。特别是新的硬件、新的驱动,要注意根据QNX系统服务层做好适配,驱动的好坏,往往是除硬件本身之外最主要的性能影响因素。我们遇到非常多的来自驱动层面的空等,忙等,最终导致系统机能的冗余浪费。
4.网络协议栈优化
5.系统API优化
如memoryallocation,memorycopy等,QNX提供jemalloc根据实际应用场景提供额外内存泄漏手段,提供更多的功能,jemalloc比default的malloc效率更高,特别是对于大量线程高并发调用的场景。
6.用户接口优化
7.QNX提供MomenticsIDE环境对算法进行性能分析
8.QNX提供了onboarddebug也支持应用程序调用栈的实时保存及相应的GDB,在调查一些忙等的现场会有很大的帮助。
最后总结一下,即便作为ISO26262ASIL-D安全认证的硬实时性操作系统,QNX在系统性能上也并没有落后宏内核系统。只要合理地使用和优化,它的性能表现同样非常优秀,同时占用更低系统资源。QNX有着丰富的算法移植和优化经验能给到用户,同时QNX提供一系列的手段和工具去定位算法性能的瓶颈。