QNX Neutrino 实时操作系统性能分析

2014-08-07 13:22
微型电脑应用 2014年3期
关键词:信号灯内核线程

李 存

QNX Neutrino 实时操作系统性能分析

李 存

操作系统是实时嵌入式系统的核心,其性能是决定系统实时性的关键因素之一。介绍了微内核实时操作系统–QNX Neutrino, 并以标准检查程序对内核进行性能测试和分析。

实时操作系统;微内核;抢占式调度;标准检查程序;实时性分析

0 引言

QNX Neutrino 是由 QNX 软件系统公司(QSSL)发布的商用实时操作系统。QNX 软件系统公司成立于 1980 年,总部位于加拿大渥太华; 2004 年被哈曼国际工业集团并购;2010 年被黑莓手机制造商 RIM (Research In Motion Limited)并购。QNX 被 RIM 并购后,才让这个在中国认知度并不高的操作系统厂商被大家所熟知。

如今QNX软件系统公司以其先进的中间件、开发工具、操作系统软件和专业服务成为嵌入式技术市场领跑者之一。其合作客户包括通用电气、思科、戴姆勒、洛克希德·马丁和西门子等公司,涉及产品有工业控制系统、医疗器械、车用远程信息处理装置、网络路由器、安全与国防系统,及其他任务或生命关键性的应用。

1 QNX Neutrino 操作系统介绍

QNX Neutrino 操作系统是一种遵从 POSIX(可移植操作系统接口)规范的、内存受保护的、微内核架构的类 Unix实时操作系统,目标市场主要是面向对于可靠性、可扩展性和实时性有很高要求的嵌入式系统,已经是最成功的微内核操作系统之一。

QNX Neutrino 操作系统功能全面、运行稳健,它的模块能灵活增减以满足实时嵌入式系统资源有限的要求。QNX Neutrino 操作系统的微内核设计和模块化架构可帮助客户以极低的成本创建高度优化和可靠的系统,并且完美的支持了从单核到多核的系统移植。QNX Neutrino 操作系统的具体架构如图1所示:

图1 QNX Neutrino 实时操作系统架构

QNX Neutrino 操作系统由微内核、进程管理器和扩展部分(包括服务、应用、驱动程序等)三部分组成。微内核仅实现最基本的功能,如消息传递、线程调度、计时器、同步和信号;进程管理器是QNX操作系统中第一个和唯一一个必须的资源管理器,其在微内核的基础上实现进程创建、进程记账、内存管理、进程环境继承和路径名空间管理;扩展部分是可选的,用户根据具体应用要求进行灵活的选择组合。上述三大部分的关系如图2所示:

图2 QNX Neutrino 操作系统微内核、进程管理器和扩展部分的关系

2 测试平台介绍

本 文 中 所 有 性 能 测 试 都 是 在 ATMEL AT91SAM9G45-EK 标准开发板上完成,使用 QNX Neutrino RTOS v6.5.0 版本操作系统。开发板的主要参数如表1 所示:

表1 ATMEL AT91SAM9G45-EK 开发板主要参数

3 性能测试及分析

本文采用平均法计算性能,以此消除性能测试过程中一些不可控的无关随机系统事件和中断等的影响。从不同的角度对 QNX Neutrino 操作系统性能进行测试,并且列出测试所用的主要函数调用。

3.1 内核调用

用户空间的程序通过调用内核原语接口函数进入内核,相关测试及性能如表2所示:

表2 内核调用测试及性能

在上述测试中,ClockID 函数返回当前线程的时钟标识,getppid 函数返回当前线程的父线程标识。

3.2 上下文切换

在多任务实时操作系统中,上下文切换是一件非常频繁的事件,诸如硬件中断、信号、消息传递、同步都会导致线程重新调度和上下文切换,所以上下文切换的有效性直接影响实时系统的性能。相关测试及性能如表3所示:

表3 上下文切换测试及性能

在上述测试中,sched_yield 函数调用使得当前线程主动释放处理器,进而操作系统选择并运行其他同优先级的线程。在虚切换中,当前线程是系统中运行的唯一线程,所以此时 sched_yield 函数调用实际上并不会引起上下文切换,而是继续运行当前线程。进程间的切换包含地址空间的切换,所以开销会比线程间切换大。

3.3 消息、脉冲

消息传递是QNX微内核提供的核心功能之一。每个系统应用程序,比如文件系统、协议栈、设备驱动,都会使用消息传递接口。消息传递分为阻塞式(同步)和非阻塞式(异步),阻塞式(又名消息)用于不定数据长度的传递,通过MsgSend、MsgReceive、MsgReply 接口实现;非阻塞式(又名脉冲)用于简短的通知传递,只包含4个字节的数据,通过 MsgSendPulse、MsgReceivePulse 接口实现。相关测试及性能如表4所示:

表4 消息传递测试及性能

在上述测试中,一次完整的阻塞式消息传递测试包含2次进程间上下文切换,对于不同长度的数据载荷所消耗的时间是不一样的;线程内脉冲传递,不会引起上下文切换;线程间和进程间脉冲传递都会引起1次上下文切换。

