您的位置 首页 系统

经过轻型线程进步多核设备中的Linux实时功能

上个世纪,研发人员投入了大量精力提高 Linux 实时性能和行为,最著名的是 PREEMPT_RT Linux 实时扩展。最近,研发人员致力于研究适用于多核设备的 Linux 用户空间解决方案,该解决

  简介

  上个世纪,研制人员投入了许多精力前进 Linux 实时功用和行为,最著名的是 PREEMPT_RT Linux 实时扩展。最近,研制人员致力于研讨适用于多核设备的 Linux 用户空间处理方案,该处理方案答应从用户空间中直接拜访根底硬件,然后可避免因将 Linux 内核引进用户空间运用而带来的额定体系开支。这些用户空间扩展(有多个)已首先由电信/网络高功用 IP 数据包处理体系进行驱动,以完结所谓的“裸金属”施行,其间,多核设备中的 Linux 用户空间运用能够模仿“无操作体系”处理方案的履行进程,即在每个内核上进行简略“运转到完结”、轮询循环,以便进行数据包处理。在从根本上完结该方针的一起,该处理方案仍可用于十分特别的用例。还有其他需求前进功用的用例无法经过以上处理方案彻底处理吗?假如有的话,请罗列出来,是否可运用更完善的 Linux 实时改善?答案是必定的,选用 Linux 用户空间轻型线程 (light-weight threading, LWT) 即可。咱们来研讨一下实时 Linux,以及轻型线程怎么能成为适用于某些运用的处理方案。研讨的要点受电信、网络或常用通讯运用的影响,Enea 侧重于这些运用中选用的技能。但整体上来说,对轻型线程的要点运用会使多方获益。

  实时 Linux 及其处理的问题

  在曩昔的 10 年中,Linux 已在实时功用和行为方面获得了明显的前进,满意了许多运用的需求。详细归纳如下:

  PREEMPT_RT
  PREEMPT_RT 或许是 Linux 实时扩展获得的最明显的成果,PREEMPT_RT 数据包处理了多核设备 Linux 中存在的特别扎手的问题,即“中止推迟”问题。将事情/数据传送到实在用户空间运用之前,处理Linux内核中的中止占用的体系开支十分高 – 该体系开支往往会推迟其他中止,然后增大产生中止时测得的中止信息接收方进行处理的整体推迟。相同,Linux 内核中还有许多所谓的“重要部分”,可在其间经过自旋锁禁用中止。规范Linux 内核的整体中止推迟与许多实时运用的最重要的中止推迟要求不符,特别是无线接入网(移动)和移动中心根底设施,这两者要求最差情况下的中止推迟应在 20-30 微秒范围内。这一点也适用于许多其他商场运用。在快速“nutshell”PREEMPT_RT 中,这一问题是经过以下方法处理的:

  • 将悉数设备驱动器中止句柄传递到可调度线程中,这样可最大程度地削减 Linux 内核对中止的处理工作,因而,无需等候前一中止处理完结便可处理新中止。之后,中止处理睬变为受优先级驱动,依据用户需求,会先完结优先级最高的中止处理。
  • 将 Linux 内核中的一切死空间自旋锁传递到互斥量中,然后答应其他内核线程替代内核空间自旋锁运转。

  基本上,PREEMPT_RT 已依据十分高功用的实时规范将整体中止推迟成功缩短,这样对许多 Linux 运用都十分有协助。要了解详细运用?请持续往下读。

  用户空间 Linux 调整

  如上文所述,近年来,研制人员对 Linux 用户空间运用投入了许多精力。意图是避免用户空间运用(Linux 用户对其附加价值投入了许多精力)占用 Linux 内核自身的体系开支来处理某些特定的设备/中止交互。Linux 选用的模型可极大程度地避免用户空间运用遭到内核的影响,在该模型中,一切用户空间操作(包含线程)始终会映射到 Linux 内核,以便处理其 I/O 恳求。这样便使 Linux 具有强壮的行为和特性。可是,关于数据处理功用十分高的运用来说,即便选用 PREEMPT_RT,Linux 也会有短时毛病,这是因为,总是需求进行 Linux 内核上下文切换才干直接拜访硬件。用户空间 Linux 施行答应运用在不触及 Linux 内核的情况下直接拜访硬件和中止,并可极大程度地前进功用。但这种功用提高只能在 I/O 密度极高的环境中完结。大部分 Linux 用户空间调整都侧重于单线程运用(如高功用数据包处理),其间,Linux 下只要一个线程用于模仿多核设备中的“无操作体系”功用。

  多线程问题

  实时 Linux 处理方案查询中短少的是仔细查看多线程在实时嵌入式运用中的有用性。实践上,早在 20 世纪 80 时代 Linux 呈现之前,人们就提出了需求选用嵌入式实时操作体系 (RTOS) 来完结低推迟、高吞吐量、极具实时特色的运用。操作体系的结构产生了改动,但对这方面的需求却没有改动。此类 RTOS 处理方案所具有的各种功用、行为和特性是曩昔十多年中 Linux 一向测验到达的。这并不意味着倾向于康复运用 RTOS,而是要到达 RTOS 所具有的功用。就便携性、运用的宽广生态体系以及设备支撑和惯例支撑来讲,Linux 在实时嵌入式处理方案中的整体价值是任何 RTOS 都无法比拟的。存在两个实践问题:

  • 多线程为何重要?
  • 假如多线程很重要,那么咱们应怎么将 RTOS 多线程功用、行为和特性添加到 Linux 中,以便获得更大的成功?要害问题是了解 Linux 多线程施行与 RTOS,然后考虑能够进行哪些改善。

  多线程为何重要?

  30 多年前,当核算机处理方案软件规划人员碰到单线程处理方案无法处理的杂乱问题时,便已提出了对多线程实时性方面的需求。所需处理方案要求单个运用具有多个使命,或许一些是核算使命,一些是受 I/O 驱动的使命,可是,就使命的整体履行而言,一切使命均密切相关。但多个使命密切相关意味着这些使命应同享一部分 CPU 时刻才干到达 CPU 的有用整体利用率。在许多此类运用中,有必要制止履行某些操作、等候某些 I/O 事情或另一运用宣布的其他通讯。因而呈现了简略的可履行程序,这些可履行程序能够处理多个线程,一起可禁用线程,并可在各线程之间进行低推迟通讯。

  并非一切实时运用都需求支撑重要的多线程处理功用。本文并未对相关运用进行分类。但很显然,需求运用多线程处理功用的运用是那些需求在协议中设定“等候状况”的任何类型的杂乱协议,即等候答应运用持续进行的呼应或事情。之后,运用应抛弃对 CPU 的控制权,答应运转其他相似的线程,来替代该呼应或事情。

  或许上述教程关于许多人来说很简略。请注意,许多移动根底设施和中心网络设备供货商得出的结论是,尽管 Linux 是当时或未来体系的首选,但现在构建的 Linux 还不足以满意业界的悉数要求。原因是什么?

  选用 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 内核,然后为本能够在本地施行的运用带来了额定的体系开支。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/327785.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部