對linux rcu機制的深入理解_第1頁
對linux rcu機制的深入理解_第2頁
對linux rcu機制的深入理解_第3頁
對linux rcu機制的深入理解_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

對linuxrcu機制的理解RCU(Read-copyupdate)鎖機制是kernel2.6的重大進步,使用rcu可以獲得比使用rwlock更高的性能,而且代碼簡單,不易死鎖。Linux文檔如下描述:SothetypicalRCUupdatesequencegoessomethinglikethefollowing:Removepointerstoadatastructure,sothatsubsequentreaderscannotgainareferencetoit.WaitforallpreviousreaderstocompletetheirRCUread-sidecriticalsections.Atthispoint,therecannotbeanyreaderswhoholdreferencestothedatastructure,soitnowmaysafelybereclaimed(e.g.,kfree()d).如上所述,RCU原理其實很簡單,現(xiàn)在假設(shè)你自己要實現(xiàn)一個基于rcu原理的模型。假定cpu處理報文的過程是原子的,這樣可以認為處理完一個報文就經(jīng)過了一個quiescentstate,RCU引用的過時數(shù)據(jù)就可以釋放了。接收報文開始進入一個新的周期,當發(fā)送報文后,標記一個周期的結(jié)束。假設(shè)有8個cpu,輪流處理報文,而報文處理依賴的信息存儲在共享內(nèi)存中。那末,現(xiàn)在的問題是:請用rcu機制實現(xiàn)共享內(nèi)存的釋放。假設(shè)所有的cpu處理一個報文結(jié)束,就代表一個graceperiod(因為只有處理報文時才會使用共享內(nèi)存),即每個cpu都經(jīng)過了一個quiscentstate.那么現(xiàn)在就有三個問題:1.如何確定所有的cpu都經(jīng)過了一個quiscentstate?2.在rcu處理時,如何保證別的cpu不對要釋放的數(shù)據(jù)操作?3.在rcu處理后,如何開啟和判斷下一個rcu周期?帶著這三個問題,我們可以看一下linux是如何實現(xiàn)rcu機制的。以下的分析是基于linux-2.6.27代碼:Rcu有兩個重要的數(shù)據(jù)結(jié)構(gòu):/*Globalcontrolvariablesforrcupdatecallbackmechanism?*/structrcu_ctrlblk{TOC\o"1-5"\h\zlongcur;/*Currentbatchnumber.*/longcompleted;/*Numberofthelastcompletedbatch*/intnext_pending;/*Isthenextbatchalreadywaiting?*/intsignaled;spinlock_tlockcacheline_intemodealigned_in_smp;cpumask_tcpumask;嚴CPUsthatneedtoswitchinorder*//*forcurrentbatchtoproceed?*/}cacheline」nternodealigned」n_smp;上述結(jié)構(gòu)是rcu全局控制結(jié)構(gòu)structrcu_data{/*1)quiescentstatehandling:*/longquiescbatch;/*Batch#forgraceperiod*/intpassed_quiesc;/*User-mode/idleloopetc.*/intqs_pending;/*corewaitsforquiescstate*//*2)batchhandling*/longbatch;/*Batch#forcurrentRCUbatch*/structrcuhead*nxtlist,structrcu_head**nxttail;longqlen;/*#ofqueuedcallbacks*/structrcu_head*curlist;structrcu_head**curtail;structrcu_head*donelist;structrcu_head**donetail;longblimit;/*Upperlimitonaprocessedbatch*/intcpu;structrcu_headbarrier;};上述結(jié)構(gòu)是每個cpu用的rcu數(shù)據(jù)結(jié)構(gòu)。DECLARE_PER_CPU(structrcu_data,rcu_data);staticstructrcu_ctrlblkrcu_ctrlblk={

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論