精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Read 文件一個字節實際會發生多大的磁盤IO?

存儲 存儲設備
在日常開發中一些看似司空見慣的問題上,我覺得可能大多數人其實并沒有真正理解,或者理解的不夠透徹。

[[392991]]

大家好,我是飛哥!

在日常開發中一些看似司空見慣的問題上,我覺得可能大多數人其實并沒有真正理解,或者理解的不夠透徹。不信我們來看以下一段簡單的讀取文件的代碼:

上圖中的代碼僅僅只是對某個文件讀取了一個字節,基于這個代碼片段我們來思考:

1、讀取文件 1 個字節是否會導致磁盤 IO ?

2、如果發生了磁盤 IO,那發生的是多大的 IO 呢?

大家平時用的各種語言 C++、PHP、Java、Go 啥的封裝層次都比較高,把很多細節都給屏蔽的比較徹底。如果想把上面的問題搞清楚,需要剖開 Linux 的內部來看 Linux 的 IO 棧。

一、大話 Linux IO 棧

廢話不多說,我畫了一個 Linux IO 棧的簡化版本。

通過 IO 棧可以看到,我們在應用層簡單的一次 read 而已,內核就需要 IO 引擎、VFS、PageCache、通用塊管理層、IO 調度層等許多個組件來進行復雜配合才能完成。

那這些組件都是干啥的呢?我們挨個簡單過一遍。不想看這個的同學可以直接跳到第二節的讀文件讀過程。

1.1 IO 引擎

開發同學想要讀寫文件的話,在 lib 庫層有很多套函數可以選擇,比如 read & write,pread & pwrite。這事實上就是在選擇 Linux 提供的 IO 引擎。

常見的 IO 引擎種類如下:

我們開篇中代碼片用的 read 函數就屬于 sync 引擎。IO 引擎仍然處于上層,它需要內核層的提供的系統調用、VFS、通用塊層等更底層組件的支持才能實現。

接著讓我們繼續深入到內核,來介紹各個內核組件。

1.2 系統調用

當進入到系統調用以后,也就進入到了內核層。

系統調用將內核中其它組件的功能進行封裝,然后通過接口的形式暴露給用戶進程來訪問。

對于我們的讀取文件的需求,系統調用需要依賴 VFS 內核組件。

1.3 VFS 虛擬文件系統

VFS 的思想就是在 Linux 上抽象一個通用的文件系統模型,對我們開發人員或者是用戶提供一組通用的接口,讓我們不用 care 具體文件系統的實現。VFS 提供的核心數據結構有四個,它們定義在內核源代碼的 include/linux/fs.h 和 include/linux/dcache.h 中。

superblock:Linux 用來標注具體已安裝的文件系統的有關信息。

inode:Linux 中的每一個文件/目錄都有一個 inode,記錄其權限、修改時間等信息。

desty:目錄項,是路徑中的一部分,所有的目錄項對象串起來就是一棵 Linux 下的目錄樹。

file:文件對象,用來和打開它的進程進行交互。

圍繞這這四個核心數據結構,VFS 也都定義了一系列的操作方法。比如,inode 的操作方法定義 inode_operations,在它的里面定義了我們非常熟悉的 mkdir 和 rename 等。對于 file 對象,定義了對應的操作方法 file_operations ,如下:

  1. // include/linux/fs.h 
  2. struct file { 
  3.     ...... 
  4.     const struct file_operations    *f_op 
  5. struct file_operations { 
  6.     ...... 
  7.     ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); 
  8.     ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); 
  9.             ...... 
  10.     int (*mmap) (struct file *, struct vm_area_struct *); 
  11.     int (*open) (struct inode *, struct file *); 
  12.     int (*flush) (struct file *, fl_owner_t id); 

注意 VFS 是抽象的,所以它的 file_operations 里定義的 read、write 都只是函數指針, 實際中需要具體的文件系統來實現,例如 ext4 等等。

1.4 Page Cache

Page Cache。它的中文譯名叫頁高速緩存。它是 Linux 內核使用的主要磁盤高速緩存,是一個純內存的工作組件。Linux 內核使用搜索樹來高效管理大量的頁面。

