成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊磁盤原理,你懂了嗎?

存儲 數據管理
開發中用的最多的數據庫 MySQL,其數據是持久化到磁盤中的;Redis 的持久化數據是落到磁盤的;Zookeeper 內存中的數據、事務日志、快照會持久化到磁盤;像 RocketMQ 這種消息隊列也會將收到的 Message 持久化到磁盤,Kafka 當然也不例外。

磁盤這玩意兒,即使不作為一個開發人員我們也會經常跟它打交道。比如你家里的臺式機,或者拿來辦公的電腦,再比如你裝個操作系統,會涉及到對磁盤進行分區。

而作為開發人員,自然更加需要關注磁盤。

平時你開發的代碼會暫存在磁盤上;開發中用的最多的數據庫 MySQL,其數據是持久化到磁盤中的;Redis 的持久化數據是落到磁盤的;Zookeeper 內存中的數據、事務日志、快照會持久化到磁盤;像 RocketMQ 這種消息隊列也會將收到的 Message 持久化到磁盤,Kafka 當然也不例外;

可以說,磁盤和我們的開發息息相關。但可能在平時的開發中,很多人會忽略掉磁盤的存在,因為雖然息息相關,但很遺憾,不是直接相關。因為上面提到的所有的和磁盤相關的內容,都已經由工具幫我們做了,甚至包括你的代碼。

這種感覺就好像,魚(可能)不怎么注意水,我們平時不太會注意氧氣。

我們可能聽過,磁盤 IO 慢,為什么?我們可能聽過,磁盤順序 IO 會快些,為什么?我們可能聽過磁盤的順序 IO 甚至比內存隨機 IO 要快,為什么?

可能這些問題,我們都不一定能做個清晰的解釋,這也是為什么我想聊聊磁盤。

磁盤分類

首先,按照原理來分,磁盤可以分為三類:

  • 機械硬盤(HDD)
  • 固態硬盤(SSD)
  • 混合硬盤(SSHD)

本篇文章的重點會放在 HDD 上。

場景切入

首先還是通過一個很簡單的場景來切入,如下:

圖片

你在你的電腦上創建了個文件,然后寫了點東西進去。然后你 N 天后打開電腦,看到這個文件還在(廢話)。這實際上就是數據被持久化進了磁盤,下次需要文件時再從磁盤中取出來。

這個存、取的過程其實對我們完全無感知的,我們就知道裝機的時候安了一塊硬盤,其他的啥也不知道。

磁盤結構

那磁盤里究竟長啥樣呢?它是怎么樣把文件存儲起來的?以什么樣的方式存儲的?帶著這樣的問題來看一個圖:

圖片

圖片來自 wikipedia

結合上面的結構圖可以看出來,現代主流的磁盤設計就是在一個 Spindle(主軸)上,有一些 platter(盤片),然后盤片會繞著主軸旋轉,然后讀數據、寫數據則由讀寫磁頭來實現,讀寫磁頭會安裝在磁頭臂上,磁頭臂可以轉動,覆蓋到盤片的所有的半徑,再搭配主軸的旋轉,從而使磁頭可以獲取到盤片上任何一個扇區的數據。

那你可能會好奇了,這個盤片到底要怎么做、怎么設計才能把上文提到的文件給存儲下來呢?

要知道,現在的磁盤盤片大多都是由非磁性材料,通常是鋁合金、玻璃或者陶瓷制成的,你的印象中,他們能夠拿來存儲文件嗎(再次手動狗頭)

既然提到了非磁性,那么答案肯定就跟磁性有點關系...

盤片構造

沒錯,盤片的兩個面會被涂上一層薄薄的磁性材料,有多薄呢?大概是 10-20 納米,然后外面給包了層碳來作為保護,這層薄薄的磁性材料就是存儲數據的關鍵

圖片

磁性材料

一個磁盤一般都會有多個盤片,并且剛剛提到的磁性材料盤片的兩個面都有。換句話說,盤片的兩個面都能用于存儲、讀取數據。

