新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高效輕型線程助力提高Linux實時性能

        高效輕型線程助力提高Linux實時性能

        作者: 時間:2012-09-07 來源:網絡 收藏

        簡介

        本文引用地址:http://www.104case.com/article/148447.htm

          上個世紀,研發人員投入了大量精力和行為,最著名的是PREEMPT_RT 擴展。最近,研發人員致力于研究適用于多核設備的用戶空間解決方案,該解決方案允許從用戶空間中直接訪問基礎硬件,從而可避免因將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微秒范圍內。這一點也適用于許多其他市場應用。在快速nutshellPREEMPT_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還不足以滿足業界的全部要求。原因是什么?

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 土默特右旗| 临沭县| 烟台市| 田东县| 增城市| 土默特左旗| 瓮安县| 图们市| 北京市| 苍南县| 庄浪县| 沈阳市| 十堰市| 温泉县| 南投市| 板桥市| 邯郸市| 海晏县| 荔波县| 大冶市| 乳山市| 洮南市| 和平区| 丹巴县| 当涂县| 白河县| 夏津县| 会宁县| 沙洋县| 陈巴尔虎旗| 辽宁省| 金阳县| 保亭| 建宁县| 淳化县| 盐池县| 方正县| 清丰县| 昭平县| 陆良县| 万盛区|