原文 http://blog.sina.com.cn/s/blog_69406f8d0102vcxz.html上周缅刽,有位朋友提出一個問題:“在 HDD 中叉存,順序 8KB 寫和離散(隨機) 8KB 寫的 IOPS 差別大撑蚌,這是因為磁盤機械的原因昙楚。那么在 SSD 里面招盲,順序 8KB 和離散 8KB 寫 IOPS 也還會有差別嗎?”
這是一個好問題算谈。因為硬盤每一次隨機訪問涩禀,都需要消耗磁頭尋道和盤片旋轉(zhuǎn)等待這兩部分時間;而 SSD 使用的是半導(dǎo)體閃存介質(zhì)然眼,隨機訪問要快得多艾船。
我在《 Oracle Exadata X5彈性擴展與SSD性能計算 》一文中,經(jīng)過推算得出“Oracle Exadata X5彈性擴展與SSD性能計算 Exadata 公布的 SQL 閃存寫 IOPS 可以是順序操作高每,所以會超過 IntelP3600 標稱的 8KB 隨機寫 IOPS ”的判斷屿岂。當時也確實有點拍腦袋,印象中看過這方面的測試數(shù)字鲸匿,但卻一時拿不出證據(jù)了爷怀。
最簡單的辦法,就是用實際測試再驗證一遍带欢,這時我已經(jīng)做好推翻自己的準備:)
SSD 還分隨機和順序 IO 嗎运授?
上圖引用了 IDF 關(guān)于 SSD 的演示文稿,“不管順序還是隨機寫入洪囤,都沒有尋址時間徒坡,因為它們都是被順序地寫到 NAND 里面去的×鏊酰”
SSD 還分隨機和順序 IO 嗎喇完?
這里的說明不只代表 Intel SSD ,所有以閃存為介質(zhì)的固態(tài)盤都是如此剥啤,通過 FTL “將新數(shù)據(jù)寫入新的物理地址锦溪,將原來的 LBA 地址標明無效并不可用”不脯,讓我想起了 NetApp WAFL 和 ZFS 文件系統(tǒng)。
以上是理論 基礎(chǔ) 刻诊,下面看看測試環(huán)境和測試結(jié)果防楷。
測試環(huán)境
首先,我可沒有 Exadata 那樣高大上的東西则涯,話說以我的 Oracle 水平也玩不動复局,現(xiàn)在拿給我玩也浪費了。
SSD 還分隨機和順序 IO 嗎粟判?
就拿自己用的 SL500 筆記本吧亿昏,正好系統(tǒng)盤已經(jīng)換成 SSD ——被譽為渣渣的三星 840 EVO (TLC ),湊合著做個驗證档礁。
如上圖角钩,由于 C 盤上安裝了操作系統(tǒng),不能影響正經(jīng)事兒呻澜,所以我在當初預(yù)留的 11GB 空間上創(chuàng)建了一個測試分區(qū)递礼,并且用 Iometer 將其“填滿”后開始測試。
這里說明 2 點:
1. 我測試的不是整盤羹幸,但 SSD 有 FTL 來實現(xiàn)磨損平衡脊髓,因此實際寫入的 LBA 范圍很可能比較大并在物理上不連續(xù),可以像 WAFL/ZFS 文件系統(tǒng)那樣永遠寫到新的位置睹欲。
2. 另外我是在 NTFS 文件系統(tǒng)上做的測試供炼,與直接測試裸盤有些差別,每種文件系統(tǒng) / 卷管理器通常都會有些緩存窘疮、元數(shù)據(jù)之類的,不過對本次測試影響不大冀墨。
SSD 還分隨機和順序 IO 嗎闸衫?
操作系統(tǒng)是 Windows7 64 位, Iometer 軟件版本 1.1.0-win64.x86_64 诽嘉,每次測試運行 2 分30 秒(我的 SSD 已經(jīng)過一段時間的“老化”)蔚出。我們看到 C 盤里的數(shù)據(jù)也不少,如果是機械硬盤這樣測試 Z 盤的話虫腋,只要沒有(對 C 盤操作) I/O 爭用就無所謂骄酗;而 SSD 則不同,整個盤的內(nèi)充滿數(shù)據(jù)的比例悦冀、以及碎片化程度都會影響到性能趋翻,特別是寫入性能。
由于 SSD 的特點盒蟆,不僅寫入閃存頁面速度沒有讀快踏烙,另外已經(jīng)寫入數(shù)據(jù)的頁面(大小 4KB/8KB)需要經(jīng)過塊( 64KB 以上)擦除才能再次寫入师骗,也就是通常所說的垃圾回收( GC )過程。相比之下機械硬盤不存在這些問題讨惩。
測試結(jié)果及分析
SSD 還分隨機和順序 IO 嗎辟癌?
SSD 隨機 / 順序?qū)懭胄阅軐Ρ龋P(guān)閉寫緩存)
為了避免寫緩存的干擾,我首先在關(guān)閉寫緩存的情況下運行了測試荐捻。根據(jù)以上圖表黍少,排除測試誤差情況因素,差距確實比較小处面。 SSD 在隊列深度為 1 時的 500 左右 IOPS 仍侥,也達到了我筆記本5400 轉(zhuǎn)機械硬盤的 10 倍。
結(jié)論初步有了鸳君,但是接下來我又面臨一個問題——之前對 Exadata X5 存儲節(jié)點 SQL flash read/write IOPS 的簡單分析如何解釋农渊?
*“ ExtremeFlash **全閃存節(jié)點為 377,000 **,這里是 SQL IOPS **已經(jīng)考慮到 ASM **冗余帶來的寫懲罰或颊,那么落到每個 SSD **(每節(jié)點 8 **個)上應(yīng)該就是 94,250 **——好像這個數(shù)字明顯超過了IntelP3600 **標稱的 8KB **寫 IOPS 33,000 *砸紊?
*那么 HighCapacity **大容量混合存儲節(jié)點的 192,000 **,落到 4 **塊閃存卡上 96,000 **寫 IOPS *也是類似的情況囱挑? ”
我們?nèi)匀灰?Oracle 給出的最大性能指標是落在 SSD 上的真實 IOPS 為前提 醉顽,如果順序?qū)懖荒鼙入S機寫更快的話,那這個數(shù)字是怎么測出來的平挑?
有 Oracle 的朋友給出了回答: “ **F160 ****( NVMe SSD ****)的指標和 P3600 ****不完全一樣游添,說用的是 eMLC ****, 8KB ****隨機寫入指標到 42000 ****”通熄,“我們的卡不是標準產(chǎn)品唆涝,比標準的卡性能更好,壽命更長唇辨±群ǎ” **
SSD 還分隨機和順序 IO 嗎?
Oracle 給出的 F160 性能確實比上表中的 IntelP3600 高赏枚,但距離我計算之后期望的數(shù)值還相差比較多亡驰。至于 eMLC 和壽命之說,感覺 Intel 又有點玩了數(shù)字游戲——我曾經(jīng)寫過 P3600 沒有像P3700 那樣標明 High Endurance Technology (HET) 閃存饿幅,但新發(fā)布同樣支持 5 年每天 3 次整盤寫入凡辱, 1.6TB 型號最大寫入數(shù)據(jù)量 10.7PB 的 S3610 (同容量的 P3600 為 8.76PB ),就標明了高耐久度 MLC 栗恩。
我們再看看還有啥提高性能的方法透乾。
SSD 還分隨機和順序 IO 嗎?
參考上圖,不知 Smart Scan 能否 將 **8KB ****數(shù)據(jù)塊整合成更大的 I/O **续徽?如此則寫入帶寬將會增加蚓曼。不過這違背了我們剛剛設(shè)定的前提。
增加隊列深度對隨機讀改善比較明顯钦扭,也就是發(fā)揮閃存的并發(fā)能力纫版,其實看前面關(guān)閉寫緩存情況下的 隨機 / 順序?qū)憸y試也是如此。
SSD 還分隨機和順序 IO 嗎客情?
上面的文字重新解釋了“ 隨機度 ”對性能的影響其弊,理由是 順序操作減少通道沖突,以及碎片回收的難度 膀斋。右邊柱狀圖中的差距是在什么條件下測得的呢梭伐?
還有過量冗余—— Intel 等廠商早就說過“減少 LBA 的訪問范圍可以提升性能、耐久性和服務(wù)質(zhì)量”仰担。右邊的折線圖最右端為 100% 隨機寫糊识,當 超量配置 ( OP )為 0% 時寫 I/O 很容易觸發(fā)垃圾回收;有了 20% 和 40% **空間冗余 **比例可以帶來顯著的寫 IOPS 提升摔蓝。
SSD 還分隨機和順序 IO 嗎赂苗?
SSD 還分隨機和順序 IO 嗎赶撰?
讓我們再來看看 Intel 當年的 SSD 320 是公布了怎樣的“作弊方法”——在 8GB LBA 范圍內(nèi)測試谍失,并打開寫緩存。其實消費級 SSD 公布的 IOPS 雌芽,有幾家不是這樣測的呢猜谚,甚至于 Fusion-io好像也這么干過败砂。
那么 Exadata X5 是不是也可以預(yù)留閃存容量呢——沒有說測試數(shù)據(jù)集一定要多大吧?可惜我的筆記本 SSD 太搓魏铅,在 11GB 分區(qū)內(nèi)測試也沒快到哪里去昌犹,不過可以打開寫緩存試試看。
SSD 還分隨機和順序 IO 嗎沦零?
SSD 隨機 / 順序?qū)懭胄阅軐Ρ龋ù蜷_寫緩存)
如上圖祭隔, 4 條不同顏色的實線表示 IOPS ,以左邊的坐標軸為單位路操; 4 條對應(yīng)顏色的虛線表示延時(單位毫秒),以右邊的坐標軸位單位千贯。從左到右的 4 個點屯仗,代表每項測試我都運行了 4 遍。我的 Excel 水平不高搔谴,大家湊合看看:)
首先魁袜,我在隊列深度設(shè)為 1 的情況下對比了 8KB 隨機寫和順序?qū)懀捎趯懢彺娴囊蛩兀?2 次測試的 IOPS 波動比較大峰弹,而到了第 3 次以后則趨于穩(wěn)定并出現(xiàn)明顯一些的差距店量。將隊列深度改為32 之后,隨機寫 IOPS 并沒有明顯的改善鞠呈。
至于隊列深度 32 的 8KB 順序?qū)懭谑Γ皇悄脕碜鰝€參考數(shù)字,畢竟我都是在有限的時間內(nèi)運行測試蚁吝。8KB 是 Oracle OLTP 應(yīng)用的典型 IO 尺寸旱爆;對于批量插入和 redo log 這樣的小數(shù)據(jù)塊順序?qū)懖僮鳎也淮_定多線程 / 進程能夠發(fā)揮到什么程度窘茁。由于我在數(shù)據(jù)庫方面并不專業(yè)怀伦,所以這里就不妄下判斷了。
嘗試給出一個結(jié)論: Intel 在資料中提到過隨機度對 SSD 寫入性能的影響(原因前面解釋過了)山林。除了過量冗余能夠提高寫入性能之外房待,根據(jù)測試, **打開寫緩存在一些情況下也可以改善****SSD 8KB ****順序?qū)?IOPS **(長時間測試效果有待驗證)驼抹。
極限測試和 POC ****桑孩、讀 IOPS ****如何
許多消費級 SSD 大膽使用 DRAM 寫緩存來提高 IOPS 性能,我在《 SSD 緩存掉電保護: 3 種方案的利與弊 》一文中提到有的企業(yè)級 SSD 也這么做砂蔽,但要用電容來做保護洼怔; 這樣對性能的效果與控制器 /RAID 卡的寫緩存,延時將數(shù)據(jù)持久化到硬盤 /SSD 的情況類似左驾。
盡管可能會帶來數(shù)據(jù)風險镣隶,但對于極限性能測試來說,快一些有什么不好呢诡右?正如同行朋友所說安岂,有多少 POC 會老老實實地使用 write-through 、 SYNC 這樣的參數(shù)呢帆吻?
SSD 還分隨機和順序 IO 嗎域那?
最后我還順手做了個讀測試,可以看到在并發(fā)足夠(隊列深度 32 )的情況下 8KB 隨機讀 IOPS能夠達到甚至超過 8KB 順序讀猜煮,這時我的筆記本 CPU 占用率已達 80-90% (還有殺毒軟件什么的次员,就算是個小小的生產(chǎn)環(huán)境吧),這個 SSD 可能還有潛力王带。
另一方面淑蔚,如果隊列深度只有 1 ,那么順序讀還是比隨機讀要快不少愕撰,我理解這是預(yù)讀的效果刹衫。
本人的技術(shù)水平有限醋寝,歡迎大家批評指正!文中如有不夠嚴謹?shù)挠^點带迟,權(quán)且當作給大家拓展思路