現在我們知道了,數據其實是存在磁性材料上的,那這里再思考一個問題:「磁盤怎么知道,數據該存在哪塊磁性材料上?讀取的時候又該從哪塊材料上讀?讀多少?」

這個道理其實跟我們的地圖是類似的,舉個例子,中國這么大,我們要如何清晰、準確的描述某一個地方呢?這個答案其實大家都知道,那就是分層分級。

舉個例子,網購讓你填的收貨地址就是這樣,比如「四川省-成都市-xx區-xx街道-x棟x號-xxxx室」,這樣的分層邏輯能夠很直觀的表示一個特定、具體的位置,而不用說大概那一塊,先往中國西南走、走到城市之后繼續往西走,大概走多久之后,再往南走,運氣好的你就能找到那個地址了(再次手動狗頭)。

盤片上也是做了類似的事情,先看個圖:

圖片

盤片的構造

中間的黑點就是主軸,以主軸為圓心劃分了多個磁道(為了方便理解圖中只給出了 3 個磁道),每個磁道上又劃分出了多個區域,每個區域叫做扇區,并且每個扇區的大小是固定的 512 字節。讀取數據的時候,只需要通過這個劃分就能夠知道數據在哪個磁道、哪個扇區了。

但是通過上圖還是能看出一個問題:那就是不同的磁道扇區數是相同的,扇區所在的磁道半徑約大,則扇區的面積就越大。但無論面積比靠內磁道的扇區大多少,按照設計、規定只能存儲 512 字節的數據,這樣一來會浪費大量的存儲空間。

為了優化這個問題,就有了 ZBR 技術方案。

ZBR,全稱 Zone Bit Recording,用來解決傳統盤片的磁道扇區存儲空間浪費的問題。它是怎么做的呢?說起來也很簡單,越靠外圈磁道的扇區由于面積會更大,所以 ZBR 會放置更多的扇區,從而將空間利用起來。

轉換成圖形可能就是這樣:

圖片

盤片的ZBR

不同的磁道扇區數量不同了,外圈磁道上面的扇區會更多些,從而充分的利用空間,提升磁盤的總容量。

存儲原理

好,繼續深入問題盤片存儲相關的問題。

我們知道從宏觀上來看,計算機并不會管你是誰,到它這都是 0101010101。那么當讀取文件的時候,它是如何從這層磁性材料中識別出來 0101010101,然后還原成我們能看懂的文件的?

前面我們知道盤片上劃分了磁道、扇區,相應的磁性材料也同理。現代磁盤就是通過磁化盤片兩面的磁性材料來記錄數據的,磁性材料序列的改變則代表了對應的二進制 0、1。

圖片

磁性序列原理

可以看到,兩個磁性 Region 的序列方向不同,則標記為 R(Reverse),相同則標記為 N(No Reverse),當讀取的時候,如果探測到序列是 RR,則對應 1,而如果是 NR,則對應 0(或許這就是為什么它叫磁盤吧,再再次手動狗頭)

所以,我們常說的寫磁盤并不是說讀寫磁頭在盤片上刻東西,而是改變磁性材料的序列,并且讀寫磁頭和盤片沒有直接接觸,他們有個大概 10 nm 的距離。

并且,從上述現狀我們可以簡單推導,既然讀寫磁盤都是靠讀取盤片上的磁性序列,并且盤片的兩個面都能用于存儲數據,那么必然盤片的每個面都有磁頭。

磁盤性能

了解完一些簡單的原理之后,我們終于可以來了解磁盤性能相關的問題了,我們會深入的分析為什么磁盤 IO 是個非常昂貴的操作。

現在思考一個問題,我們要查詢數據,底層會怎么做?是不是會:

將磁頭移動到目標文件所在的磁道

此時盤片正被主軸帶著旋轉,磁頭需要等待對應的扇區旋轉到磁頭這才能讀取數據

對應扇區到了之后,就需要等待讀取數據&傳輸

