对linux rcu机制的深入理解_第1页
对linux rcu机制的深入理解_第2页
对linux rcu机制的深入理解_第3页
对linux rcu机制的深入理解_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

对linuxrcu机制的理解RCU(Read-copyupdate)锁机制是kernel2.6的重大进步,使用rcu可以获得比使用rwlock更高的性能,而且代码简单,不易死锁。Linux文档如下描述:SothetypicalRCUupdatesequencegoessomethinglikethefollowing:Removepointerstoadatastructure,sothatsubsequentreaderscannotgainareferencetoit.WaitforallpreviousreaderstocompletetheirRCUread-sidecriticalsections.Atthispoint,therecannotbeanyreaderswhoholdreferencestothedatastructure,soitnowmaysafelybereclaimed(e.g.,kfree()d).如上所述,RCU原理其实很简单,现在假设你自己要实现一个基于rcu原理的模型。假定cpu处理报文的过程是原子的,这样可以认为处理完一个报文就经过了一个quiescentstate,RCU引用的过时数据就可以释放了。接收报文开始进入一个新的周期,当发送报文后,标记一个周期的结束。假设有8个cpu,轮流处理报文,而报文处理依赖的信息存储在共享内存中。那末,现在的问题是:请用rcu机制实现共享内存的释放。假设所有的cpu处理一个报文结束,就代表一个graceperiod(因为只有处理报文时才会使用共享内存),即每个cpu都经过了一个quiscentstate.那么现在就有三个问题:1.如何确定所有的cpu都经过了一个quiscentstate?2.在rcu处理时,如何保证别的cpu不对要释放的数据操作?3.在rcu处理后,如何开启和判断下一个rcu周期?带着这三个问题,我们可以看一下linux是如何实现rcu机制的。以下的分析是基于linux-2.6.27代码:Rcu有两个重要的数据结构:/*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;上述结构是rcu全局控制结构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;};上述结构是每个cpu用的rcu数据结构。DECLARE_PER_CPU(structrcu_data,rcu_data);staticstructrcu_ctrlblkrcu_ctrlblk={

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论