為什麼不能用分散式磁碟的方式來避免磁碟 IO 吃緊?

我本人不太了解硬體,自己是小半個發燒友,有時候也研究下。

最近我給我的win8筆記本配了一塊msata的ssd,做了intel快速啟動。 多餘的空間我轉移了部分Program Files (x86)里的東西。然後就發現磁碟佔用原來是可以分布的,磁碟0和磁碟1同時工作,磁碟0是c,d,e盤;磁碟1額外的空間格式化成了f盤 如果磁碟0吃緊,那麼也不影響磁碟1的Program Files (x86)內程序開啟速度。當然也有少量影響,比如很多信息其實還得從磁碟0去訪問,比如C盤。

這樣,讓我產生幾個疑問:

1. 磁碟IO是否問題在於磁碟本身,主板根本不存在問題

2. 為什麼在當前磁碟IO嚴重影響PC整機性能的情況下 不採取分散式磁碟解決磁碟讀寫IO並發問題呢

其實要分布也不難啊, 比如每塊HDD磁碟的讀處理能力是100M/S 那麼,為了提升這個能力我就把數據分發放在3個HDD上。這個速度可以理論上 提高3倍啊在物理上他們分布在3個磁碟里,在數據上 他們只體現成邏輯區C: 這個軟技術我覺得不難吧???

------------------------------------

分散式磁碟 是 我隨意說的個名詞,為了不混淆概念,我特意說明一下:

這個取自分散式構架的分布基礎原理,比如壓力負載分布等。用在這裡 是為了詢問 到底在磁碟IO上能不能做單台PC的本地磁碟組以多塊磁碟的方式來提升磁碟IO性能。

剛才有人告訴我,這個技術其實有個專業名詞叫RAID。 RAID的話我老聽說,但一直沒深究這玩意到底幹嘛的。

感謝作答的幾位。 讓我對這個問題有了更多的知識認知,你們提點一些,加上我自己的搜索,總算讓我 更明白了。

-------------------------------------

打造自己的起高速硬碟--雙硬碟RAID0全攻略

我百度了一下。已經知道了原來raid0技術就可以把2塊磁碟合成1塊,並且IO並發效率能夠提升一倍。如下:

  注意事項

  1.如果要做RAID 0必須至少有兩個硬碟,另外,一旦將硬碟組成RAID陣列就會丟失原來的數據。

  2.選擇硬碟的時候最好完全一樣,否則會降低性能,此時的理論速度也只是慢硬碟速度的兩倍。

  3.如果RAID 0陣列中的一塊硬碟損壞,硬碟陣列的數據將全部丟失,造成損失。

如上,我知道了這種技術其實存在,並且少量人也正在使用。

也知道了其風險 raid0 會讓硬碟容易損壞么?

如果用2個磁碟組raid0 那麼磁碟損壞率就提高了1倍。 但由於本身磁碟損壞率不高, 所以這個提高一倍也不高。

-------------------------------------

另外我還找到了個專門找多塊ssd做raid0測試的帖子。。。

感受瘋狂速度 金士頓多SSD組RAID實戰-IT168 內存硬碟專區


答主已經明白RAID技術就是答主所設想的「分散式磁碟方案」了。

之所以這種技術沒有在PC上普及,主要原因是需求、成本、體積和複雜性。最簡單的RAID0技術會讓磁碟組的容災能力大幅下降,磁碟組有一塊磁碟故障則整個組的數據完蛋,所以實際應用的很少;能夠提供較好容災能力的RAID5、RAID6成本較高,不僅需要犧牲一到二塊磁碟的空間,而且需要性能很好的控制卡才能提供較好的IO性能,而且陣列組建複雜,一般用戶極少使用。另一方面,普通用戶並不需要很高的大文件IO性能,所以用HDD組建RAID帶來的效果微乎其微;SSD出現後,普通用戶所需要的較高小文件IO性能又可以用單塊SSD滿足,所以SSD RAID也沒有多大意義。

