一种利用并发提高系统数据吞吐率的模型及其分析

    在实时系统常见的一种应用模式就是,在一个有限的时间段内cpu须要完成数据采集,数据处理以及数据输出的工作,输入和输出一般属于IO操作相对而言会占用比较多的时间资源;这时可以引入并发机制来提高系统的吞吐率;
    我们知道对于两个不同速度的设备之间通讯时,往往会引入缓冲机制,比如由于CPU和RAM之间的速度差异,所以很多体系结构在对RAM进行读写时都加入了写buffer和读buffer,即cache;当CPU需要进行RAM读写操作时,实际上只是对速度较快的cache进行操作,而cache会总线空闲时更新RAM中的数据,很显然,缓存越大对提高系统的效率越有好处;但是在实时数据处理系统中情况并不是这样;
    比如现在有这样一个系统,CPU需要将处理的数据通过某种IO设备输出,设计方案是先将处理好的数据先写入RAM中,然后再由某种并发机制(或者是多线程,或者是DMA)将RAM中的数据发送到设备端,这里假设CPU数据处理和IO输出都是连续的,并且数据处理速度Vdp>Vio;那么除非buffer是足够大的,大到能够完成整个处理过程(这种情况在实时信号处理系统中几乎不存在),否则必须使用循环buffer,因为Vdp>Vio=>在若干次循环后写RAM操作和读RAM操作将产生冲突(循环的次数取决于(Vdp-Vio)),在此之后写操作将被挂起直到读操作完成RAM进入重新可写状态。
    一旦写操作和读操作进入同步阶段,系统此时的效率就完全取决于读操作了,实际上可以证明buffer的深度depth>=2对于改善系统效率的效果基本上是差异不大的,因为当运行时间T>>读写操作进入同步时间Tsyn时,系统的吞吐率Vthrp=IO操作的速率Vio;
     认识到这一点很重要,可以节省很多ram资源开销,另外也可以简化逻辑;
     另外一点是关于同步机制,如果采用连续模式,即读写进程都是连续的,那么每个读写操作前都要进行同步判断,当同步条件不满足时就挂起进程直到同步条件重新满足,实现起来逻辑上比较复杂;
     另一种同步机制就是离散模式,即通过利用额外的一个同步资源,比如同步时钟信号,即每隔一个时间段进行一次同步,这种机制更符合离散时间系统的处理的特点,并且逻辑简单,概念清晰;
     这里引入一个由一个Timer资源产生同步信号的并发模型:

      可见,系统的最大吞吐率取决于最慢的进程;提高buffer的深度并不能改善这一情况,而该模型对于系统效率的主要帮助在于引入了并发;但这取决于一些参数,这里做一些量化的分析:
     很显然在输出速率一定的情况下两个TIME_TICK之间的时间间隔决定了系统的吞吐率;这里假设Tsend和Twrite都是恒定的,并且Twrite>Tsend,此时最小间隔
    Tmin = Tsend;
而在没有并发的情况下
    Tmin=Tsend+Twrite;
     =>并发对于系统吞吐率的改善取决于Twrite,在 Twrite<<  Tsend的情况下, 也就是说write操作的时间远小于send操作时,并发对于系统的改善是非常有限的;
     另外还可以看出,在同步时间间隔T>Tsend+Twrite的情况下,并发也没有意义;
可见,最优的情况就是T选取的值接近Tsend即T=Tsend时系统吞吐量达到最大。
因为大部分外部IO设备都是具有固定的传输波特率BoderRate的,所以确定Tsend是很简单的,在已知数据包大小SizeOfData的情况下,
Tsend=  SizeOfData× BoderRate;由此可以确定同步周期T的大小。                     

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值