性能分析基礎知識(3):磁盤

前兩篇文章介紹了CPU和內存,本文繼續介紹性能測試中和磁盤相關的基礎知識。

機械硬盤

在這裏插入圖片描述
我們關注的性能指標:

  1. 磁盤容量
  2. 磁盤轉速
  3. 平均訪問時間
  4. 傳輸速率

其中,平均訪問時間決定了磁盤的IOPS(每秒的讀寫次數)。

這裏要注意,我們花樣百出的測試方法所得到的磁盤性能數據,受到了RAID卡、數據分佈、讀寫的塊大小、CPU、內存等因素的影響,只能與磁盤的性能近似,並不具有普遍的代表性。因此,磁盤性能測試應模擬真實的應用場景進行測試,不能迷信官方給出的性能指標。

存儲介質對比

隨着近些年發展,固態硬盤人氣越來越高,但是機械硬盤好在成本較低,而從存儲介質的角度看,內存條也應占有一席之地。不同存儲介質的對比如下表:
在這裏插入圖片描述
其中,SSD的硬盤有page和block的概念。Page大小爲4K,Block大小爲512K。

什麼是寫放大?
SSD一次寫的單位是page,但是SSD的Write只能寫到空的page上,對於之前寫過的page,必須先進行一次Erase。而Erase的單位是Block,所以如果一個page的數據刪掉之後,要想再寫到這個page上,必須經過以下三步:

  1. 將在同一個Block的其他page讀出來。
  2. 將整個Block Erase。
  3. 然後將整個Block的數據寫下去。

顯而易見,不同的存儲介質有不同的優勢,大型的存儲公司基本上都設計了自己的分佈式文件系統來充分發揮各種存儲介質的優勢,如GFS、TFS等。按數據的熱度進行分層存儲,使用新型的存儲引擎,雲存儲行業如火如荼。

磁盤陣列

磁盤陣列(Redundant Arrays of Independent Drives,RAID),有“獨立磁盤構成的具有冗餘能力的陣列”之意。

RAID結構

在這裏插入圖片描述

  • RAID處理器是一個PCI從設備,接受並執行來自系統的命令。同時佔用PCI中斷,代表SCSI磁盤子系統向系統提出中斷請求,請求佔用PCI總線,返回對系統命令的響應,如輸送SCSI硬盤上的數據。
  • SCSI控制器爲連接磁盤設備的統一擴充接口
  • RAID中也有緩存(CACHE MEMORY),提供緩存數據、預讀(Read-ahead)和回寫(Write-back)功能,提高磁盤IO性能。
  • XOR芯片:專門用來做RAID 3、5、6等這類校驗型RAID的校驗數據計算用的。

RAID級別

在這裏插入圖片描述

RAID級別的對比

在這裏插入圖片描述
RAID是可以疊加的,這裏有個思考題RAID10和RAID01哪個冗餘度高呢?

  • RAID10:左邊損壞1塊盤,右邊還可以容忍一塊盤損壞而不影響整體的數據;冗餘度=2
  • RAID01:左邊損壞1塊盤,此時左邊已經沒有用,右邊再損壞一塊盤必然影響整體數據的可用性;冗餘度=1

RAID10要比RAID01的冗餘度高。

RAID Cache

首先介紹上文中的兩個概念:

Write-through 透寫:系統的寫磁盤操作並不利用陣列卡的Cache,而是直接與磁盤進行數據的交互
Write-back 回寫:利用陣列Cache作爲系統與磁盤間的二傳手,系統先將數據交給Cache,然後再由Cache將數據傳給磁盤

RAID Cache對於磁盤讀寫的影響:

  • 連續讀:對於小塊連續讀io,cache優化效果最好。對於大塊連續讀io,優化效果不明顯。
  • 連續寫:對於連續小塊寫io,如果cache是write back模式(通常都應當write back),由於io size比較小,cache剩餘空間充裕,不至於頻繁引起cache flush操作,加之系統不繁忙,有更多時間去進入算法流程對這些io進行優化調度重排等,所以此時cache效果良好。 對於連續大塊寫io,cache flush頻繁,整體瓶頸歸於磁盤,cache優化不明顯,僅作緩衝之用。
  • 隨機讀:瓶頸歸於磁盤,cache優化不佳,只作爲緩衝之用。
  • 隨機寫:對於隨機小塊寫io,如果cache是write back模式,則cache表現出來的優化效果良好,使得程序有充分時間去重排、優化這些io數據從而爲更高效的並行寫入磁盤做準備。對於隨機大塊寫io,此時cache效率最爲低下,整體瓶頸歸於磁盤但是表於cache,因爲cache快速被充滿而後端磁盤出於瓶頸態,此時系統最爲難受。

文件訪問方式

操作系統從RAID卡讀取數據,但操作系統本身也是經過優化的,我們可以先看看Linux的標準文件訪問方式:
在這裏插入圖片描述

  • 當應用程序調用read接口時,操作系統檢查在內核的高速緩存有沒有需要的數據,如果已經緩存了,那麼就直接從緩存中返回,如果沒有,則從磁盤中讀取,然後緩存在操作系統的緩存中。

  • 應用程序調用write接口時,將數據從用戶地址空間複製到內核地址空間的緩存中,這時對用戶程序來說,寫操作已經完成,至於什麼時候再寫到磁盤中,由操作系統決定,除非顯示調用了sync同步命令。

這就解釋了爲什麼第二次讀文件的時候非常快,以及爲什麼有時候寫要比讀快很多。關於IO訪問的幾種方式,可以參見這篇文章:https://www.cnblogs.com/JohnABC/p/6229847.html。


關注麻辣軟硬件,獲取更多的軟硬件知識

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章