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

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

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

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

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

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

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

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

磁盤驅動層:磁盤的驅動程序把對LBA的讀寫命令轉化為各自的協(xié)議,比如變成ATA命令,SCSI

網(wǎng)友評論