Linux運維---1.磁碟相關知識

来源:https://www.cnblogs.com/shiyw/archive/2020/02/27/12371918.html
-Advertisement-
Play Games

一 磁碟物理結構 (1) 碟片:硬碟的盤體由多個碟片疊在一起構成。 在硬碟出廠時,由硬碟生產商完成了低級格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌(Track),還將磁軌劃分為若幹個扇區(Sector),每個扇區可存儲128×2的N次方(N=0.1. ...


一 磁碟物理結構

(1) 碟片:硬碟的盤體由多個碟片疊在一起構成。

在硬碟出廠時,由硬碟生產商完成了低級格式化(物理格式化),作用是將空白的碟片(Platter)劃分為一個個同圓心、不同半徑的磁軌(Track),還將磁軌劃分為若幹個扇區(Sector),每個扇區可存儲128×2的N次方(N=0.1.2.3)位元組信息,預設每個扇區的大小為512位元組。通常使用者無需再進行低級格式化操作。

 

(2) 磁頭:每張碟片的正反兩面各有一個磁頭。

 

(3) 主軸:所有碟片都由主軸電機帶動旋轉。

 

(4) 控制集成電路板:複雜!上面還有ROM(內有軟體系統)、Cache等。

 

二 磁碟如何完成單次IO操作

(1) 尋道

當控制器對磁碟發出一個IO操作命令的時候,磁碟的驅動臂(Actuator Arm)帶動磁頭(Head)離開著陸區(Landing Zone,位於內圈沒有數據的區域),移動到要操作的初始數據塊所在的磁軌(Track)的正上方,這個過程被稱為尋道(Seeking),對應消耗的時間被稱為尋道時間(Seek Time);

(2) 旋轉延遲

找到對應磁軌還不能馬上讀取數據,這時候磁頭要等到磁碟碟片(Platter)旋轉到初始數據塊所在的扇區(Sector)落在讀寫磁頭正下方之後才能開始讀取數據,在這個等待碟片旋轉到可操作扇區的過程中消耗的時間稱為旋轉延時(Rotational Latency);

(3) 數據傳送

接下來就隨著碟片的旋轉,磁頭不斷的讀/寫相應的數據塊,直到完成這次IO所需要操作的全部數據,這個過程稱為數據傳送(Data Transfer),對應的時間稱為傳送時間(Transfer Time)。完成這三個步驟之後單次IO操作也就完成了。

根據磁碟單次IO操作的過程,可以發現:

單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間

進而推算IOPS(IO per second)的公式為:

IOPS = 1000ms/單次IO時間

三 磁碟IOPS計算

不同磁碟,它的尋道時間,旋轉延遲,數據傳送所需的時間各是多少?

1. 尋道時間

考慮到被讀寫的數據可能在磁碟的任意一個磁軌,既有可能在磁碟的最內圈(尋道時間最短),也可能在磁碟的最外圈(尋道時間最長),所以在計算中我們只考慮平均尋道時間。

在購買磁碟時,該參數都有標明,目前的SATA/SAS磁碟,按轉速不同,尋道時間不同,不過通常都在10ms以下:

轉速

平均尋道時間

15000rpm

2~3ms

10000rpm

3~5ms

7200rpm

8~9ms

2. 旋轉延時

和尋道一樣,當磁頭定位到磁軌之後有可能正好在要讀寫扇區之上,這時候是不需要額外的延時就可以立刻讀寫到數據,但是最壞的情況確實要磁碟旋轉整整一圈之後磁頭才能讀取到數據,所以這裡也考慮的是平均旋轉延時,對於15000rpm的磁碟就是(60s/15000)*(1/2) = 2ms。

3. 傳送時間

(1) 磁碟傳輸速率
磁碟傳輸速率分兩種:內部傳輸速率(Internal Transfer Rate),外部傳輸速率(External Transfer Rate)。

內部傳輸速率(Internal Transfer Rate),是指磁頭與硬碟緩存之間的數據傳輸速率,簡單的說就是硬碟磁頭將數據從碟片上讀取出來,然後存儲在緩存內的速度。

理想的內部傳輸速率不存在尋道,旋轉延時,就一直在同一個磁軌上讀數據並傳到緩存,顯然這是不可能的,因為單個磁軌的存儲空間是有限的;

實際的內部傳輸速率包含了尋道和旋轉延時,目前家用磁碟,穩定的內部傳輸速率一般在30MB/s到45MB/s之間(伺服器磁碟,應該會更高)。

外部傳輸速率(External Transfer Rate),是指硬碟緩存和系統匯流排之間的數據傳輸速率,也就是電腦通過硬碟介面從緩存中將數據讀出交給相應的硬碟控制器的速率。

硬碟廠商在硬碟參數中,通常也會給出一個最大傳輸速率,比如現在SATA3.0的6Gbit/s,換算一下就是6*1024/8,768MB/s,通常指的是硬碟介面對外的最大傳輸速率,當然實際使用中是達不到這個值的。

這裡計算IOPS,保守選擇實際內部傳輸速率,以40M/s為例。

(2) 單次IO操作的大小
有了傳送速率,還要知道單次IO操作的大小(IO Chunk Size),才可以算出單次IO的傳送時間。那麼磁碟單次IO的大小是多少?答案是:不確定。

操作系統為了提高 IO的性能而引入了文件系統緩存(File System Cache),系統會根據請求數據的情況將多個來自IO的請求先放在緩存裡面,然後再一次性的提交給磁碟,也就是說對於資料庫發出的多個8K數據塊的讀操作有可能放在一個磁碟讀IO里就處理了。還有,有些存儲系統也是提供了緩存(Cache),接收到操作系統的IO請求之後也是會將多個操作系統的 IO請求合併成一個來處理。

不管是操作系統層面的緩存,還是磁碟控制器層面的緩存,目的都只有一個,提高數據讀寫的效率。因此每次單獨的IO操作大小都是不一樣的,它主要取決於系統對於數據讀寫效率的判斷。這裡以SQL Server資料庫的數據頁大小為例:8K。

(3) 傳送時間
傳送時間 = IO Chunk Size/Internal Transfer Rate = 8k/40M/s = 0.2ms

可以發現:
(3.1) 如果IO Chunk Size大的話,傳送時間會變長,單次IO時間就也變長,從而導致IOPS變小;
(3.2) 機械磁碟的主要讀寫成本,都花在了定址時間上,即:尋道時間 + 旋轉延遲,也就是磁碟臂的擺動,和磁碟的旋轉延遲。
(3.3) 如果粗略的計算IOPS,可以忽略傳送時間,1000ms/(尋道時間 + 旋轉延遲)即可。

4. IOPS計算示例
以15000rpm為例:

(1) 單次IO時間
單次IO時間 = 尋道時間 + 旋轉延遲 + 傳送時間 = 3ms + 2ms + 0.2 ms = 5.2 ms

(2) IOPS
IOPS = 1000ms/單次IO時間 = 1000ms/5.2ms = 192 (次)
這裡計算的是單塊磁碟的隨機訪問IOPS。

考慮一種極端的情況,如果磁碟全部為順序訪問,那麼就可以忽略:尋道時間 + 旋轉延遲 的時長,IOPS的計算公式就變為:IOPS = 1000ms/傳送時間
IOPS = 1000ms/傳送時間= 1000ms/0.2ms = 5000 (次)

顯然這種極端的情況太過理想,畢竟每個磁軌的空間是有限的,尋道時間 + 旋轉延遲 時長確實可以減少,不過是無法完全避免的。

四 資料庫中的磁碟讀寫

1. 隨機訪問和連續訪問

(1) 隨機訪問(Random Access)

指的是本次IO所給出的扇區地址和上次IO給出扇區地址相差比較大,這樣的話磁頭在兩次IO操作之間需要作比較大的移動動作才能重新開始讀/寫數據。

(2) 連續訪問(Sequential Access)

相反的,如果當次IO給出的扇區地址與上次IO結束的扇區地址一致或者是接近的話,那磁頭就能很快的開始這次IO操作,這樣的多個IO操作稱為連續訪問。

(3) 以SQL Server資料庫為例

數據文件,SQL Server統一區上的對象,是以extent(8*8k)為單位進行空間分配的,數據存放是很隨機的,哪個數據頁有空間,就寫在哪裡,除非通過文件組給每個表預分配足夠大的、單獨使用的文件,否則不能保證數據的連續性,通常為隨機訪問。
另外哪怕聚集索引表,也只是邏輯上的連續,並不是物理上。

日誌文件,由於有VLF(virtual  log file)的存在,日誌的讀寫理論上為連續訪問,但如果日誌文件設置為自動增長,且增量不大,VLF就會很多很小,那麼就也並不是嚴格的連續訪問了。

2. 順序IO和併發IO

(1) 順序IO模式(Queue Mode)

磁碟控制器可能會一次對磁碟組發出一連串的IO命令,如果磁碟組一次只能執行一個IO命令,稱為順序IO;

(2) 併發IO模式(Burst Mode)

當磁碟組能同時執行多個IO命令時,稱為併發IO。併發IO只能發生在由多個磁碟組成的磁碟組上,單塊磁碟只能一次處理一個IO命令。

(3) 以SQL Server資料庫為例

有的時候,儘管磁碟的IOPS(Disk Transfers/sec)還沒有太大,但是發現資料庫出現IO等待,為什麼?通常是因為有了磁碟請求隊列,有過多的IO請求堆積。

磁碟的請求隊列和繁忙程度,通過以下性能計數器查看:
LogicalDisk/Avg.Disk Queue Length (處理列隊中的隊列的平均長度)
LogicalDisk/Current Disk Queue Length
LogicalDisk/%Disk Time 磁碟利用率

這種情況下,可以做的是:
(1) 簡化業務邏輯,減少IO請求數;
(2) 同一個實例下的多個用戶資料庫,遷移到不同實例下;
(3) 同一個資料庫的日誌、數據文件,分離到不同的存儲單元;
(4) 藉助HA策略,做讀寫操作的分離。

3. IOPS和吞吐量(throughput)

(1) IOPS

IOPS即每秒進行讀寫(I/O)操作的次數。在計算傳送時間時,有提到:如果IO Chunk Size大的話,那麼IOPS會變小,假設以100M為單位讀寫數據,那麼IOPS就會很小。

(2) 吞吐量(throughput)

吞吐量指每秒可以讀寫的位元組數。同樣假設以100M為單位讀寫數據,儘管IOPS很小,但是每秒讀寫了N*100M的數據,吞吐量並不小。

(3) 以SQL Server資料庫為例

對於OLTP(On-Line Transaction Processing)的系統,經常讀寫小塊數據,多為隨機訪問,用IOPS來衡量讀寫性能;
對於數據倉庫,日誌文件,經常讀寫大塊數據,多為順序訪問,用吞吐量來衡量讀寫性能。

磁碟當前的IOPS,通過以下性能計數器查看:
LogicalDisk/Disk Transfers/sec
LogicalDisk/Disk Reads/sec
LogicalDisk/Disk Writes/sec

磁碟當前的吞吐量,通過以下性能計數器查看:
LogicalDisk/Disk Bytes/sec
LogicalDisk/Disk Read Bytes/sec
LogicalDisk/Disk Write Bytes/sec

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ln 解釋 語法 示例 軟鏈接 硬鏈接 軟鏈接和硬鏈接區別 ...
  • 目錄 mkdir cd pwd rmdir cp mv rm mkdir 解釋 語法 示例 cd 解釋 語法 示例 pwd 解釋 語法 示例 rmdir 解釋 語法 示例 cp 解釋 語法 示例 mv 解釋 語法 示例 rm 解釋 語法 示例 ...
  • 目錄 touch cat more less head tail touch 解釋 語法 示例 cat 解釋 語法 示例 more 解釋 語法 示例 less 解釋 語法 示例 head 解釋 語法 示例 tail 解釋 語法 示例 ...
  • 目錄處理命令:ls 解釋 語法 ls 列出當前目錄下的所有文件(沒有隱藏的) ls a ls l 列出當前目錄下所有的文件的詳細信息 詳細解釋 第一個單獨解釋 ls lh 列出文件詳細信息,文件單位由系統判定顯示,或顯示K,或現實M 解釋 ls ld 查看目錄的詳細信息,而不是文件夾下的文件信息 l ...
  • 距離centos8.0(現在已經更新到8.1了)的發佈已經過去幾個月了,作為一個剛剛接觸過幾個月centos的萌新來說,本文想通過實際的操作體驗來說對比一下centos8代與7代 首先,centos8 dvd版的鏡像有7G大,也是我目前安裝過最大的操作系統鏡像了,首先從官網下載後,安裝的時候就踩了一 ...
  • 文件目錄結構 閑話篇: linux我也是最近才開始學,寫隨筆是為分享學習經驗的同時也留著供自己以後來參考。因為linux一切皆文件的基本哲學思想。所以我決定從文件目錄開始寫。 正文: 首先linux文件系統格式為ext3/4(ext是extended的縮寫,意為擴展,全稱linux擴展文件系統),這 ...
  • Everspin 是設計,製造和商業銷售離散和嵌入式磁阻RAM(MRAM)和自旋傳遞扭矩MRAM(STT-MRAM)的全球領導者,其市場和應用領域涉及數據持久性和完整性,低延遲和安全性至關重要。Everspin在數據中心,雲存儲,能源,工業,汽車和運輸市場中部署了超過1.2億個MRAM和STT-MR ...
  • 隨著單塊磁碟在數據安全、性能、容量上呈現出的局限,磁碟陣列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出現了,RAID把多塊獨立的磁碟按不同的方式組合起來,形成一個磁碟組,以獲得比單塊磁碟更高的數據安全、性能、容量。 一. 常見的R ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...