但對於伺服器、工作站來說,有些場景下用戶需要的大文件或者小文件IO性能非常高,同時對存儲容量的需求極為龐大,又需要較好的容災能力,用多HDD或SSD組建RAID就成了自然的選擇。如今一個典型的16盤RAID6陣列,在使用常見的7200轉硬碟時可以提供高達2G/s的大文件持續讀寫能力,使用高性能SSD時讀寫能力更可以超過3G/s;基於多個PCIe SSD存儲卡組成的高性能RAID存儲伺服器即使在進行4k小文件讀寫時都可以達到上百萬IOPS(亦即4G/s)的恐怖性能。當然,這些方案的成本也根本不是一般的PC發燒友能想像的,由於距離消費者太遠,所以也很少有普通用戶知道它們的存在。至於這麼高的性能用在哪裡?比如影視後期工業比較重視大文件持續讀寫性能,典型的4k raw視頻的碼率高達1G/s以上,有時工程師需要同時處理多條視頻,那麼3G/s的存儲系統也只能說是湊合用;大型資料庫要求變態的小文件讀寫能力,IOPS達到上百萬有時都遠遠滿足不了需求,以至於需要將資料庫轉移至內存中才夠用。相比之下一般PC用戶的需求就都是毛毛雨了,所以隨便買塊SSD就可以跑的很歡暢啦。


(☆_☆)講了半天不就是RAID 0嗎。你有錢可以做啊,一般人不會做的,3個1T的盤比1個3T的硬碟要貴得多啊。


扯淡

SSD與硬碟,最大的提升是隨機性能提升,並不是在於順序讀取性能,

機械硬碟做RAID很容易提升順序讀取性能的,即使最頂級的SAS 15000轉做RAID0,也會因為磁碟尋道物理原因是無法與SSD比擬隨機性能。(ps區區20M隨機頂天,和SSD最低端就100M沒得比)

這不,要求性能的場景中,SSD就成為了標配。


忍不了了, @王軍華 已經完全回答到點兒上了,題主還喋喋不休地在評論里說別人不懂,其實是自己不懂。

我告訴你為什麼你再怎麼分散式都沒用:

傳統機械硬碟的隨機讀取速度,取決於磁頭臂的移動速度。

從指令下達,到數據開始傳輸,平均延遲在7ms ~ 13ms。這個延遲是你再怎麼做分散式都不可能降低的。

這個都不知道就不要說自己是小半個發燒友了。


關鍵在於怎麼定義 性能

IO性能主要由兩個參數定義:IOPS(每秒的IO個數)和RT(Response Time)。而RT等於每個IO的服務時間乘上IO隊列長度。

在一個非常簡化的模型里,如果操作系統每一時刻只能向磁碟子系統發一個IO,如果所有的應用都是同步IO模型,也就是說,如果上一個IO不返回,下一個IO就不發下去,那麼多個機械硬碟組成的RAID對隨機IO的性能是沒有幫助的。

但是,絕大部分現代操作系統不是這樣設計的。

絕大部分現代操作系統都為給IO子系統排隊列,在隊列里對IO做一些合併優化。很多伺服器應用都是非同步IO模型。絕大部分桌面操作系統都是多任務操作系統,多個應用會同時去訪問IO子系統。

所以,把多個機械磁碟以一定的方式組合起來,對隨機IO的性能是有提高的,而且通常提高的倍數等於參與這個組合的機械磁碟的個數。因為這個新的組合後的邏輯磁碟,相對於單個磁碟來說,在同一時刻能處理更多的IO。因此IOPS會提高,RT因為IO隊列長度的縮短也會提高(每個IO的服務時間不變)。

另外,實際上即使對於單個機械磁碟,也有緩存和queue depth,也是有能力接受多個IO並進行一定的優化的。

