自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

磁盤 IO 真的比網(wǎng)絡(luò) IO 快嗎?

存儲(chǔ) 存儲(chǔ)設(shè)備
系統(tǒng)設(shè)計(jì)一種工程實(shí)踐,不是藝術(shù)遐想,每一個(gè)關(guān)鍵決策都要有依據(jù)而不能拍腦袋,本文的這張表就是你的依據(jù)(之一)。

[[426776]]

Google大神 Jeff Dean在之前的一次演講中展示了這樣一張表,非常有意思:

從這張圖里我們可以清楚的看到,計(jì)算機(jī)系統(tǒng)中各種關(guān)鍵操作其典型耗時(shí)到底有多少(注意,各種不同的系統(tǒng)架構(gòu)精確的數(shù)據(jù)可能與此不同,但數(shù)量級(jí)上差別應(yīng)該不會(huì)很大)。

訪存與cache

訪問L2 cache的時(shí)延大概是訪問L1 cache的10幾倍左右,而訪問一次內(nèi)存的時(shí)延則高達(dá)訪問L2 cache的20倍,是訪問L1cache耗時(shí)的200倍。

這一部分清楚的告訴每個(gè)程序員,編寫出對cache友好的程序是至關(guān)重要的,尤其你的場景如果對性能要求很高則更是如此。

分支預(yù)測失敗的懲罰大概只有5ns這個(gè)量級(jí),博主在之前的文章《特斯拉遇上CPU:程序員的心思你別猜》這篇文章中專門講解過CPU的分支預(yù)測功能。

分支預(yù)測

該功能主要針對 if 語句,由于現(xiàn)代CPU內(nèi)部采用流水線方式來處理機(jī)器指令,因此在 if 對應(yīng)的機(jī)器指令還沒有執(zhí)行完時(shí)后續(xù)指令就要進(jìn)到流水線中,此時(shí)CPU就必須猜測到底 if 語句是否為真,如果CPU猜對了,那么流水線照常運(yùn)行,但如果猜錯(cuò)了流水線中已經(jīng)被執(zhí)行的一部分指令就要作廢。

[[426777]]

很多同學(xué)看到這篇文章后表示if語句是不是盡量少用,從這張表可以看出,分支預(yù)測失敗的懲罰不高,并且現(xiàn)代CPU的分支預(yù)測成功率很高,根本不必在意這點(diǎn)性能損失。

內(nèi)存、SSD與磁盤

程序員都知道訪問內(nèi)存的速度比SSD塊,訪問SSD速度比磁盤快,那么到底能快多少呢?

同樣順序讀取1MB數(shù)據(jù),內(nèi)存花費(fèi)的時(shí)間為250,000 ns,SSD為1,000,000 ns,磁盤為20,000,000 ns。

我們可以看到,同樣讀取1MB數(shù)據(jù),磁盤花費(fèi)的時(shí)間是 SSD 的 20 倍,是內(nèi)存的80倍。

同樣讀取1MB數(shù)據(jù),SSD耗時(shí)是內(nèi)存的4倍。

這組數(shù)據(jù)告訴我們,相對內(nèi)存來說磁盤真的很慢,如果你的經(jīng)費(fèi)充足就用SSD吧,如果你是土豪,那么就把數(shù)據(jù)庫直接放到內(nèi)存吧。

網(wǎng)絡(luò)與磁盤

一般來說我們認(rèn)為內(nèi)存比磁盤快,磁盤比網(wǎng)絡(luò)快,但這這張表告訴我們用1Gbps網(wǎng)絡(luò)發(fā)送1K數(shù)據(jù)僅僅需要20,000 ns,而磁盤的一次尋道則高達(dá)10,000,000ns(10ms),網(wǎng)絡(luò)IO可不一定比磁盤IO慢。

當(dāng)然,這也要看網(wǎng)絡(luò)兩端距離有多遠(yuǎn)。

網(wǎng)絡(luò)

想測量數(shù)據(jù)包在網(wǎng)絡(luò)兩端來回一趟需要耗時(shí)多少?ping命令再簡單方便不過了。