有了它,Linux 就可以把一些磁盤上的文件數據保留在內存中,然后來給訪問相對比較慢的磁盤來進行訪問加速。

當用戶要訪問的文件的時候,如果要訪問的文件 block 正好存在于 Page Cache 內,那么 Page Cache 組件直接把數據從內核態拷貝到用戶進程的內存中就可以了。如果不存在,那么會申請一個新頁,發出缺頁中斷,然后用磁盤讀取到的 block 內容來填充它 ,下次直接使用。

看到這里,開篇的問題可能你就明白一半了,如果你要訪問的文件近期訪問過,那么 Linux 大概率就是從 Page cache 內存中的拷貝給你就完事,并不會有實際的磁盤 IO 發生。

不過有一種情況下,Pagecache 不會生效, 那就是你設置了 DIRECT_IO 標志。

1.5 文件系統

Linux 下支持的文件系統有很多,常用的有 ext2/3/4、XFS、ZFS 等。

要用哪種文件系統是在格式化的時候指定的。因為每一個分區都可以單獨進行格式化,所以一臺 Linux 機器下可以同時使用多個不同的文件系統。

文件系統里提供對 VFS 的具體實現。除了數據結構,每個文件系統還會定義自己的實際操作函數。例如在 ext4 中定義的 ext4_file_operations。在其中包含的VFS中定義的 read 函數的具體實現:do_sync_read 和 do_sync_write。

  1. const struct file_operations ext4_file_operations = { 
  2.     .llseek         = ext4_llseek, 
  3.     .read           = do_sync_read, 
  4.     .write          = do_sync_write, 
  5.     .aio_read       = generic_file_aio_read, 
  6.     .aio_write      = ext4_file_write, 
  7.     ...... 

和 VFS 不同的是,這里的函數就是實實在在的實現了。

1.6 通用塊層

文件系統還要依賴更下層的通用塊層。

對上層的文件系統,通用塊層提供一個統一的接口讓供文件系統實現者使用,而不用關心不同設備驅動程序的差異,這樣實現出來的文件系統就能用于任何的塊設備。通過對設備進行抽象后,不管是磁盤還是機械硬盤,對于文件系統都可以使用相同的接口對邏輯數據塊進行讀寫操作。

對下層。I/O 請求添加到設備的 I/O 請求隊列。它定義了一個叫 bio 的數據結構來表示一次 IO 操作請求(include/linux/bio.h)

1.7 IO 調度層

當通用塊層把 IO 請求實際發出以后,并不一定會立即被執行。因為調度層會從全局出發,盡量讓整體磁盤 IO 性能最大化。

對于機械硬盤來說,調度層會盡量讓磁頭類似電梯那樣工作,先往一個方向走,到頭再回來,這樣整體效率會比較高一些。具體的算法有 deadline 和 cfg ,算法細節就不展開了,感興趣同學可以自行搜索。

對于固態硬盤來說,隨機 IO 的問題已經被很大程度地解決了,所以可以直接使用最簡單的 noop 調度器。

在你的機器上,通過dmesg | grep -i scheduler來查看你的 Linux 支持的調度算法。

通用塊層和 IO 調度層一起為上層文件系統屏蔽了底層各種不同的硬盤、U盤的設備差異。

二、讀文件過程

我們已經把 Linux IO 棧里的各個內核組件都簡單介紹一遍了?,F在我們再從頭整體過一下讀取文件的過程(圖中源代碼基于 Linux 3.10)

這一張長圖把整個 Linux 讀取文件的過程都串了一遍。

三、回顧開篇問題

回到開篇的第一個問題:讀取文件 1 個字節是否會導致磁盤 IO ?

從上述流程中可以看到,如果 Page Cache 命中的話,根本就沒有磁盤 IO 產生。

所以,大家不要覺得代碼里出現幾個讀寫文件的邏輯就覺得性能會慢的不行。操作系統已經替你優化了很多很多,內存級別的訪問延遲大約是 ns 級別的,比機械磁盤 IO 快了好幾個數量級。如果你的內存足夠大,或者你的文件被訪問的足夠頻繁,其實這時候的 read 操作極少有真正的磁盤 IO 發生。

假如 Page Cache 沒有命中,那么一定會有傳動到機械軸上進行磁盤 IO 嗎?

其實也不一定,為什么,因為現在的磁盤本身就會帶一塊緩存。另外現在的服務器都會組建磁盤陣列,在磁盤陣列里的核心硬件Raid卡里也會集成RAM作為緩存。只有所有的緩存都不命中的時候,機械軸帶著磁頭才會真正工作。

再看開篇的第二個問題:如果發生了磁盤 IO,那發生的是多大的 IO 呢?

如果所有的 Cache 都沒有兜住 IO 讀請求,那么我們來看看實際 Linux 會讀取多大。真的按我們的需求來,只去讀一個字節嗎?

整個 IO 過程中涉及到了好幾個內核組件。而每個組件之間都是采用不同長度的塊來管理磁盤數據的。

  • Page Cache 是以頁為單位的,Linux 頁大小一般是 4KB
  • 文件系統是以塊(block)為單位來管理的。使用 dumpe2fs 可以查看,一般一個塊默認是 4KB
  • 通用塊層是以段為單位來處理磁盤 IO 請求的,一個段為一個頁或者是頁的一部分
  • IO 調度程序通過 DMA 方式傳輸 N 個扇區到內存,扇區一般為 512 字節
  • 硬盤也是采用“扇區”的管理和傳輸數據的

可以看到,雖然我們從用戶角度確實是只讀了 1 個字節(開篇的代碼中我們只給這次磁盤IO留了一個字節的緩存區)。但是在整個內核工作流中,最小的工作單位是磁盤的扇區,為512字節,比1個字節要大的多。

另外 block、page cache 等高層組件工作單位更大。其中 Page Cache 的大小是一個內存頁 4KB。所以一般一次磁盤讀取是多個扇區(512字節)一起進行的。假設通用塊層 IO 的段就是一個內存頁的話,一次磁盤 IO 就是 4 KB(8 個 512 字節的扇區)一起進行讀取。

另外我們沒有講到的是還有一套復雜的預讀取的策略。所以,在實踐中,可能比 8 更多的扇區來一起被傳輸到內存中。

最后,啰嗦幾句

操作系統的本意是做到讓你簡單可依賴, 讓你盡量把它當成一個黑盒。你想要一個字節,它就給你一個字節,但是自己默默干了許許多多的活兒。

 

我們雖然國內絕大多數開發都不是搞底層的,但如果你十分關注你的應用程序的性能,你應該明白操作系統的什么時候悄悄提高了你的性能,是怎么來提高的。以便在將來某一個時候你的線上服務器扛不住快要掛掉的時候,你能迅速找出問題所在。

 

責任編輯:武曉燕 來源: 開發內功修煉
相關推薦

2023-02-16 14:19:07

IP地址UDP

2023-06-01 07:49:51

2022-03-02 11:39:53

物聯網科技

2018-01-19 12:56:19

Linux進程

2023-04-25 15:46:51

Python字符串

2022-07-25 12:01:10

終端Linux

2020-09-18 14:23:50

字符

2016-04-08 15:13:29

人工智能阿里小Ai

2022-11-24 08:01:57

bash腳本字符串

2021-12-27 08:24:08

漏洞網絡安全

2021-08-19 17:27:41

IT數據中心災難

2021-12-08 12:05:21

MySQ磁盤數據庫

2022-06-28 11:30:38

廣電5G套餐專網

2021-09-13 09:43:34

云計算云服務混合云

2023-08-26 07:44:13

系統內存虛擬

2024-01-08 08:00:00

2021-07-26 10:58:07

Chromebook谷歌更新

2010-10-09 13:41:42

MySQL字符串

2013-05-21 17:42:39

打車AppO2O

2010-09-16 10:56:46

sqlserver建表
點贊
收藏

51CTO技術棧公眾號

日韩av毛片在线观看| 久久久久久免费精品| 妞干网在线免费视频| 99re热久久这里只有精品34| 久久99久久久久| 欧美激情视频网站| 国产美女免费无遮挡| 2020国产精品小视频| 99久久久久免费精品国产| 欧美一区二区三区…… | 日本成年人网址| 又爽又大又黄a级毛片在线视频| 国内精品写真在线观看| 91国产美女视频| 视频国产一区二区| 亚洲免费观看高清完整版在线观| 欧美日韩精品一区二区三区| 少妇人妻无码专区视频| 老司机午夜在线视频| 91女厕偷拍女厕偷拍高清| 91亚洲精品久久久| 一级一片免费看| 亚洲无毛电影| 久久精品免费播放| 国产jk精品白丝av在线观看| 亚洲一区二区三区中文字幕在线观看 | 日韩欧美亚洲国产另类| 91淫黄看大片| 免费在线黄色影片| 国产精品18久久久久| 国产精品九九九| 亚洲 欧美 视频| 丝袜连裤袜欧美激情日韩| 精品成人av一区| 精品国产一区二区三区在线| av色图一区| 久久久欧美精品sm网站| 国产在线资源一区| 亚洲国产精品一| 精品一区二区精品| 国产欧美中文字幕| 成人黄色免费网| 日韩电影在线看| 日本精品视频网站| 一级片黄色录像| 亚洲色图综合| 欧美曰成人黄网| 国产精品亚洲αv天堂无码| wwww亚洲| 五月开心婷婷久久| 日本欧美视频在线观看| 天堂a√在线| 日韩二区三区四区| 日韩av片免费在线观看| 色一情一乱一伦| 亚洲欧美日韩一区在线观看| 91国在线精品国内播放| 日韩欧美国产亚洲| 国产欧美91| 中文字幕亚洲综合久久| 99久久99久久精品免费| 日韩欧美自拍| 久久精品国亚洲| 欧美成人精品欧美一级私黄| 欧美va天堂| 国产69精品久久久久9| 日韩av一二三区| 美女诱惑黄网站一区| 日韩色av导航| 成年人av电影| 日韩天堂av| 国产999精品久久久| 国产成人精品亚洲| 经典三级在线一区| 波多野结衣成人在线| 免费观看国产视频| 国产亚洲欧美激情| 精品少妇人妻av一区二区| 手机在线免费看av| 精品人伦一区二区三区蜜桃网站 | 国产亚洲一区二区手机在线观看| 国产精品国产三级国产aⅴ中文| 亚洲欧洲一区二区| 污污的视频在线观看| 午夜免费久久看| 欧美私人情侣网站| 香蕉久久一区| 亚洲第一免费网站| av电影在线不卡| 一区二区影视| 欧美亚洲另类制服自拍| 亚洲天堂狠狠干| 成人免费高清视频在线观看| 91精品国产综合久久香蕉| www.色日本| 国产香蕉久久精品综合网| 男女啪啪的视频| 蜜桃视频在线观看免费视频| 欧美在线色视频| 免费黄视频在线观看| 国产亚洲电影| 久久久久久网址| 亚洲无码久久久久| 99久久精品国产精品久久| 亚洲乱码国产乱码精品天美传媒| 丁香花高清在线观看完整版| 欧美又粗又大又爽| 老熟妇精品一区二区三区| 首页国产精品| 欧美亚洲第一页| www黄色在线观看| 国产精品蜜臀av| 高清在线观看免费| 国产在线一区不卡| 在线看日韩欧美| 丰满少妇乱子伦精品看片| 毛片一区二区三区| 国产欧美日韩视频| 偷拍精品一区二区三区| 丁香激情综合国产| 在线视频不卡国产| 成人黄色免费短视频| 亚洲国产精品网站| www日韩在线| 免费在线成人网| 蜜桃传媒视频麻豆第一区免费观看 | 激情五月宗合网| 日韩精品中文字幕吗一区二区| 一本一本久久a久久精品综合小说| 久久综合色综合| 国产一区二区三区香蕉| 亚洲一区亚洲二区| 91青青在线视频| 色老汉av一区二区三区| 捆绑凌虐一区二区三区| 欧美三区视频| 91观看网站| 久久99精品久久久久久野外| 欧美视频中文字幕| 精品无码在线观看| 丝袜脚交一区二区| 日本一区免费看| 欧美成人免费电影| 亚洲精品小视频| 国产又爽又黄的视频| 成人免费va视频| 真人抽搐一进一出视频| 91亚洲无吗| 欧美激情影音先锋| 亚洲国产精品久久久久久6q| 亚洲激情网站免费观看| 亚洲欧美日韩中文字幕在线观看| 雨宫琴音一区二区三区| 18成人在线| 大香伊人久久| 日韩电影免费观看在线观看| 羞羞影院体验区| 久久久天堂av| 一区二区三区网址| 99精品在线| 99re视频在线观看| 日韩精品av| 亚洲日本aⅴ片在线观看香蕉| 尤物视频免费观看| 国产精品久久久久久久岛一牛影视 | 调教驯服丰满美艳麻麻在线视频| 天天做天天爱天天爽综合网| 国产区精品视频| 91一区二区三区在线| 欧美成人一区二区三区在线观看| 国产主播在线观看| 91免费国产在线| 不卡av免费在线| 国产精品久久占久久| 147欧美人体大胆444| 国产美女精品写真福利视频| 亚洲人成电影在线观看天堂色| 黄色污污视频软件| 亚洲人成7777| v天堂中文在线| 人人超碰91尤物精品国产| 天天爱天天做天天操| www.久久东京| 国产精品白丝jk喷水视频一区| 麻豆传媒免费在线观看| 欧美sm美女调教| 成人免费视频国产免费| 亚洲欧美经典视频| 久久久免费视频网站| 欧洲激情视频| 99c视频在线| 成人开心激情| 欧美精品免费播放| 可以在线观看的黄色| 9191国产精品| 日本熟女毛茸茸| 亚洲精品免费在线| 亚洲精品国产熟女久久久| 国产精品99久久久久久久女警| 91视频 -- 69xx| 天天做天天爱综合| 久久久久久九九九九| 国产精品亚洲欧美日韩一区在线| 欧美亚洲成人xxx| 在线观看免费视频你懂的| 亚洲女人天堂网| 国产剧情精品在线| 91久久精品国产91性色tv| 成人免费看片98| 国产精品电影一区二区三区| 日本黄色网址大全| 国产91丝袜在线播放| 中文字幕av不卡在线| 一区二区三区国产在线| 亚洲天堂第一区| 久久国产精品成人免费观看的软件| 国产一区二区不卡视频在线观看 | 国产精品裸体一区二区三区| gogogogo高清视频在线| 亚洲欧美国产精品久久久久久久| 国内精品久久久久久久久久| 欧美色综合网站| 肉色超薄丝袜脚交69xx图片| 久久这里都是精品| 丰满少妇xbxb毛片日本| 国产自产2019最新不卡| 青青草精品视频在线观看| 99视频一区| 国产又粗又猛又爽又黄的网站| 视频国产精品| 91精品久久久久久久久久入口| 欧美××××黑人××性爽| 欧美黑人极品猛少妇色xxxxx| 免费不卡视频| 日韩在线观看av| www 日韩| 在线国产精品播放| 亚洲xxxxxx| 自拍偷拍亚洲在线| 在线播放麻豆| 久久精品国产96久久久香蕉| 无遮挡动作视频在线观看免费入口| 亚洲欧洲偷拍精品| 国产毛片av在线| 国产一区二区三区在线观看网站| 欧美偷拍视频| 亚洲欧美日韩中文视频| 久久久久久久久亚洲精品| 亚洲人成电影网站色| 成人在线播放视频| 中文字幕亚洲一区在线观看| 欧美a在线看| 久久久久www| 一区二区三区伦理| 欧美高清一级大片| 国产高潮在线| 国产99久久精品一区二区永久免费| 欧美成人h版| 国产精品视频一区二区三区四| 色猫猫成人app| 91精品久久久久久久久久久久久久| 久久亚洲资源中文字| 91香蕉国产在线观看| 影音先锋欧美激情| 久久国产精品一区二区三区四区 | 成人综合在线观看| 艳妇乳肉亭妇荡乳av| 久久这里只有精品首页| www成人啪啪18软件| 亚洲视频狠狠干| 久久精品国产av一区二区三区| 精品免费在线视频| 国产精品尤物视频| 欧美一级生活片| 午夜在线视频免费| 国产一区二区黑人欧美xxxx| 欧美精品电影| 国语自产精品视频在线看抢先版图片| 一区二区三区短视频| 国产精品日韩在线观看| 国产一区二区| 欧美一区激情视频在线观看| 日韩欧美一区二区三区免费看| 国产精品videossex国产高清| 亚洲欧美日韩国产一区| 污污的视频免费| 成人av资源在线| jizz18女人高潮| 亚洲18女电影在线观看| 在线免费观看一区二区| 精品久久久久久久久久久院品网 | 久久精品国产亚洲精品| 91九色国产在线播放| 国产精品丝袜高跟| 91蝌蚪精品视频| 亚洲精品久久区二区三区蜜桃臀| 午夜精品久久久久99热蜜桃导演| 午夜肉伦伦影院| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产中文字幕一区| 右手影院亚洲欧美| 亚洲人精品午夜| 无码人妻精品一区二区蜜桃色欲 | 欧美视频在线看| 国产男女猛烈无遮挡| 亚洲国产精品中文| www在线免费观看视频| 国产91色在线|免| 国产 日韩 欧美 综合 一区| 亚洲伊人婷婷| 美女视频一区免费观看| xxxxwww一片| 国产精品久久久久久亚洲伦| 日韩精品一卡二卡| 欧美一区二区三级| 97电影在线观看| 欧美资源在线观看| 成人中文字幕视频| 男女h黄动漫啪啪无遮挡软件| 久久精品一区| 在线观看av中文字幕| 一区二区三区精品在线| 亚洲专区在线播放| 一区二区三区国产视频| 亚洲性受xxx喷奶水| 国产欧美一区二区三区另类精品 | 国产精品麻豆99久久久久久| wwwxxx亚洲| 日韩电影在线观看中文字幕| av电影免费在线看| 999热视频在线观看| 亚洲天堂一区二区三区四区| 亚洲免费黄色网| 国产精品欧美一级免费| www.亚洲激情| 国产一区二区三区精品久久久 | 国产主播欧美精品| 青草国产精品| 亚洲第一中文av| 中文乱码免费一区二区| 亚洲成人av网址| 国产亚洲欧美aaaa| 日韩和的一区二在线| 欧美一区二区三区精美影视| 男女精品视频| 免费人成又黄又爽又色| 色综合久久久久综合体桃花网| 日韩av资源| 日韩男女性生活视频| 欧美视频免费| 亚洲视频第二页| 亚洲色图丝袜美腿| 国产黄色一区二区| 欧美国产日韩视频| 国产毛片久久久| 欧美亚洲精品一区二区| 99re66热这里只有精品3直播 | 欧美一级国产精品| 少妇又色又爽又黄的视频| 国产亚洲精品综合一区91| 国产麻豆久久| 一区二区三区一级片| 国产精品亚洲一区二区三区妖精| 久久久精品91| 日韩成人av在线| 久久亚洲精品爱爱| 中文字幕一区二区三区精彩视频| 国产精品香蕉一区二区三区| 免费在线黄色片| 国产视频精品在线| 成人午夜在线| 男人草女人视频| 91美女蜜桃在线| 中文字幕一区二区久久人妻| 久久久精品国产网站| 精品国产一区二区三区不卡蜜臂| 女性女同性aⅴ免费观女性恋| 国产欧美一区在线| 精品国产亚洲av麻豆| 午夜免费日韩视频| 成人综合久久| 91人妻一区二区| 在线观看成人免费视频| av中文字幕在线观看| 免费成人av网站| 黑人精品欧美一区二区蜜桃| 日本污视频在线观看| 中文字幕在线观看日韩| 澳门久久精品| 亚洲欧洲日本精品| 性做久久久久久久免费看| 北岛玲一区二区三区| 91文字幕巨乱亚洲香蕉| 乱码第一页成人| 欧美精品成人久久| 在线观看国产成人av片| 国产精品毛片av| 亚洲色图偷拍视频| 欧美午夜美女看片| 怡红院在线播放|