電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>DSP>輕型線程提高多核設(shè)備中的Linux實(shí)時(shí)性能的方案分析

輕型線程提高多核設(shè)備中的Linux實(shí)時(shí)性能的方案分析

2017-10-23 | rar | 0.3 MB | 次下載 | 1積分

資料介紹

上個(gè)世紀(jì),研發(fā)人員投入了大量精力提高 Linux 實(shí)時(shí)性能和行為,最著名的是 PREEMPT_RT Linux 實(shí)時(shí)擴(kuò)展。最近,研發(fā)人員致力于研究適用于多核設(shè)備的 Linux 用戶空間解決方案,該解決方案允許從用戶空間中直接訪問基礎(chǔ)硬件,從而可避免因?qū)?Linux 內(nèi)核引入用戶空間應(yīng)用而帶來的額外系統(tǒng)開銷。這些用戶空間擴(kuò)展(有多個(gè))已首先由電信/網(wǎng)絡(luò)高性能 IP 數(shù)據(jù)包處理系統(tǒng)進(jìn)行驅(qū)動(dòng),以實(shí)現(xiàn)所謂的“裸金屬”實(shí)施,其中,多核設(shè)備中的 Linux 用戶空間應(yīng)用可以模擬“無操作系統(tǒng)”解決方案的執(zhí)行過程,即在每個(gè)內(nèi)核上進(jìn)行簡(jiǎn)單“運(yùn)行到完成”、輪詢循環(huán),以便進(jìn)行數(shù)據(jù)包處理。在從根本上實(shí)現(xiàn)該目標(biāo)的同時(shí),該解決方案仍可用于非常特殊的用例。還有其他需要提高性能的用例無法通過以上解決方案完全解決嗎?如果有的話,請(qǐng)列舉出來,是否可應(yīng)用更完善的 Linux 實(shí)時(shí)改進(jìn)?答案是肯定的,采用 Linux 用戶空間輕型線程 (light-weight threading, LWT) 即可。我們來研究一下實(shí)時(shí) Linux,以及輕型線程如何能成為適用于某些應(yīng)用的解決方案。研究的重點(diǎn)受電信、網(wǎng)絡(luò)或常用通信應(yīng)用的影響,Enea 側(cè)重于這些應(yīng)用中采用的技術(shù)。但總體上來說,對(duì)輕型線程的重點(diǎn)應(yīng)用會(huì)使多方受益。
  實(shí)時(shí)Linux 及其解決的問題
  在過去的 10 年中,Linux 已在實(shí)時(shí)性能和行為方面取得了顯著的進(jìn)步,滿足了大量應(yīng)用的需求。具體歸納如下:
  PREEMPT_RT
  PREEMPT_RT 也許是 Linux 實(shí)時(shí)擴(kuò)展取得的最顯著的成就,PREEMPT_RT 數(shù)據(jù)包解決了多核設(shè)備 Linux 中存在的特別棘手的問題,即“中斷延遲”問題。將事件/數(shù)據(jù)傳送到真實(shí)用戶空間應(yīng)用之前,處理Linux內(nèi)核中的中斷占用的系統(tǒng)開銷非常高 - 該系統(tǒng)開銷往往會(huì)延遲其他中斷,從而增大發(fā)生中斷時(shí)測(cè)得的中斷信息接收方進(jìn)行處理的總體延遲。同樣,Linux 內(nèi)核中還有許多所謂的“重要部分”,可在其中通過自旋鎖禁用中斷。標(biāo)準(zhǔn)Linux 內(nèi)核的總體中斷延遲與許多實(shí)時(shí)應(yīng)用的最重要的中斷延遲要求不符,特別是無線接入網(wǎng)(移動(dòng))和移動(dòng)核心基礎(chǔ)設(shè)施,這兩者要求最差情況下的中斷延遲應(yīng)在 20-30 微秒范圍內(nèi)。這一點(diǎn)也適用于許多其他市場(chǎng)應(yīng)用。在快速“nutshell”PREEMPT_RT 中,這一問題是通過以下方式解決的:
  將全部設(shè)備驅(qū)動(dòng)器中斷句柄傳遞到可調(diào)度線程中,這樣可最大程度地減少 Linux 內(nèi)核對(duì)中斷的處理工作,因此,無需等待前一中斷處理完成便可處理新中斷。之后,中斷處理會(huì)變?yōu)槭軆?yōu)先級(jí)驅(qū)動(dòng),根據(jù)用戶需求,會(huì)先完成優(yōu)先級(jí)最高的中斷處理。
  將 Linux 內(nèi)核中的所有死空間自旋鎖傳遞到互斥量中,從而允許其他內(nèi)核線程代替內(nèi)核空間自旋鎖運(yùn)行。
  基本上,PREEMPT_RT 已根據(jù)非常高性能的實(shí)時(shí)標(biāo)準(zhǔn)將總體中斷延遲成功縮短,這樣對(duì)大量 Linux 應(yīng)用都非常有幫助。要了解具體應(yīng)用?請(qǐng)繼續(xù)往下讀。
  用戶空間 Linux 調(diào)整
  如上文所述,近年來,研發(fā)人員對(duì) Linux 用戶空間應(yīng)用投入了大量精力。目的是避免用戶空間應(yīng)用(Linux 用戶對(duì)其附加價(jià)值投入了大量精力)占用 Linux 內(nèi)核本身的系統(tǒng)開銷來處理某些特定的設(shè)備/中斷交互。Linux 采用的模型可極大程度地防止用戶空間應(yīng)用受到內(nèi)核的影響,在該模型中,所有用戶空間操作(包括線程)始終會(huì)映射到 Linux 內(nèi)核,以便處理其 I/O 請(qǐng)求。這樣便使 Linux 具有強(qiáng)大的行為和特性。但是,對(duì)于數(shù)據(jù)處理性能非常高的應(yīng)用來說,即使采用 PREEMPT_RT,Linux 也會(huì)有短時(shí)故障,這是因?yàn)椋偸切枰M(jìn)行 Linux 內(nèi)核上下文切換才能直接訪問硬件。用戶空間 Linux 實(shí)施允許應(yīng)用在不涉及 Linux 內(nèi)核的情況下直接訪問硬件和中斷,并可極大程度地提高性能。但這種性能提升只能在 I/O 密度極高的環(huán)境中實(shí)現(xiàn)。大部分 Linux 用戶空間調(diào)整都側(cè)重于單線程應(yīng)用(如高性能數(shù)據(jù)包處理),其中,Linux 下只有一個(gè)線程用于模擬多核設(shè)備中的“無操作系統(tǒng)”性能。
  多線程問題
  實(shí)時(shí) Linux 解決方案調(diào)查中缺少的是認(rèn)真檢查多線程在實(shí)時(shí)嵌入式應(yīng)用中的有效性。實(shí)際上,早在 20 世紀(jì) 80 年代 Linux 出現(xiàn)之前,人們就提出了需要采用嵌入式實(shí)時(shí)操作系統(tǒng) (RTOS) 來實(shí)現(xiàn)低延遲、高吞吐量、極具實(shí)時(shí)特點(diǎn)的應(yīng)用。操作系統(tǒng)的結(jié)構(gòu)發(fā)生了變化,但對(duì)這方面的需求卻沒有改變。此類 RTOS 解決方案所具有的各種性能、行為和特性是過去十多年中 Linux 一直嘗試達(dá)到的。這并不意味著傾向于恢復(fù)使用 RTOS,而是要達(dá)到 RTOS 所具有的功能。就便攜性、應(yīng)用的廣闊生態(tài)系統(tǒng)以及設(shè)備支持和常規(guī)支持來講,Linux 在實(shí)時(shí)嵌入式解決方案中的總體價(jià)值是任何 RTOS 都無法比擬的。存在兩個(gè)實(shí)際問題:
  多線程為何重要?
  如果多線程很重要,那么我們應(yīng)如何將 RTOS 多線程性能、行為和特性添加到 Linux 中,以便取得更大的成功?關(guān)鍵問題是了解 Linux 多線程實(shí)施與 RTOS,然后考慮可以進(jìn)行哪些改進(jìn)。
  多線程為何重要?
  30 多年前,當(dāng)計(jì)算機(jī)解決方案軟件設(shè)計(jì)人員碰到單線程解決方案無法解決的復(fù)雜問題時(shí),便已提出了對(duì)多線程實(shí)時(shí)性方面的需求。所需解決方案要求單個(gè)應(yīng)用具有多個(gè)任務(wù),也許一些是計(jì)算任務(wù),一些是受 I/O 驅(qū)動(dòng)的任務(wù),但是,就任務(wù)的總體執(zhí)行而言,所有任務(wù)均密切相關(guān)。但多個(gè)任務(wù)密切相關(guān)意味著這些任務(wù)應(yīng)共享一部分 CPU 時(shí)間才能達(dá)到 CPU 的有效總體利用率。在很多此類應(yīng)用中,必須禁止執(zhí)行某些操作、等待某些 I/O 事件或另一應(yīng)用發(fā)出的其他通信。因此出現(xiàn)了簡(jiǎn)單的可執(zhí)行程序,這些可執(zhí)行程序可以處理多個(gè)線程,同時(shí)可禁用線程,并可在各線程之間進(jìn)行低延遲通信。
  并非所有實(shí)時(shí)應(yīng)用都需要支持重要的多線程處理功能。本文并未對(duì)相關(guān)應(yīng)用進(jìn)行分類。但很顯然,需要使用多線程處理功能的應(yīng)用是那些需要在協(xié)議中設(shè)定“等待狀態(tài)”的任何類型的復(fù)雜協(xié)議,即等待允許應(yīng)用繼續(xù)進(jìn)行的響應(yīng)或事件。之后,應(yīng)用應(yīng)放棄對(duì) CPU 的控制權(quán),允許運(yùn)行其他類似的線程,來代替該響應(yīng)或事件。
  也許上述教程對(duì)于許多人來說很簡(jiǎn)單。請(qǐng)注意,很多移動(dòng)基礎(chǔ)設(shè)施和核心網(wǎng)絡(luò)設(shè)備供應(yīng)商得出的結(jié)論是,雖然 Linux 是當(dāng)前或未來系統(tǒng)的首選,但目前構(gòu)建的 Linux 還不足以滿足業(yè)界的全部要求。原因是什么?
  采用 PTHREADS 的 Linux 多線程
  Pthreads 是由 IEEE 規(guī)劃的可移植操作系統(tǒng)接口 (POSIX) 創(chuàng)建的,目的是為了解決 Unix 中存在的高性能、多線程問題,之后被 Linux 用在最早的版本中,用于為企業(yè)實(shí)施可移植 Unix,目前用于嵌入式應(yīng)用中。
  創(chuàng)建 pthreads 模型是為了解決原始 Unix Fork/Join 模型創(chuàng)建 Unix“子”進(jìn)程時(shí)出現(xiàn)的問題。由于該模型涉及到創(chuàng)建(還可能涉及刪除)整個(gè)受內(nèi)存保護(hù)的環(huán)境及執(zhí)行模式,因此Unix 進(jìn)程模型非常龐大。需要在 Unix 下采用適用于多線程的較輕型模型,因此pthreads應(yīng)運(yùn)而生。
  但 Unix(也包括 Linux)模型是專為將內(nèi)核與用戶空間應(yīng)用完全分離而設(shè)計(jì)的,其優(yōu)勢(shì)之一在于提供的保護(hù)、安全性和可靠性遠(yuǎn)勝于其他實(shí)施方案(包括過去 10 幾年間使用的 RTOS)。實(shí)質(zhì)上,這意味著 Linux 用戶空間中的每個(gè) pthread 都會(huì)由 Linux 內(nèi)核線程表示,因此,全部或大部分 Linux 系統(tǒng)調(diào)用(特別是設(shè)備驅(qū)動(dòng)器)均可通過用戶空間進(jìn)行訪問。但是,由于 OEM 制造的產(chǎn)品并不具備 GPL,因此用戶空間中實(shí)際存儲(chǔ)了所有嵌入式 Linux 實(shí)時(shí)應(yīng)用。因此,在每種情況下,使用 pthreads 都涉及到調(diào)用 Linux 內(nèi)核,從而為本可以在本地實(shí)施的應(yīng)用帶來了額外的系統(tǒng)開銷。
  但請(qǐng)您稍稍考慮一下。采用上文提到的 Linux 實(shí)時(shí)擴(kuò)展怎么樣?是的,PREEMPT_RT 可以解決 Linux 內(nèi)核中存在的許多關(guān)于響應(yīng)性的問題,但不能真正解決多線程問題。實(shí)施用戶空間 Linux 可解決設(shè)備驅(qū)動(dòng)器/中斷性能問題,但并不能真正解決多線程問題。Linux 實(shí)時(shí)容器可解決部分問題,但實(shí)時(shí)容器只是一種基于標(biāo)準(zhǔn) Linux 的用戶空間 Linux 可視化技術(shù),并不能真正解決根本的多線程問題。
  輕型線程 (LWT) – 復(fù)雜 Linux 應(yīng)用的真正解決方案
  之前針對(duì) Linux 提出了多種輕型線程模型的建議,但沒有一種模型能夠真正解決問題。原因何在?因?yàn)榇蠖鄶?shù)模型的功能都不是很強(qiáng)大。涉及復(fù)雜多線程應(yīng)用的下一代 Linux 解決方案真正需要的是適用于用戶空間 Linux 應(yīng)用的全新 Linux 模型。下文概括介紹了這種名為L(zhǎng)inux輕型線程 (LWT) 的解決方案。將高性能、低系統(tǒng)開銷、多線程調(diào)度器植入 Linux 用戶空間,來代替單獨(dú)的 pthread。原因何在?
  Pthread 系統(tǒng)開銷
  進(jìn)程和 pthreads 是 Linux 了解的唯一調(diào)度實(shí)體。
  LWT pthread 只是一個(gè) Linux 編碼執(zhí)行背景,可用于永久運(yùn)行 pthread。由于用戶空間調(diào)度器始終保持控制,因此 pthread 絕不會(huì)被掛起 – 省電模式除外。這種情況不在本文的討論范圍。
  該用戶空間調(diào)度器的運(yùn)行和操作方式與某些傳統(tǒng) RTOS 高性能、低延遲實(shí)施完全相同,但不會(huì)涉及到 Linux 內(nèi)核。
  實(shí)施過程利用新用戶空間 Linux 實(shí)施過程來直接訪問硬件。同樣也不涉及 Linux 內(nèi)核。
  上述 LWT 解決方案可在任何 Linux 實(shí)時(shí)應(yīng)用中實(shí)現(xiàn)動(dòng)態(tài)性能的提升。Enea 已設(shè)計(jì)出上述 LWT 的一些原型,事實(shí)證明,與 Linux pthreads 在調(diào)度器系統(tǒng)開銷、特別是上下文切換和線程間消息發(fā)送/通信延遲方面的性能相比,LWT 性能可提高 10 倍。
  但是除了調(diào)度性能和線程間通信功能之外,LWT 解決方案還應(yīng)帶來什么?LWT 概念除了在性能方面勝過 Linux pthreads 之外,還有更多優(yōu)勢(shì)。解決方案穩(wěn)健性的概念如何?與歷史悠久的 RTOS 實(shí)時(shí)解決方案一樣,LWT 也需要具有以下額外 Linux 特性:
  決定性調(diào)度
  調(diào)度系統(tǒng)開銷低 – 上下文切換成本低
  線程間信號(hào)系統(tǒng)開銷低
  線程創(chuàng)建成本低
  多核設(shè)備中 Linux 輕型線程模型的結(jié)構(gòu)圖
  LWT 實(shí)施方案的結(jié)構(gòu)圖如下。涉及整個(gè)共享內(nèi)存空間的 Linux 進(jìn)程可能跨多核設(shè)備的多個(gè)內(nèi)核。為了達(dá)到最高效率,LWT 模型需要將 Linux 進(jìn)程中的單個(gè) pthread 鎖定至某一個(gè)內(nèi)核,但并不特別要求這樣做。LWT 鎖定至 pthread 之后,便可遷移到 Linux SMP 需要的任何內(nèi)核中。
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費(fèi)下載
  2. 0.00 MB  |  1489次下載  |  免費(fèi)
  3. 2單片機(jī)典型實(shí)例介紹
  4. 18.19 MB  |  91次下載  |  1 積分
  5. 3S7-200PLC編程實(shí)例詳細(xì)資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識(shí)別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關(guān)電源原理及各功能電路詳解
  10. 0.38 MB  |  9次下載  |  免費(fèi)
  11. 6基于AT89C2051/4051單片機(jī)編程器的實(shí)驗(yàn)
  12. 0.11 MB  |  4次下載  |  免費(fèi)
  13. 7基于單片機(jī)和 SG3525的程控開關(guān)電源設(shè)計(jì)
  14. 0.23 MB  |  3次下載  |  免費(fèi)
  15. 8基于單片機(jī)的紅外風(fēng)扇遙控
  16. 0.23 MB  |  3次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費(fèi)
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費(fèi)
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費(fèi)
  7. 4LabView 8.0 專業(yè)版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費(fèi)
  9. 5555集成電路應(yīng)用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費(fèi)
  11. 6接口電路圖大全
  12. 未知  |  30319次下載  |  免費(fèi)
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費(fèi)
  15. 8開關(guān)電源設(shè)計(jì)實(shí)例指南
  16. 未知  |  21539次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537791次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233045次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191183次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138039次下載  |  免費(fèi)