|
1 、前言 自從誕生以來,Linux 就被不斷完善和普及,目前它已經(jīng)成為主流通用操作系統(tǒng)之一,使用得非常廣泛,它與 Windows、UNIX 一起占據(jù)了操作系統(tǒng)領(lǐng)域幾乎所有的市場(chǎng)份額。特別是在高性能計(jì)算領(lǐng)域,Linux 已經(jīng)成為一個(gè)占主導(dǎo)地位的操作系統(tǒng),在2005年6月全球TOP500 計(jì)算機(jī)中,有 301 臺(tái)部署的是 Linux 操作系統(tǒng)。因此,研究和使用 Linux 已經(jīng)成為開發(fā)者的不可回避的問題了。 下面我們介紹一下 Linux 內(nèi)核中文件 Cache 管理的機(jī)制。本文以 2.6 系列內(nèi)核為基準(zhǔn),主要講述工作原理、數(shù)據(jù)結(jié)構(gòu)和算法,不涉及具體代碼。 2 操作系統(tǒng)和文件 Cache 管理 操作系統(tǒng)是計(jì)算機(jī)上最重要的系統(tǒng)軟件,它負(fù)責(zé)管理各種物理資源,并向應(yīng)用程序提供各種抽象接口以便其使用這些物理資源。從應(yīng)用程序的角度看,操作系統(tǒng)提供了一個(gè)統(tǒng)一的虛擬機(jī),在該虛擬機(jī)中沒有各種機(jī)器的具體細(xì)節(jié),只有進(jìn)程、文件、地址空間以及進(jìn)程間通信等邏輯概念。這種抽象虛擬機(jī)使得應(yīng)用程序的開發(fā)變得相對(duì)容易:開發(fā)者只需與虛擬機(jī)中的各種邏輯對(duì)象交互,而不需要了解各種機(jī)器的具體細(xì)節(jié)。此外,這些抽象的邏輯對(duì)象使得操作系統(tǒng)能夠很容易隔離并保護(hù)各個(gè)應(yīng)用程序。 對(duì)于存儲(chǔ)設(shè)備上的數(shù)據(jù),操作系統(tǒng)向應(yīng)用程序提供的邏輯概念就是"文件"。應(yīng)用程序要存儲(chǔ)或訪問數(shù)據(jù)時(shí),只需讀或者寫"文件"的一維地址空間即可,而這個(gè)地址空間與存儲(chǔ)設(shè)備上存儲(chǔ)塊之間的對(duì)應(yīng)關(guān)系則由操作系統(tǒng)維護(hù)。 在 Linux 操作系統(tǒng)中,當(dāng)應(yīng)用程序需要讀取文件中的數(shù)據(jù)時(shí),操作系統(tǒng)先分配一些內(nèi)存,將數(shù)據(jù)從存儲(chǔ)設(shè)備讀入到這些內(nèi)存中,然后再將數(shù)據(jù)分發(fā)給應(yīng)用程序;當(dāng)需要往文件中寫數(shù)據(jù)時(shí),操作系統(tǒng)先分配內(nèi)存接收用戶數(shù)據(jù),然后再將數(shù)據(jù)從內(nèi)存寫到磁盤上。文件 Cache 管理指的就是對(duì)這些由操作系統(tǒng)分配,并用來存儲(chǔ)文件數(shù)據(jù)的內(nèi)存的管理。 Cache 管理的優(yōu)劣通過兩個(gè)指標(biāo)衡量:一是 Cache 命中率,Cache 命中時(shí)數(shù)據(jù)可以直接從內(nèi)存中獲取,不再需要訪問低速外設(shè),因而可以顯著提高性能;二是有效 Cache 的比率,有效 Cache 是指真正會(huì)被訪問到的 Cache 項(xiàng),如果有效 Cache 的比率偏低,則相當(dāng)部分磁盤帶寬會(huì)被浪費(fèi)到讀取無用 Cache 上,而且無用 Cache 會(huì)間接導(dǎo)致系統(tǒng)內(nèi)存緊張,最后可能會(huì)嚴(yán)重影響性能。 下面分別介紹文件 Cache 管理在 Linux 操作系統(tǒng)中的地位和作用、Linux 中文件 Cache相關(guān)的數(shù)據(jù)結(jié)構(gòu)、Linux 中文件 Cache 的預(yù)讀和替換、Linux 中文件 Cache 相關(guān) API 及其實(shí)現(xiàn)。 2、 文件 Cache 的地位和作用 文件 Cache 是文件數(shù)據(jù)在內(nèi)存中的副本,因此文件 Cache 管理與內(nèi)存管理系統(tǒng)和文件系統(tǒng)都相關(guān):一方面文件 Cache 作為物理內(nèi)存的一部分,需要參與物理內(nèi)存的分配回收過程,另一方面文件 Cache 中的數(shù)據(jù)來源于存儲(chǔ)設(shè)備上的文件,需要通過文件系統(tǒng)與存儲(chǔ)設(shè)備進(jìn)行讀寫交互。從操作系統(tǒng)的角度考慮,文件 Cache 可以看做是內(nèi)存管理系統(tǒng)與文件系統(tǒng)之間的聯(lián)系紐帶。因此,文件 Cache 管理是操作系統(tǒng)的一個(gè)重要組成部分,它的性能直接影響著文件系統(tǒng)和內(nèi)存管理系統(tǒng)的性能。 圖1描述了 Linux 操作系統(tǒng)中文件 Cache 管理與內(nèi)存管理以及文件系統(tǒng)的關(guān)系示意圖。從圖中可以看到,在 Linux 中,具體文件系統(tǒng),如 ext2/ext3、jfs、ntfs 等,負(fù)責(zé)在文件 Cache和存儲(chǔ)設(shè)備之間交換數(shù)據(jù),位于具體文件系統(tǒng)之上的虛擬文件系統(tǒng)VFS負(fù)責(zé)在應(yīng)用程序和文件 Cache 之間通過 read/write 等接口交換數(shù)據(jù),而內(nèi)存管理系統(tǒng)負(fù)責(zé)文件 Cache 的分配和回收,同時(shí)虛擬內(nèi)存管理系統(tǒng)(VMM)則允許應(yīng)用程序和文件 Cache 之間通過 memory map的方式交換數(shù)據(jù)??梢姡?Linux 系統(tǒng)中,文件 Cache 是內(nèi)存管理系統(tǒng)、文件系統(tǒng)以及應(yīng)用程序之間的一個(gè)聯(lián)系樞紐。
|
|
|