我們從圖中明顯可以看某效能測試的結果表明普通機械磁碟的順序i/o效能指標是53.2m values/s,ssd的順序i/o效能指標是42.2m values/s,而記憶體的隨機i/o效能指標是36.7m values/s。雖然圖中沒有給出values的具體含義,但既然使用了相同的單位,應該是它們是可以比較的。由此似乎可以得出結論:磁碟的順序i/o效能要強於記憶體的隨機i/o效能。
當初引入這幅圖的主要目的是想說明kafka順序訪問磁碟(特別是順序寫入)的效能並不像想象中的那麼差。現在看來,這幅圖還是有一些問題的,裡面具體的數值也值得推敲。
第一就是單位不明確。一般這種測試常見的統計單位應該是mb/s,即磁碟或記憶體的吞吐量(tps)或頻寬(bandwidth),但如果這裡的values指的就是mb,顯然數值又太小了,所以我目前搞不清楚這個values指代的是什麼。這是第乙個問題。
第二個問題就在於沒有分開討論讀和寫。很多磁碟的讀寫tps差異很大,特別是對於隨機i/o來說,不同塊大小(block size)的隨機io相差巨大。這張圖裡面只是籠統地給出了磁碟的順序i/o和隨機i/o效能,沒有顯式區分出讀寫來。這是第二個問題。
第三個問題就在於圖中的數值與我們平時的印象是矛盾的。一般情況下,我們會認為記憶體的tps應該是很高的。即使是隨機i/o也不應該比磁碟的要差,但這張圖清晰地表明它真的就是差。特別是今天有人拿實際的測試結果反駁了圖中的結論。下面我們著重**一下第三個問題。
首先是實際測試資料:記憶體使用的是ddr3的三星記憶體,tps測試結果為2500mb/s,但沒有說清楚是讀tps還是寫tps,也沒有提及使用的chunk大小是多少,更沒有說是隨機io訪問還是順序io訪問。不過我們姑且認為是隨機io吧,畢竟我們要pk的就是記憶體的隨機io。磁碟這邊使用的是ssd,經測試最大的順序讀寫io大約是63mb/s,同樣沒有說到底是讀io還是寫io。測試結果說明ssd磁碟順序io tps遠遜於記憶體io tps。那麼到底哪個是對的呢?為什麼圖中顯示磁碟順序io是能勝過記憶體隨機io的呢?
針對這個矛盾之處,我個人的看法是這裡面存在著田忌賽馬的情形,也就是說圖中用於比較的ssd和記憶體應該不是同乙個等級的,有可能找了乙個很好的ssd去與乙個普通的記憶體條進行比較。拿上面實際的例子而言ddr3的三星記憶體tps為2500mb/s,但這不算什麼太好的成績。還存在很多更好的記憶體產品遠不止2500mb/s的吞吐量,比如corsair vengeance ddr3宣稱能夠達到5000+mb/s的隨機io tps(它是以2mb chunk做的測試)。具體的資料**詳見:
至於ssd,順序io tps超過2500mb/s的也有,比如這款基於mlc的micron p420m ssd就宣稱其順序io tps能到3300mb/s。具體的資料**詳見:
那麼現在如果用micron p420m ssd和上面的三星記憶體比,其順序io的tps就超過記憶體的隨機io tps。這樣看來,這不就是田忌賽馬嗎?用乙個非常好的磁碟去pk乙個普通的記憶體,結果就很可能是圖中的那個樣子。所以,個人認為不用太糾結圖中的資料,只需要了解磁碟順序讀寫效能很好或至少不差這個事實就好了:)
另外我感覺這張圖還有其他不太合理的地方,比如對於ssd而言,順序io效能幾乎是隨機io的40倍。的確,隨機io是要慢於順序io的,特別是對於寫入而言,但在ssd中這不總是成立的。
如果io size很小或者說寫入資料很小(比如小於32mb),隨機寫入自然是要慢於順序寫入;但當io size增加到某個程度後(比如和clustered block一樣大或是其整數倍),那麼隨機寫和順序寫的表現是差不多的,因為不再需要做過多的拷貝擦除,而且ssd內部的並行機制會開始逐漸起作用,抵消隨機寫和順序寫之間的差異。從這個角度來說,我覺得圖中的兩組數值對比過於懸殊了,似乎也有不真實的地方。
總之,我對這張圖的結論是圖中的數字是有一些水分的,至少沒有給出完整的測試說明,缺乏必要的事實基礎,但圖要呈現的結論依然是成立的,即在某種程度下,磁碟順序i/o訪問(特別是寫操作)是能夠匹敵記憶體的隨機i/o訪問效能的。
隨機 I O 順序 I O
在談這倆概念前 先來說說 大i o vs.小i o 通常 我們把 16kb的i o認為是小i o 而 32kb的i o認為是大i o 了解i o的大小 影響到後期對快取 raid型別 lun的一些屬性的調優 當前大多數資料庫使用的都是傳統的機械磁碟 因此 整個系統設計要盡可能順序i o 避免昂貴的尋...
磁碟IO 快取IO 直接IO 記憶體對映
磁碟io的幾種訪問方式如下 快取io 快取i o又被稱作標準i o,大多數檔案系統的預設i o操作都是快取i o。在linux的快取i o機制中,資料先從磁碟複製到核心空間的緩衝區,然後從核心空間緩衝區複製到應用程式的位址空間。讀操作 作業系統檢查核心的緩衝區有沒有需要的資料,如果已經快取了,那麼就...
關於IO記憶體
外設的sfr 特殊功能暫存器 編址與記憶體的編址是同乙個位址空間,叫做io記憶體。linux 核心執行後,開啟了mmu 記憶體管理單元 所以不能直接訪問 cpu 的實體地址,也就是說,不能直接使用實體地址訪問系統的 io 記憶體。必須將實體地址轉換為虛擬位址,核心通過虛擬位址來訪問系統的 io 記憶...