最近在做磁盤性能優(yōu)化,需要結(jié)合文件系統(tǒng)原理去思考優(yōu)化方向,因此借此機(jī)會(huì)進(jìn)一步加深了對(duì)文件系統(tǒng)的認(rèn)識(shí)。在看這篇文章之前,建議先看下前面一篇關(guān)于磁盤工作原理的解讀。下面簡(jiǎn)單總結(jié)一些要點(diǎn)分享出來(lái):

一、文件系統(tǒng)層次分析

由上而下主要分為用戶層、VFS層、文件系統(tǒng)層、緩存層、塊設(shè)備層、磁盤驅(qū)動(dòng)層、磁盤物理層

用戶層:最上面用戶層就是我們?nèi)粘J褂玫母鞣N程序,需要的接口主要是文件的創(chuàng)建、刪除、打開(kāi)、關(guān)閉、寫(xiě)、讀等。 

VFS層:我們知道Linux分為用戶態(tài)和內(nèi)核態(tài),用戶態(tài)請(qǐng)求硬件資源需要調(diào)用System Call通過(guò)內(nèi)核態(tài)去實(shí)現(xiàn)。用戶的這些文件相關(guān)操作都有對(duì)應(yīng)的System Call函數(shù)接口,接口調(diào)用 VFS對(duì)應(yīng)的函數(shù)。 

文件系統(tǒng)層:不同的文件系統(tǒng)實(shí)現(xiàn)了VFS的這些函數(shù),通過(guò)指針注冊(cè)到VFS里面。所以,用戶的操作通過(guò)VFS轉(zhuǎn)到各種文件系統(tǒng)。文件系統(tǒng)把文件讀寫(xiě)命令轉(zhuǎn)化為對(duì)磁盤LBA的操作,起了一個(gè)翻譯和磁盤管理的作用。 

緩存層:文件系統(tǒng)底下有緩存,Page Cache,加速性能。對(duì)磁盤LBA的讀寫(xiě)數(shù)據(jù)緩存到這里。

塊設(shè)備層:塊設(shè)備接口Block Device是用來(lái)訪問(wèn)磁盤LBA的層級(jí),讀寫(xiě)命令組合之后插入到命令隊(duì)列,磁盤的驅(qū)動(dòng)從隊(duì)列讀命令執(zhí)行。Linux設(shè)計(jì)了電梯算法等對(duì)很多LBA的讀寫(xiě)進(jìn)行優(yōu)化排序,盡量把連續(xù)地址放在一起。

磁盤驅(qū)動(dòng)層:磁盤的驅(qū)動(dòng)程序把對(duì)LBA的讀寫(xiě)命令轉(zhuǎn)化為各自的協(xié)議,比如變成ATA命令,SCSI