采用PTHREADS的Linux多线程
Pthreads是由IEEE规划的可移植操作系统接口(POSIX)创建的,目的是为了解决Unix中存在的高性能、多线程问题,之后被Linux用在最早的版本中,用于为企业实施可移植Unix,目前用于嵌入式应用中。
创建pthreads模型是为了解决原始Unix Fork/Join模型创建Unix"子"进程时出现的问题。由于该模型涉及到创建(还可能涉及删除)整个受内存保护的环境及执行模式,因此Unix进程模型非常庞大。需要在Unix下采用适用于多线程的较轻型模型,因此pthreads应运而生。
但Unix(也包括Linux)模型是专为将内核与用户空间应用完全分离而设计的,其优势之一在于提供的保护、安全性和可靠性远胜于其他实施方案(包括过去10几年间使用的RTOS)。实质上,这意味着Linux用户空间中的每个pthread都会由Linux内核线程表示,因此,全部或大部分Linux系统调用(特别是设备驱动器)均可通过用户空间进行访问。但是,由于OEM制造的产品并不具备GPL,因此用户空间中实际存储了所有嵌入式Linux实时应用。因此,在每种情况下,使用pthreads都涉及到调用Linux内核,从而为本可以在本地实施的应用带来了额外的系统开销。
但请您稍稍考虑一下。采用上文提到的Linux实时扩展怎么样?是的,PREEMPT_RT可以解决Linux内核中存在的许多关于响应性的问题,但不能真正解决多线程问题。实施用户空间 Linux可解决设备驱动器/中断性能问题,但并不能真正解决多线程问题。Linux实时容器可解决部分问题,但实时容器只是一种基于标准Linux的用户空间Linux可视化技术,并不能真正解决根本的多线程问题。
轻型线程(LWT)--复杂Linux应用的真正解决方案
之前针对Linux提出了多种轻型线程模型的建议,但没有一种模型能够真正解决问题。原因何在?因为大多数模型的功能都不是很强大。涉及复杂多线程应用的下一代Linux解决方案真正需要的是适用于用户空间Linux应用的全新Linux模型。下文概括介绍了这种名为Linux轻型线程(LWT)的解决方案。将高性能、低系统开销、多线程调度器植入Linux用户空间,来代替单独的pthread.原因何在?
●Pthread系统开销
●进程和pthreads是Linux了解的唯一调度实体。
●LWT pthread只是一个Linux编码执行背景,可用于永久运行pthread.由于用户空间调度器始终保持控制,因此pthread绝不会被挂起,省电模式除外。这种情况不在本文的讨论范围。
该用户空间调度器的运行和操作方式与某些传统RTOS高性能、低延迟实施完全相同,但不会涉及到Linux内核。
实施过程利用新用户空间Linux实施过程来直接访问硬件。同样也不涉及Linux内核。
上述LWT解决方案可在任何Linux实时应用中实现动态性能的提升。Enea已设计出上述LWT的一些原型,事实证明,与Linux pthreads在调度器系统开销、特别是上下文切换和线程间消息发送/通信延迟方面的性能相比,LWT性能可提高10倍。
但是除了调度性能和线程间通信功能之外,LWT解决方案还应带来什么?LWT概念除了在性能方面胜过Linux pthreads之外,还有更多优势。解决方案稳健性的概念如何?与历史悠久的RTOS实时解决方案一样,LWT也需要具有以下额外Linux特性:
●决定性调度
●调度系统开销低--上下文切换成本低
●线程间信号系统开销低
●线程创建成本低
多核设备中Linux轻型线程模型的结构图
LWT实施方案的结构图如下。涉及整个共享内存空间的Linux进程可能跨多核设备的多个内核。为了达到最高效率,LWT模型需要将Linux进程中的单个pthread锁定至某一个内核,但并不特别要求这样做。LWT锁定至pthread之后,便可迁移到Linux SMP需要的任何内核中。
图1:多核设备中Linux轻型线程模型的结构图
结论
高效轻型线程(LWT)将成为下一个Linux实时性能和行为问题。需要强调的是,并非所有实时应用都需要使用功能强大的类似LWT的解决方案。但是一些实时应用,尤其是电信/网络中的应用以及无线接入网、移动基础设施核心/边缘中的那些需要使用某些复杂网络协议的应用、或任何具有类似实时需求的其他系统均可受益于Linux轻型线程--下一代 Linux 实时扩展。同时,实时嵌入式Linux的整个发展过程证明了Linux的运行效果与传统RTOS解决方案一样优异。Linux已取得了一些进展,但是作者认为,最重要的电信/网络应用中使用的Linux尚未达到预期的要求。但也许通过Linux轻型线程,我们可以更接近这一目标。总的来说,Linux实时嵌入式行业的一个侧重点是研发出可用于要求最高的实时应用的解决方案。下图中描述了该目标:
图2:轻型线程和Linux概念--Linux和RTOS最重要的概念