一種利用併發提高系統資料吞吐率的模型及其分析

2021-04-20 02:32:17 字數 1592 閱讀 5464

我們知道對於兩個不同速度的裝置之間通訊時,往往會引入緩衝機制,比如由於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<

另外還可以看出,在同步時間間隔t>tsend+twrite的情況下,併發也沒有意義;

可見,最優的情況就是t選取的值接近tsend即t=tsend時系統吞吐量達到最大。

因為大部分外部io裝置都是具有固定的傳輸波特率boderrate的,所以確定tsend是很簡單的,在已知資料報大小sizeofdata的情況下,

tsend=  sizeofdata× boderrate;由此可以確定同步週期t的大小。                     

利用redis快取熱門資料,分頁的一種思路

一般分頁做快取都是直接查詢出來,按頁放到快取裡,但是這種快取方式有很多缺點。如快取不能及時更新,一旦資料有變化,所有的之前的分頁快取都失效了。比如像微博這樣的場景,微博下面現在有乙個頂次數的排序。這個用傳統的分頁方式很難應對。最近想到了另一種思路。資料以id為key快取到redis裡 把資料id和排...

利用redis快取熱門資料,分頁的一種思路

一般分頁做快取都是直接查詢出來,按頁放到快取裡,但是這種快取方式有很多缺點。如快取不能及時更新,一旦資料有變化,所有的之前的分頁快取都失效了。比如像微博這樣的場景,微博下面現在有乙個頂次數的排序。這個用傳統的分頁方式很難應對。最近想到了另一種思路。資料以id為key快取到redis裡 把資料id和排...

提高視覺系統顏色識別魯棒性的一種方案

前言 視覺系統中顏色識別的魯棒性在視覺系統中經常遇到,怎樣提高它的魯棒性是乙個有一定的理論意義和實用價值。本文就此提出一實用方案,就足球機械人視覺子系統中的顏色識別例項進行介紹。在實現足球機械人視覺子系統時存在的一大難點就是影象顏色的魯棒性,影象顏色的魯棒性形成的主要原因是光照,還有影象採集時所形成...