相反,迸發度較低的順序IO,磁碟多了以後提高反倒不是很明顯。當然如果這一組磁碟前面有個有計算能力和內存的控制器,可以預讀和做full-stripe write優化,那提高也是很大的。


要提高磁碟 I/O 的性能還得上 SSD。

磁碟瓶頸一般是指 HDD 的隨機讀寫太低,因此這個時候即使用上 RAID 0 隨機讀寫依然不高,磁碟 I/O 的瓶頸依然存在。

而如果你的瓶頸是順序讀寫無法滿足需求,此時就可以考慮通過 RAID 0解決。當然用SSD也行,不過價格太高了,容量還低。

不過對於大眾來說,磁碟 I/O 的瓶頸出在隨機讀寫,故用 RAID 0 的意義不大,而 SSD 目前價格並不便宜,因此也沒有完全普及,對於大眾來說,磁碟瓶頸還得存在個3、5年。


應用題:一個女人懷孕生子要280天,皇帝有十個妃子,那皇帝要等多少天能有一個自己的孩子??


提主說的分散式應該就是Raid吧。

但是無論如何都不可能無限的提升磁碟IO性能,機械硬碟更是不可能提升響應速度。

能夠提升的只是順序讀寫速度,機械硬碟的隨機讀寫和響應速度無法通過這個來有效提升。


1、題主這個知識水平不能稱為小半個發燒友啊

2、IO瓶頸確實主要在盤那頭,不在主板

3、很多人都說過了,並行利用硬碟的方式是RAID。老技術,自己組建也沒什麼難度。

4、並發IO性能,這個問題有些模糊不清,你是要解決連續讀寫速率還是隨機讀寫速率?並行類RAID會提高連續讀寫速度,但是機械硬碟的尋道速度是物理限制,無法克服,也就是無法有效率地提高隨機讀寫性能

5、想要IO性能,SSD大法好(RAID0的話會降低隨機性能)


RAID 0 提高寫入速度,犧牲可靠性

RAID 1 提高順序讀取速度和可靠性,犧牲存儲空間

SSD 全面提高順序、隨機讀寫效率,全方面解決尋道延遲問題

印象中 Windows (8?)提供了某種類似 Apple Fusion Drive 的設置,同時利用 SSD 扮演 HDD 的「前端」來提高部分頻繁訪問文件的訪問速度;Linux 提供了 dm-cache 利用 SSD 作為 HHD 的緩存,區別在於 Linux 方案損失了 SSD 的整個容量。

不依賴 Windows 或 OS X 等系統的還有 Seagate 的 Hybrid drive,但這種獨立於系統 I/O 組件的緩存可能出現各種緩存抖動的情況,性能不一定可靠。

答主從不關心 Windows,相關信息如有偏差就當我沒說。

主板要做的是提供足夠的帶寬(如 SATA 6Gb/s 帶寬)給 SSD 以最大發揮功效。

----

如果題主不是程序員的話,花錢上 SSD 就對了。新機器基本都有 SATA 6Gb/s 介面了,就算是 3Gb/s 的大致也夠;SSD 越大速度越快。

多的說了也白搭,「怎麼做更好」的事情交給程序員去考慮就好。


是的。

這種思路在Storage server中應用的很廣泛。


RAID0是可以多路同時寫,所以比原來快了。

而如果用分散式的機器寫,也是相當於多路同時寫,只不過也在多個機器上同時寫。要寫的內容發到別的機器上是很快的,因為網卡速率比硬碟IO速率高很多。


你要的不是分散式 就是磁碟陣列(RAID)

如果你是台式機的話 可以用多塊硬碟組 RAID 0 (現在的主板一般都帶陣列功能)

我以前技嘉主板是用三塊500G機械盤做陣列 持續讀寫性能爽到爆 但瞬間讀取性能很差

後來直接用SSD了 主要是4k讀寫性能好