首先,博主在數(shù)據(jù)中心內(nèi)部ping一臺(tái)主機(jī)(注:ip地址用*來代替):

一圈下來耗時(shí)僅在100 us左右,速度非???,在數(shù)據(jù)中心內(nèi)部空間距離幾乎可以忽略不計(jì)。

我的坐標(biāo)在北京,接下來我們ping一下清華大學(xué),哈哈,注意現(xiàn)在由于云服務(wù)商的存在,清華大學(xué)的官網(wǎng)服務(wù)器主機(jī)可不一定在清華大學(xué)里,為簡單起見我們認(rèn)為所ping的機(jī)器都在相應(yīng)的地理位置上。

這個(gè)耗時(shí)就很可觀了,我們姑且用市中心到清華大學(xué)的直線距離評估一下數(shù)據(jù)包路徑長度(實(shí)際數(shù)據(jù)包的路徑肯定和這里不同),可以看到大概在10公里左右的數(shù)量級(jí),用時(shí)將近10ms,不要覺得10ms很耗時(shí),磁盤一次seek就是這個(gè)量級(jí)。

接下來出個(gè)省,ping一下浙大:

出了省就是不一樣,北京與浙江的直線距離大概在1200公里,網(wǎng)絡(luò)上走一圈耗時(shí)來到了將近15ms。

接著我們出趟國吧,去英國轉(zhuǎn)一圈,ping下牛津大學(xué):

出了國就更不一樣了,北京與英國直線距離(球體表面)大概在7000公里,網(wǎng)絡(luò)耗時(shí)將近50ms。

最后讓我們?nèi)ヌ嗣绹琾ing下斯坦福大學(xué):

和預(yù)想的差不多,北京與斯坦福直線距離大概在10000公里,耗時(shí)也在50ms左右。

從這組測試我們可以看出,網(wǎng)絡(luò)的耗時(shí)和空間距離有很大關(guān)系,但在數(shù)據(jù)中心內(nèi)部網(wǎng)絡(luò)其實(shí)是非??斓?,這一點(diǎn)在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)需要意識(shí)到。

總結(jié)

系統(tǒng)設(shè)計(jì)一種工程實(shí)踐,不是藝術(shù)遐想,每一個(gè)關(guān)鍵決策都要有依據(jù)而不能拍腦袋,本文的這張表就是你的依據(jù)(之一)。

希望這篇文章對大家理解系統(tǒng)時(shí)間有所幫助。

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)的荒島求生」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)的荒島求生公眾號(hào)。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)的荒島求生
相關(guān)推薦

2025-03-18 12:30:00

RubyJava語言

2018-09-10 10:20:26

磁盤 IO網(wǎng)絡(luò) IO監(jiān)控

2021-06-21 11:11:29

LinuxIO磁盤IO

2021-11-11 06:57:00

PythonPyPy程序

2010-12-22 13:17:47

Linux性能監(jiān)測磁盤IO

2011-11-08 21:51:43

Linux 監(jiān)控 IO

2022-11-02 08:12:47

TurbopackVite

2019-03-28 08:00:00

Linux磁盤IO監(jiān)控存儲(chǔ)設(shè)備

2020-11-09 09:33:37

多線程

2010-08-18 16:04:24

JavaC

2011-09-02 10:29:30

腳本Linuxperl

2022-02-21 10:21:17

網(wǎng)絡(luò)IO模型

2013-08-15 14:10:24

云主機(jī)磁盤IO

2019-06-29 14:34:27

磁盤IO排序

2019-09-17 14:31:37

磁盤排序IO

2022-04-12 08:00:17

socket 編程網(wǎng)絡(luò)編程網(wǎng)絡(luò) IO 模型

2023-12-06 07:28:47

阻塞IO異步IO

2023-12-20 14:38:50

Linux磁盤IO

2020-06-17 16:43:40

網(wǎng)絡(luò)IO框架

2021-01-09 13:59:49

異步IO驅(qū)動(dòng)式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)