<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 高效輕型線(xiàn)程助力提高Linux實(shí)時(shí)性能

高效輕型線(xiàn)程助力提高Linux實(shí)時(shí)性能

作者: 時(shí)間:2012-09-07 來(lái)源:網(wǎng)絡(luò ) 收藏

簡(jiǎn)介

本文引用地址:http://dyxdggzs.com/article/148447.htm

  上個(gè)世紀,研發(fā)人員投入了大量精力和行為,最著(zhù)名的是PREEMPT_RT 擴展。最近,研發(fā)人員致力于研究適用于多核設備的用戶(hù)空間解決方案,該解決方案允許從用戶(hù)空間中直接訪(fǎng)問(wèn)基礎硬件,從而可避免因將Linux內核引入用戶(hù)空間應用而帶來(lái)的額外系統開(kāi)銷(xiāo)。這些用戶(hù)空間擴展(有多個(gè))已首先由電信/網(wǎng)絡(luò )高 IP 數據包處理系統進(jìn)行驅動(dòng),以實(shí)現所謂的裸金屬實(shí)施,其中,多核設備中的Linux用戶(hù)空間應用可以模擬無(wú)操作系統解決方案的執行過(guò)程,即在每個(gè)內核上進(jìn)行簡(jiǎn)單運行到完成、輪詢(xún)循環(huán),以便進(jìn)行數據包處理。在從根本上實(shí)現該目標的同時(shí),該解決方案仍可用于非常特殊的用例。還有其他需要的用例無(wú)法通過(guò)以上解決方案完全解決嗎?如果有的話(huà),請列舉出來(lái),是否可應用更完善的Linux改進(jìn)?答案是肯定的,采用Linux用戶(hù)空間 (light-weight threading, LWT) 即可。我們來(lái)研究一下實(shí)時(shí) Linux,以及如何能成為適用于某些應用的解決方案。研究的重點(diǎn)受電信、網(wǎng)絡(luò )或常用通信應用的影響,Enea側重于這些應用中采用的技術(shù)。但總體上來(lái)說(shuō),對的重點(diǎn)應用會(huì )使多方受益。

  實(shí)時(shí)Linux及其解決的問(wèn)題

  在過(guò)去的10 年中,Linux 已在實(shí)時(shí)性能和行為方面取得了顯著(zhù)的進(jìn)步,滿(mǎn)足了大量應用的需求。具體歸納如下:

  PREEMPT_RT

  PREEMPT_RT也許是Linux實(shí)時(shí)擴展取得的最顯著(zhù)的成就,PREEMPT_RT數據包解決了多核設備Linux中存在的特別棘手的問(wèn)題,即中斷延遲問(wèn)題。將事件/數據傳送到真實(shí)用戶(hù)空間應用之前,處理Linux內核中的中斷占用的系統開(kāi)銷(xiāo)非常高 - 該系統開(kāi)銷(xiāo)往往會(huì )延遲其他中斷,從而增大發(fā)生中斷時(shí)測得的中斷信息接收方進(jìn)行處理的總體延遲。同樣,Linux內核中還有許多所謂的重要部分,可在其中通過(guò)自旋鎖禁用中斷。標準Linux內核的總體中斷延遲與許多實(shí)時(shí)應用的最重要的中斷延遲要求不符,特別是無(wú)線(xiàn)接入網(wǎng)(移動(dòng))和移動(dòng)核心基礎設施,這兩者要求最差情況下的中斷延遲應在20-30微秒范圍內。這一點(diǎn)也適用于許多其他市場(chǎng)應用。在快速nutshellPREEMPT_RT中,這一問(wèn)題是通過(guò)以下方式解決的:

  ●將全部設備驅動(dòng)器中斷句柄傳遞到可調度線(xiàn)程中,這樣可最大程度地減少Linux內核對中斷的處理工作,因此,無(wú)需等待前一中斷處理完成便可處理新中斷。之后,中斷處理會(huì )變?yōu)槭軆?yōu)先級驅動(dòng),根據用戶(hù)需求,會(huì )先完成優(yōu)先級最高的中斷處理。

  ●將Linux內核中的所有死空間自旋鎖傳遞到互斥量中,從而允許其他內核線(xiàn)程代替內核空間自旋鎖運行。

  基本上,PREEMPT_RT已根據非常高性能的實(shí)時(shí)標準將總體中斷延遲成功縮短,這樣對大量Linux應用都非常有幫助。要了解具體應用?請繼續往下讀。

  用戶(hù)空間Linux調整

  如上文所述,近年來(lái),研發(fā)人員對Linux用戶(hù)空間應用投入了大量精力。目的是避免用戶(hù)空間應用(Linux 用戶(hù)對其附加價(jià)值投入了大量精力)占用Linux內核本身的系統開(kāi)銷(xiāo)來(lái)處理某些特定的設備/中斷交互。Linux采用的模型可極大程度地防止用戶(hù)空間應用受到內核的影響,在該模型中,所有用戶(hù)空間操作(包括線(xiàn)程)始終會(huì )映射到Linux內核,以便處理其I/O請求。這樣便Linux具有強大的行為和特性。但是,對于數據處理性能非常高的應用來(lái)說(shuō),即使采用PREEMPT_RT,Linux也會(huì )有短時(shí)故障,這是因為,總是需要進(jìn)行Linux內核上下文切換才能直接訪(fǎng)問(wèn)硬件。用戶(hù)空間Linux實(shí)施允許應用在不涉及Linux內核的情況下直接訪(fǎng)問(wèn)硬件和中斷,并可極大程度地性能。但這種性能提升只能在I/O密度極高的環(huán)境中實(shí)現。大部分Linux用戶(hù)空間調整都側重于單線(xiàn)程應用(如高性能數據包處理),其中,Linux下只有一個(gè)線(xiàn)程用于模擬多核設備中的無(wú)操作系統性能。

  多線(xiàn)程問(wèn)題

  實(shí)時(shí)Linux解決方案調查中缺少的是認真檢查多線(xiàn)程在實(shí)時(shí)嵌入式應用中的有效性。實(shí)際上,早在20世紀80年代Linux出現之前,人們就提出了需要采用嵌入式實(shí)時(shí)操作系統(RTOS) 來(lái)實(shí)現低延遲、高吞吐量、極具實(shí)時(shí)特點(diǎn)的應用。操作系統的結構發(fā)生了變化,但對這方面的需求卻沒(méi)有改變。此類(lèi)RTOS解決方案所具有的各種性能、行為和特性是過(guò)去十多年中Linux一直嘗試達到的。這并不意味著(zhù)傾向于恢復使用RTOS,而是要達到RTOS所具有的功能。就便攜性、應用的廣闊生態(tài)系統以及設備支持和常規支持來(lái)講,Linux在實(shí)時(shí)嵌入式解決方案中的總體價(jià)值是任何RTOS都無(wú)法比擬的。存在兩個(gè)實(shí)際問(wèn)題:

  ●多線(xiàn)程為何重要?

  ●如果多線(xiàn)程很重要,那么我們應如何將RTOS多線(xiàn)程性能、行為和特性添加到Linux中,以便取得更大的成功?關(guān)鍵問(wèn)題是了解Linux多線(xiàn)程實(shí)施與RTOS,然后考慮可以進(jìn)行哪些改進(jìn)。

  多線(xiàn)程為何重要?

  30多年前,當計算機解決方案軟件設計人員碰到單線(xiàn)程解決方案無(wú)法解決的復雜問(wèn)題時(shí),便已提出了對多線(xiàn)程實(shí)時(shí)性方面的需求。所需解決方案要求單個(gè)應用具有多個(gè)任務(wù),也許一些是計算任務(wù),一些是受I/O驅動(dòng)的任務(wù),但是,就任務(wù)的總體執行而言,所有任務(wù)均密切相關(guān)。但多個(gè)任務(wù)密切相關(guān)意味著(zhù)這些任務(wù)應共享一部分CPU時(shí)間才能達到CPU的有效總體利用率。在很多此類(lèi)應用中,必須禁止執行某些操作、等待某些I/O事件或另一應用發(fā)出的其他通信。因此出現了簡(jiǎn)單的可執行程序,這些可執行程序可以處理多個(gè)線(xiàn)程,同時(shí)可禁用線(xiàn)程,并可在各線(xiàn)程之間進(jìn)行低延遲通信。

  并非所有實(shí)時(shí)應用都需要支持重要的多線(xiàn)程處理功能。本文并未對相關(guān)應用進(jìn)行分類(lèi)。但很顯然,需要使用多線(xiàn)程處理功能的應用是那些需要在協(xié)議中設定等待狀態(tài)的任何類(lèi)型的復雜協(xié)議,即等待允許應用繼續進(jìn)行的響應或事件。之后,應用應放棄對CPU的控制權,允許運行其他類(lèi)似的線(xiàn)程,來(lái)代替該響應或事件。

  也許上述教程對于許多人來(lái)說(shuō)很簡(jiǎn)單。請注意,很多移動(dòng)基礎設施和核心網(wǎng)絡(luò )設備供應商得出的結論是,雖然Linux是當前或未來(lái)系統的首選,但目前構建的Linux還不足以滿(mǎn)足業(yè)界的全部要求。原因是什么?

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

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>