如果你想問SSD能不能RAID 我提前告訴你 SSD做RAID不能開啟TRIM 除非專用的RAID卡 否則SSD性能會越來越差

如果你是做3D動畫,搞音視頻剪輯的 特別追求磁碟速度 可以買PCI-E 3.0介面的SSD 比如OCZ或華碩的 1G/s讀取

如果是網路伺服器 SAS硬碟陣列划算 一般伺服器都帶陣列卡 都是SAS介面的. 高端點的有SSD陣列卡的. 還有就是用Linux的LVM能把多塊磁碟變成連續的 但不提升速度.

以上是工作站和伺服器 家用電腦的話 一般單塊SSD就行. 買個NAS也很實用 還解決了多設備間共享文件 NAS一般至少兩塊硬碟陣列 除了網路共享還可以直接通過USB3.0/火線/eSATA連接 速度也是杠杠的

關於你的疑問1

主板也有關係 比如主板提供的是SATA2介面 最大讀寫速度也就300M/s 而SATA3介面則是600M/s (現在SSD基本都能達到500M/s讀取)

IDE介面基本淘汰 USB3.0介面能到120M/s的讀取就很NB了 火線介面400M/s 雷電介面太冷門好像西數有一款能達到230M/s


回復的內容無法加格式,只好自答一下。

@胡鐵軍

感謝回復。

你的觀點和上面有的朋友回答不一樣。他們有的認為多任務,多線程場景需要添加的是SSD;堆磁碟RIAD技術對多任務並發訪問沒有幫助或幫助很少。 但是我更加同意你的觀點。

見引用:

匿名用戶(作者) 回復 鄭禮

同時響應多個程序還是用SSD吧,HDD尋道還是要時間的

-----

其實簡單地說,

題主所謂的分散式磁碟方式,姑且理解為RAID0,的確可以增加連續讀寫的速度。

但是「磁碟IO吃緊」往往是由於隨機讀寫能力不足導致的。

而RAID0無法增加隨機讀寫能力,就如其它答題者所說的受限於機械硬碟的物理結構。

所以"不能用分散式磁碟的方式來避免磁碟 IO 吃緊"。

-----

1.在磁碟控制器、CPU性能足夠的情況下是這樣的。

2.個人用PC一般需求隨機讀取性能,而不是順序讀取性能。而RAID 0是無法提高隨機讀取性能的。

原因:

磁頭移動距離不會因為磁碟數多了而減少。

-----

他們的這些觀點,或多或少的與你的回答意見不同。

我來談談我所理解的磁碟高並發訪問的場景與見解

根據我這麼多年使用電腦的經驗(撇開大容量高質量的SSD不談),我發現操作系統剛剛啟動完成(比如win8剛剛輸入完密碼) 的時候, 可以看見磁碟佔用率飆升得很高很高。 還有一些時候比如殺毒軟體間歇任務期間,操作系統某任務期間,chrome/opera瀏覽器大量開啟web頁面並等待載入期間。 等時候, 磁碟佔用率都會有不同程度的飆升。

而,正是這些各種並發的磁碟IO訪問讓磁碟的佔用率居高不下(80%-100%)

而多數情況下影響用戶體驗感的都與:大量輸入但不產生回饋 並且界面嚴重卡死 有關。而這種現象在部分非IT人士(比如行政人事,財務,設計等人員的電腦上尤為突出) 他們的辦公電腦沒有配備ssd,他們甚至還用的i3+很老的機械硬碟。 他們有時候會N開很多瀏覽器外加很多office軟體,辦公軟體等等等等。 所以,他們的卡, 完全是卡在了並發上。

另,我並不是說要費事的給他們都配上廉價的低容量的雙硬碟HDD-RIAD0。 我需要探討一下磁碟並發的實際用途有無意義;並且我自始自終沒有要討論SSD。我至始至終都是要討論磁碟並發以及詢問資深人事這個領域的技術。

