2008年10月8日 星期三

影響U盤速度的幾大因素分析





就像大家看到的一樣,U盤主要由主控芯片和flash芯片組成,所以影響U盤速度的因素也就分為主控芯片和flash芯片兩方面。
先說flash芯片:
flash芯片有很多廠家的,又有很多型號,為什麼同樣的主控配不同flash速度不一樣呢?
flash對讀寫速度直接影響的有幾個參數:
serial access time,這個表示flash傳輸一個byte數據的時間(I/O傳輸)。
page read time,這是讀一個page數據前所需的準備時間(flash到緩存)。
page program time,這是實際把數據寫進flash裡的時間。(緩存到flash)

Flash芯片的讀寫一般都以page為單位,目前最新的flash一個page的大小為4KB。
所以讀一個page的時間為serial access time * page size + page read time。
寫一個page的時間為serial access time * page size + page program time。

以三星的50nm的SLC和MLC做比較:
serial access time為25ns
page read time: SLC(25us) MLC(60us)
page program time: SLC(200us) MLC(800us)
所以SLC讀一個page的時間約為135us,相當於29MB/s。
SLC寫一個page的時間為310us,相當於12MB/s。
而MLC讀一個page的時間為170us,相當於23MB/s。
MLC寫一個page的時間為910us,相當於4MB/s。
可見MLC的速度比SLC的速度要慢很多,尤其是寫的速度。
這些參數各個廠家和型號區別不大,不用刻意挑選。
但是K9MDG08U5M(16GB)是個例外。由於SLC太貴,接下來的分析都基於MLC的參數。

上面說的是單個flash單元的讀寫速度。
所謂flash單元並不是我們看到的芯片,專業術語叫plane。
其實就是一顆flash芯片內部有多個小塊組成。
目前工藝下MLC一個plane的大小就是1GB。
所以4GB的K9LBG08U0M就是有4個plane。
8GB的K9HCG08U0M就是有8個plane。

雙通道比單通道快大家都理解吧。所以如果可以同時往這多個plane進行讀寫的話,速度也會倍增。
雖然不能同時,但是可以做到交替,就是serial access time不能省去,但是page read time和page program time可以共享。
這樣往4個plane各讀一個page的時間就是110*4+ 60 =500us,32MB/s。
往4個plane各寫一個page的時間就是110*4+800 = 1240us,15MB/s。
往8個plane各讀一個page的時間就是110*8+ 60 =500us,34MB/s。
往8個plane各寫一個page的時間就是110*8+800 = 1640us,19MB/s。
(實際上可以更快,不細說了)

現在最新的flash都提供了這樣的功能,那麼就看主控芯片有沒有用好這些功能了。
再說說主控:
主控有單通道的有雙通道的,但不是能貼兩片flash就是雙通道,雙通道的主控有兩組獨立的flash I/O。
雙通道的速度就簡單的是單通道的兩倍。
每個通道的速度主要受前面說的交替讀寫的功能做得好壞的影響。
還得先再說一下flash芯片的結構,以K9HCG08U1M為例,該芯片有兩個片選信號CE。
每個片選信號CE控制一個K9LBG08U0M(別奇怪,大的flash就是拿小的拼起來的)。
每個K9LBG08U0M包含兩個DIE(對不起,又一個flash結構的專有名詞),
然後一個DIE包含前面提到的兩個plane。所以一個K9HCG08U1M包含2個CE/4個DIE/8個plane。

在CE之間做交替,和在DIE之間做交替,在plane之間做交替的方法不一樣,複雜度也不同。
只用CE之間交替,相當於操作兩個plane。
用CE之間交替且用DIE之間交替,相當於操作四個plane。
都用上的話就是操作八個plane了。

最老的主控連CE之間的交替都不做,現在差的估計只做了CE之間的交替,好的則都做了。
這個各個主控怎麼做的我們不知道,但是從速度上分析,配MLC雙貼,大文件寫速度大於20MB/s的都做了。

給大家解釋一下,本來按上面算法,8個plane並行操作,再加上雙通道,讀寫速度不應該是68MB/s和38MB/s嗎?
但是USB在window下受最大數據包大小為64KB的限制,本身速度極限只能達到讀32--35MB/s,寫28--32MB/s(大概值)。
USB在傳輸數據時的速度確實是60MB/s,但是其中不全是有效數據,64KB的包中有效數據約為5/6。
更要命的是它在兩個包之間還要休息。所以flash端的速度要上50MB/s才能達到USB的極速。
所以目前U盤的極限大概讀基本都能上30MB/s。而寫根據k9HCG08U1M雙貼看最多到25MB/s。

最後,怎麼選擇flash和主控來得到最好的速度呢?
(1) flash芯片容量越大,包含的plane數越多,交替讀寫的效果更好。
但是K9MDG08U5M不好,它的serial access time 是50ns,比小容量的大了一倍。
(2)想速度快就用雙通道,選交替功能做得好的。哪些主控好?要測過才知道。

沒有留言: