進行磁碟格式化(Format)這個動作時,檔案系統就會被建立在磁碟系統之上,也就在磁碟系統上記錄存取檔案的所需的資料結構,像是sector的大小,有多少block可供使用等等。同樣的磁碟,可以依據需求規劃成不同的檔案系統,其實也就是在上面建立所屬的資料結構及保留的空間而以。一樣的磁碟,不一樣的檔案系統,卻有著不同的效能的表現,所以看起來磁碟不是關鍵,檔案系統才是主角。沒錯,但話雖如此,磁碟系統的結構卻會影響檔案系統的效能,今天我們就要來稍為討論一下這個問題。
進行磁碟格式化(Format)這個動作時,檔案系統就會被建立在磁碟系統之上,也就在磁碟系統上記錄存取檔案的所需的資料結構,像是sector的大小,有多少block可供使用等等。同樣的磁碟,可以依據需求規劃成不同的檔案系統,其實也就是在上面建立所屬的資料結構及保留的空間而以。一樣的磁碟,不一樣的檔案系統,卻有著不同的效能的表現,所以看起來磁碟不是關鍵,檔案系統才是主角。沒錯,但話雖如此,磁碟系統的結構卻會影響檔案系統的效能,今天我們就要來稍為討論一下這個問題。
選擇檔案系統的條件,不外乎就是相容性、安全性(加密及容錯)以及效能了。最常拿來評比效能的指標就是IOPS(Input/Output Operations Per Second),每秒有幾個I/O動作;而每秒有幾次I/O動作,乘上每個I/O動作能傳輸的資料量(Bytes),就是傳輸的效率 (Throughput)了。雖然說不同的檔案系統設計會影響效能的表現,但是磁碟系統本身的結構,卻有著決定性的因素。比方說,慢速的軟式磁碟片就算搭配在好的檔案系統,效能也比不上快速的硬碟。影響磁碟系統效能表現主要有block的大小、磁碟的種類、磁碟的轉速、傳輸的介面,以及磁碟系統組成的架構等等。
我們知道block或sector是資料存取的基本單位,一個固定大小的檔案,如果用較大的block來儲存,只需佔用較少的block,也就需要較少的存取動作,效率一定比較小的block快。但是較大的block也容易造成空間的浪費,因為不是每個block都剛好裝滿資料,多出來的空間就形成浪費。而且並不是你想要設定block要多大就有多大,這也跟硬體有關系。像是要在一次I/O中完成一個block的存取,你的磁頭(Head)也需要有這樣的能力才行。有時候我們指稱的block不是像前面剛剛說的是磁碟上的sector,而是每一個I/O動作命令下來後,傳回給作業系統的資料量。像是在磁碟陣列系統中,我們的block通常有數KB甚至幾MB的大小,這是因為磁碟控制卡本身有能力傳輸這樣的資料量。
Block 越大,I/O的動作越有效率。但是如果磁碟系統動作慢,最後效果還是出不來。就像車神舒馬克騎腳踏車,也比不上我騎機車快。磁碟系統運作的效能,跟他的磁頭數量、磁碟轉速,以及傳輸介面息息相關。磁頭越多(表示碟片也越多),一次存取的資料也就多;磁片轉得越快,磁頭搜尋資料的時間也就少,相對也就較快 (15000轉的磁碟IOPS就比7200轉的磁碟快上一倍了);傳輸的介面更是先天的限制,SAS/SCSI界面就是要比IDE界面來得快,這是因為磁碟上的控制晶片不同所致。
磁碟系統並不侷限在單一磁碟機上,我們可以將數顆硬碟整合在單一機櫃中,透過RAID的控制而形成一個獨立的磁碟系統。譬如說採用RAID 0的架構時,所有的硬碟串成單一的磁碟,就相當於我有比單顆硬碟還要多N倍的碟片與磁頭(N等於硬碟的數量),這時我可以將讀取與寫入的動作分開在不同硬碟上,如此的速度肯定是快上加快。只是RAID 0因為沒有容錯的能力,任何一顆硬碟毀損都會使得整個磁碟系統失效,所以實務上就會採行RAID 1/5/6等等,當然效能也就不同了,這部分的內容等將來有機會再來詳述。另外,再怎麼快的磁碟,也比不上完全無機械動作的SSD(固態硬碟)。他是由Fresh RAM所組成,完全是電子訊號在傳遞,無需電/磁/物理位置的轉換。
想要進一步了解磁碟系統的IOPS,請參考http://en.wikipedia.org/wiki/IOPS。