我再來談談我所理解的最近SSD老是炫耀的幾個參數: 4k, 隨機大小的文件讀取等等。

根據我反覆測試發現(測試方法不一定準確,共同探討么,有錯誤指出就是了,認為我水平太低,不在一個起跑線上,提的問題完全不值得一答的人完全可以不回答我的問題,你說對吧。 笑 :)

這個所謂的隨機讀取和4k文件 所指的 才是: 順序的快速訪問, 而不是高並發訪問。 這個所謂的4k文件讀取能 提升的完全不是高並發,而是單線程下面降低文件順序載入的時間。這個應用場景很多很多,比如文件的複製操作(從硬碟複製到U盤),遊戲的啟動, 程序IDE的啟動(比如eclipse) , office軟體的啟動等等等等,一般計算機用戶都會很頻繁的操作。但是,一般用戶對這個loading稍微有點久的抱怨並不是特別劇烈。計算機用戶最反感的肯定是磁碟100%佔用率的時候自己的各種輸入無響應,各種界面發生磁碟IO阻塞後的(失去響應型假死)

這也印證了部分答主的回答:磁頭要靠機械移動去獲取數據,面對小而碎的文件,HDD一個個去讀的話顯得力不從心

我不否認這個事實,即使RAID0上了3塊HDD硬碟也只是在很低的性能上再*3,提升不大。但是我還是上面說過的話:

1. 我當前帖子沒有要討論SSD,我要討論的是磁碟並發

2. 多數用戶抱怨最大的不是遊戲lodading太長,而是其他時候多任務,多線程,多種軟體同時打開的時候,磁碟IO並發導致磁碟佔用率100%, 導致機器嚴重延遲所帶來的不爽。

同時我也象徵性的做了個測試,以此佐證我的觀點

我用文件拷貝的方式進行了一次測試。 發現hdd對一個普通U盤拷文件的時候,速度甚至有降低到100k/s的時候。而這無疑會大大增加文件拷貝的速度。但這個時候我打開windows任務管理器,發現磁碟佔用很低很低,我的各種軟體跑得很流暢。

我相信SSD+USB3.0的配合將大大提升這個場景的性能,但我還是重複上面的話吧:

1. 我當前帖子沒有要討論SSD,我要討論的是磁碟並發

2. 多數用戶抱怨最大的不是遊戲lodading太長,而是其他時候多任務,多線程,多種軟體同時打開的時候,磁碟IO並發導致磁碟佔用率100%, 導致機器嚴重延遲所帶來的不爽。

根據以上論證,也證明了磁碟並發IO的意義, 以及4k隨機讀寫有什麼意義。

可以初步得到結論:

1. 在高並發的場景里, 多線程,多進程,並且磁碟IO訪問密集的情況下,配置RAID0是很有意義的。而當年在U式伺服器上廣泛採納這個技術(主要是RAID5) 也是基於此:提升高並發。

同時也糾正了部分答主所帶來的謬誤: RAID0技術不會帶來磁碟IO高並發的性能提升 SSD的隨機讀取增加了高並發IO的處理能力

2. SSD的高並發處理能力的體現並非4k/隨機小文件處理能力。 而是AS SSD Benchmark的第一項數值 所體現的。

3. SSD的4k參數強可以提升單線程loading場景,載入各種文件的操作的速度(因為他是隨機讀取,而不是機械硬碟的物理式查找) 但這項能力顯然和高並發磁碟IO無關。

@Tong Chia@王強 .

感謝 @張羽 答題。 我們在這個貼里有大量討論, 不妨參與參與 。


推薦閱讀:

做 APP 比做硬體還難?Misfit 設計師談軟體交互思路
辦公用機,win7系統(足夠性價比的話新平台也可以)帶顯示器2000-3000預算。?
ADC轉換,其內部參考電壓是怎麼穩定的?
關於寫配置這一件小事(一) —— CPU篇

TAG:信息技術IT | 硬體 | 硬碟 |