總結一下,磁盤的 IO 請求耗時主要由三部分組成:

  • 磁頭尋道時間:這個延遲一般在 3-15 ms
  • 盤片旋轉延遲:這個取決于主軸旋轉的速度,隨著速度的不同大概在 2-4 ms
  • 數據傳輸時間:這里平均只用 3 微秒,跟上面兩個比起來這里的耗時可以忽略不計

這里提到了旋轉的問題,在盤片旋轉延遲這里,盤片旋轉越快,則對應扇區移動到磁頭的速度也會越快。

現代磁盤的旋轉速度在 5400 或者 7200 RPM(Revolutions Per Minute)不等,當然也有一些高性能的服務器轉速會達到 1500 RPM。

盤片旋轉延遲的確和轉速相關,因為轉速越快,對應扇區移動到磁頭的位置就越快。但并不是轉速越快越好,因為轉速越高,發熱約嚴重,磁盤的壽命也就越短。

下面給個不同的轉速下對應的旋轉延遲的參考:

旋轉速度(單位 RPM)

平均旋轉延遲(單位毫秒)

4800

6.25

5400

5.55

7200

4.16

10000

3

15000

2

(以上數據來自 wikipedia)

可能你看到幾毫秒覺得還好,并不是那么慢,但是跟內存的速度一對比你就能立馬明白。內存的隨機讀大概在幾百納秒,假設內存的速度是 200 ns、磁盤的速度是 2ms(按上表中轉速最高的延遲來算),差了 10000 倍,也就是 4 個數量級。

到這里,我想我們也能理解為什么磁盤的順序讀寫能夠與內存隨機讀一戰了。因為磁盤順序讀寫幾乎把前兩個最耗時的操作給干掉了,磁頭已經移動到了對應的磁道, 也找到了對應的扇區,直接寫就完事了。

好了, 關于磁盤的原理就簡單介紹到這里。

責任編輯:武曉燕 來源: SH的全棧筆記
相關推薦

2023-10-31 14:04:17

Rust類型編譯器

2023-11-13 18:36:04

知識抽取NER

2023-06-07 14:07:00

架構

2023-04-13 08:40:12

MySQL服務器SELECT

2022-04-01 08:48:45

JavaPythonRuby

2024-04-07 08:23:01

JS隔離JavaScript

2025-01-07 09:07:36

接口屬性路徑

2025-04-11 00:05:49

RPC底層分布式

2022-06-06 07:58:52

勒索軟件惡意軟件解密

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2023-04-26 22:52:19

視覺人臉檢測人臉對齊

2023-04-03 06:57:38

DataNode工具命令行

2023-11-07 08:13:53

分布式網絡

2025-01-06 09:26:49

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久er精品 | 视频一区二区中文字幕 | 国产精品美女久久久久久久久久久 | 久久国产精品久久 | 一区二区不卡 | 免费一级做a爰片久久毛片潮喷 | 五月天综合影院 | 男人久久天堂 | 精品毛片在线观看 | 国产精品久久久久久久久久三级 | 日韩欧美在线免费观看 | 色伊人 | 国产精品久久久久久久久久免费看 | caoporon| 久久久久久国产一区二区三区 | 久久伊人一区 | 一区二区三区国产 | 成人性视频免费网站 | 欧美成人一区二区三区 | 超碰天天 | 五月婷婷激情网 | 日韩在线欧美 | 精精国产xxxx视频在线播放 | 一级毛片免费看 | 国产精品一区一区三区 | 国产一区二区三区 | 国产精品精品久久久 | 免费观看黄 | www.亚洲精品 | 日本不卡免费新一二三区 | 久久久观看 | 中文字幕综合 | 91精品久久久久久久久中文字幕 | 亚洲一区二区 | 精品一区二区三区视频在线观看 | 国产精品99久久久久久久久 | 亚洲日韩中文字幕 | 欧美成人精品在线 | 欧美jizzhd精品欧美巨大免费 | 精品国产第一区二区三区 | 999久久久久久久久6666 |