3.4 同步(互斥量、信号灯)

互斥量是一种简单的同步机制,在QNX中有很多系统服务,比如文件系统、网络协议和驱动程序依赖互斥量实现。信号灯是一种灵活的同步机制,它绑定一个非负整数计数器的属性,其值为零时认为信号灯被锁住。相关测试及性能如表5所示:

表5 互斥量、信号灯测试及性能

非阻塞式递减已锁无名信号灯线程内无名信号灯递增、递减线程间无名信号灯递增、递减进程间无名信号灯递增、递减非阻塞式递减已锁有名信号灯线程内有名信号灯递增、递减线程间有名信号灯递增、递减进程间有名信号灯递增、递减pthread_mutex_unlock(&mutex2); pthread_mutex_unlock(&mutex3);线程2:pthread_mutex_lock(&mutex3); pthread_mutex_lock(&mutex2); pthread_mutex_unlock(&mutex3); pthread_mutex_unlock(&mutex1); pthread_mutex_lock(&mutex4); pthread_mutex_lock(&mutex1); pthread_mutex_unlock(&mutex4); pthread_mutex_unlock(&mutex2); sem_trywait()8.623µs sem_post();sem_wait()14.236µs高优先级线程、进程:sem_wait()低优先级线程、进程:sem_post()19.682µs 34.168µs sem_trywait()40.264µs sem_post();sem_wait()83.327µs高优先级线程、进程:sem_wait()低优先级线程、进程:sem_post()81.350µs 92.427µs

在上述测试中,非阻塞式加锁已被锁的互斥量和无竞争的互斥量加锁、解锁并不会引起上下文切换,也不用进入内核空间,直接由处理器支持。为了强制通过内核执行互斥量加锁、解锁操作,使用 pthread_mutexattr_setprotocol()函数设置互斥量的调度协议为保护模式(PTHREAD_PRIO_PROTECT)。在竞争的互斥量加锁、解锁中,需要进入内核执行上下文切换,在执行主循环前线程1 对 mutex4 进行加锁,线程 2 对 mutex1 进行加锁。

信号灯的相关操作都会调用内核函数完成。其中无名信号灯不需要指定名字,但是只能用于父子进程等有关联的进程间或者同一进程中的线程间;有名信号灯需要指定名字,可以用于任何线程间。

3.5 定时器

定时器相关接口在QNX中是由微内核直接提供的,用户可以很高效的使用。相关测试及性能如表6所示:

表6 定时器测试及性能

定时器创建、删除 timer_create(); timer_delete() 31.818µs定时器设置 timer_settime()7.800µs

3.6 信号

信号在操作系统中被用于报告需同步的异常和处理异步的事件通知。相关测试及性能如表7所示:

表7 信号测试及性能

接收信号的相关线程都会预先调用 sigaction()函数关联一个处理函数(这里为一个空函数)到一种特定的信号,线程内信号传递,不会引起上下文切换;线程间和进程间信号传递会引起1次上下文切换。

3.7 线程

线程是进程内的一个控制流,一个进程包含一个或者多个线程。QNX 微内核直接将线程做为一个可调度的最小实体。相关测试及性能如表8所示:

表8 线程操作的测试及性能

在上述测试中,默认方式的线程栈空间为一个虚拟存储页;非懒惰方式的线程栈空间为系统最前面的可用物理存储空间;自定义方式的线程栈空间由用户指定。这里线程的执行体为一个空函数,当执行体返回时,系统隐式调用函数pthead_exit()。

4 总结

QNX Neutrino 操作系统是微秒级硬实时系统的理想基础平台,它提供了硬实时系统所需的一切基本要素(多任务、抢占式调度、微秒级上下文切换......),其微内核架构最大程度的保证了实时系统的稳定性和灵活性。

[1]QNX Neutrino 实时操作系统,www.qnx.com

[2]QNX Neutrino Realtime OS: Kernel Benchmark Methodology, www.qnx.com

[3]侯业勤,张菁,分布式嵌入式实时操作系统 QNX,[M]宇航出版社,1999

QNX Neutrino Performance Analysis

Li Cun
(GE (China)Research and Development Center Co., Ltd., Shanghai 201203, China)

Operation system is the core of real-time embedded system.Its performance is one of the key factors to affect the system real-time capability. This paper introduces the real-time microkernel operation system – QNX Neutrino, assessed its tests performance through benchmark tests and analysis.

Real-Time Operation System; Microkernel; Preemptive Scheduling; Benchmark; Real-Time Capability Analysis

TP311

A

1007-757X(2014)02-0035-03

2014.02.25)

李存(1981-),男,通用电气(上海)研究开发中心有限公司,硕士,研究方向:工业嵌入式系统和工业自动化控制系统的研究开发,上海,201203

猜你喜欢
信号灯内核线程
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
基于C#线程实验探究
活化非遗文化 承启设计内核
基于国产化环境的线程池模型研究与实现
交通信号灯
Linux内核mmap保护机制研究
信号灯为什么选这三个颜色?
浅谈linux多线程协作
安装在路面的交通信号灯