本技術屬于操作系統(tǒng),特別是涉及一種固態(tài)硬盤的讀寫方法和計算機可讀存儲介質(zhì)。
背景技術:
1、數(shù)據(jù)庫管理系統(tǒng)(database?management?system,dbms)的任務是處理海量數(shù)據(jù),這些數(shù)據(jù)往往超出了計算機內(nèi)存的存儲能力。因此,dbms必須將數(shù)據(jù)存儲在存儲容量更大但訪問速度相對較慢的硬盤上。幸運的是,隨著技術的發(fā)展,基于nvme協(xié)議的固態(tài)硬盤(ssd)已經(jīng)顯著提升了性能,能夠提供數(shù)百萬次的輸入輸出操作每秒(iops)以及微秒級別的讀寫延遲,并且成本也在逐漸降低。這使得dbms有了一個新的選擇:將nvme固態(tài)硬盤作為內(nèi)存的擴展使用。同時,隨著數(shù)據(jù)庫服務器的內(nèi)存容量不斷增加,以及數(shù)據(jù)庫工作負載展現(xiàn)出的良好局部性,越來越多的數(shù)據(jù)操作能夠在內(nèi)存中高效完成。linux操作系統(tǒng)引入了mmap機制,可以將nvme固態(tài)硬盤當作內(nèi)存使用。mmap將文件或存儲設備映射到進程的虛擬地址空間。當進程訪問映射的地址時,如果數(shù)據(jù)不在物理內(nèi)存中,則會觸發(fā)頁面缺失。操作系統(tǒng)負責將缺失的頁面從存儲設備加載到物理內(nèi)存中,并更新頁表,使得后續(xù)的訪問可以快速進行。linux操作系統(tǒng)將mmap封裝成一個操作系統(tǒng)調(diào)用,簡單易用,無需編寫復雜的頁面管理代碼。此外,mmap利用快表緩沖區(qū)(tlb)來加速進程的虛擬地址到物理內(nèi)存地址的轉(zhuǎn)換操作,在緩存命中時固態(tài)硬盤的訪問速度和普通內(nèi)存訪問一樣快。
2、然而,dbms采用mmap機制后,將失去對頁面缺失和淘汰的控制,無法保證事務安全性,也無法實現(xiàn)dbms優(yōu)化的頁面替換算法。此外,mmap缺乏異步i/o接口,導致i/o停滯不可預測,i/o錯誤處理復雜。更嚴重的問題是,linux的虛擬內(nèi)存實現(xiàn)無法充分利用現(xiàn)代nvme固態(tài)硬盤的性能,尤其是在高i/o吞吐量的場景下,頁表操作會成為性能瓶頸。現(xiàn)有的頁表管理機制在處理頁面周轉(zhuǎn)率高的工作負載時存在明顯弊端。如何提高固態(tài)硬盤中的文件讀寫效率,是本領域技術人員亟待解決的技術問題。
3、前面的敘述在于提供一般的背景信息,并不一定構成現(xiàn)有技術。
技術實現(xiàn)思路
1、基于此,有必要針對上述問題,提出了一種固態(tài)硬盤的讀寫方法和計算機可讀存儲介質(zhì),能夠提高固態(tài)硬盤中的文件讀寫效率。
2、本技術解決其技術問題是采用以下的技術方案來實現(xiàn)的:
3、本技術提供了一種固態(tài)硬盤的讀寫方法,應用于讀寫模塊,讀寫模塊為操作系統(tǒng)的內(nèi)核模塊;操作系統(tǒng)管理固態(tài)硬盤和物理內(nèi)存,固態(tài)硬盤被配置為和物理內(nèi)存共同存儲數(shù)據(jù);固態(tài)硬盤的存儲空間由多個固態(tài)硬盤頁面構成;讀寫模塊維護一個連續(xù)的虛擬內(nèi)存頁面空間,虛擬內(nèi)存頁面空間由多個虛擬內(nèi)存頁面構成,每個虛擬內(nèi)存頁面與固態(tài)硬盤頁面一一對應、大小一致;讀寫模塊還維護一個具有預設個數(shù)工作線程的分散式內(nèi)存頁面分配器,每個工作線程管理一個由物理內(nèi)存頁面構成的局部內(nèi)存池;每個物理內(nèi)存頁面的大小與每個虛擬內(nèi)存頁面的大小一致;所有物理內(nèi)存頁面都是物理內(nèi)存的不重疊的分塊;讀寫模塊將每個虛擬內(nèi)存頁面配置有4個布爾狀態(tài)位,布爾狀態(tài)位包括逐出/非逐出、有鎖/無鎖、臟/非臟、可丟棄/不可棄;方法包括如下步驟:當獲取到讀寫指令時,解析讀寫指令以確定待處理的目標數(shù)據(jù)和讀寫需求,讀寫需求包括讀取需求和寫入需求;根據(jù)目標數(shù)據(jù)的目標數(shù)據(jù)地址定位對應的固態(tài)硬盤頁面,根據(jù)固態(tài)硬盤頁面確定對應的虛擬內(nèi)存頁面和對應的物理內(nèi)存頁面;根據(jù)讀寫需求對固態(tài)硬盤頁面和/或物理內(nèi)存頁面內(nèi)的目標數(shù)據(jù)進行處理,以完成目標數(shù)據(jù)的讀寫操作,讀寫操作包括配置虛擬內(nèi)存頁面的布爾狀態(tài)位。
4、在本技術一可選實施例中,讀取需求為從固態(tài)硬盤中讀取目標數(shù)據(jù),并寫入物理內(nèi)存;當讀寫需求為讀取需求時,目標數(shù)據(jù)的目標數(shù)據(jù)內(nèi)容存儲于固態(tài)硬盤中;根據(jù)讀寫需求對固態(tài)硬盤頁面和/或物理內(nèi)存頁面內(nèi)的目標數(shù)據(jù)進行處理,以完成目標數(shù)據(jù)的讀寫操作,包括:獲取固態(tài)硬盤頁面內(nèi)的目標數(shù)據(jù)內(nèi)容;將目標數(shù)據(jù)內(nèi)容寫入對應的物理內(nèi)存頁面中,將寫入了目標數(shù)據(jù)內(nèi)容的物理內(nèi)存頁面稱之為第一物理內(nèi)存頁面;返回第一物理內(nèi)存頁面。
5、在本技術一可選實施例中,寫入需求為將物理內(nèi)存頁面內(nèi)的目標數(shù)據(jù)寫入指定的固態(tài)硬盤頁面;當讀寫需求為寫入需求時,目標數(shù)據(jù)的目標數(shù)據(jù)內(nèi)容存儲于物理內(nèi)存中;根據(jù)讀寫需求對固態(tài)硬盤頁面和/或物理內(nèi)存頁面內(nèi)的目標數(shù)據(jù)進行處理,以完成目標數(shù)據(jù)的讀寫操作,包括:獲取目標數(shù)據(jù)內(nèi)容,將目標數(shù)據(jù)內(nèi)容拷貝至對應的物理內(nèi)存頁面內(nèi);將對應的虛擬內(nèi)存頁面的布爾狀態(tài)位設置為臟狀態(tài)。
6、在本技術一可選實施例中,每個固態(tài)硬盤頁面所在的數(shù)據(jù)地址稱之為固態(tài)硬盤頁面地址,每個虛擬內(nèi)存頁面所在的數(shù)據(jù)地址稱之為虛擬內(nèi)存頁面地址,每個物理內(nèi)存頁面所在的數(shù)據(jù)地址稱之為物理內(nèi)存頁面地址;讀寫模塊內(nèi)存儲有第一頁表和第二頁表;第一頁表由操作系統(tǒng)維護,第一頁表用于實現(xiàn)第一轉(zhuǎn)換,第一轉(zhuǎn)換為固態(tài)硬盤頁面地址與虛擬內(nèi)存頁面地址間的轉(zhuǎn)換;固態(tài)硬盤頁面地址與虛擬內(nèi)存頁面地址一一對應;第二頁表由讀寫模塊維護,第二頁表用于實現(xiàn)第二轉(zhuǎn)換,第二轉(zhuǎn)換為虛擬內(nèi)存頁面地址與物理內(nèi)存頁面地址間的轉(zhuǎn)換,第二轉(zhuǎn)換利用操作系統(tǒng)的cpu核心的快表緩存區(qū)緩存提高轉(zhuǎn)換效率,快表緩沖區(qū)用于存儲虛擬地址到物理地址的映射信息;物理內(nèi)存頁面集合為虛擬內(nèi)存頁面集合的子集;根據(jù)固態(tài)硬盤頁面確定對應的虛擬內(nèi)存頁面和對應的物理內(nèi)存頁面,包括:根據(jù)第一頁表對固態(tài)硬盤頁面地址執(zhí)行第一轉(zhuǎn)換,以確定對應的虛擬內(nèi)存頁面;判斷虛擬內(nèi)存頁面的布爾狀態(tài)位;當布爾狀態(tài)位為逐出狀態(tài)時,觸發(fā)缺頁中斷,阻塞當前線程,啟動中斷服務過程,中斷服務過程用于獲取空閑的物理內(nèi)存頁面以構建與虛擬內(nèi)存頁面的映射關系;當布爾狀態(tài)位為非逐出狀態(tài)時,等待虛擬內(nèi)存頁面的布爾狀態(tài)位進入無鎖狀態(tài)后,根據(jù)第二頁表對虛擬內(nèi)存頁面地址執(zhí)行第二轉(zhuǎn)換,以確定虛擬內(nèi)存頁面對應的物理內(nèi)存頁面;若能夠找到對應的物理內(nèi)存頁面,則將虛擬內(nèi)存頁面的布爾狀態(tài)位設置為不可丟棄狀態(tài),并返回物理內(nèi)存頁面;若不能找到對應的物理內(nèi)存頁面,則觸發(fā)缺頁中斷,阻塞當前線程,啟動中斷服務過程。
7、在本技術一可選實施例中,中斷服務過程包括:判斷虛擬內(nèi)存頁面對應的工作線程所管轄的局部內(nèi)存池中,是否存在預設空閑條件的物理內(nèi)存頁面;若對應的工作線程所管轄局部內(nèi)存池中存在滿足預設空閑條件的物理內(nèi)存頁面,則將滿足預設空閑條件的物理內(nèi)存頁面標記為空閑物理內(nèi)存頁面;對空閑物理內(nèi)存頁面和虛擬內(nèi)存頁面執(zhí)行映射和喚醒操作;若對應的工作線程所管轄局部內(nèi)存池中不存在滿足預設空閑條件的物理內(nèi)存頁面,則啟動竊取操作,從分散式內(nèi)存頁面分配器內(nèi)的其余工作線程中竊取一個空閑物理內(nèi)存頁面;對空閑物理內(nèi)存頁面和虛擬內(nèi)存頁面執(zhí)行映射和喚醒操作。
8、在本技術一可選實施例中,竊取操作,包括:判斷其余工作線程所管轄局部內(nèi)存池中,是否存在預設空閑條件的物理內(nèi)存頁面;若其余工作線程所管轄局部內(nèi)存池中存在滿足預設空閑條件的物理內(nèi)存頁面,則隨機選取一個物理內(nèi)存頁面標記為空閑物理內(nèi)存頁面,并將空閑物理內(nèi)存頁面移到對應的工作線程所管轄的局部內(nèi)存池中;對空閑物理內(nèi)存頁面和虛擬內(nèi)存頁面執(zhí)行映射和喚醒操作;若其余工作線程所管轄局部內(nèi)存池中不存在滿足預設空閑條件的物理內(nèi)存頁面,則啟動批量淘汰操作,以淘汰對應的工作線程所管轄的局部內(nèi)存池中預設個數(shù)的物理內(nèi)存頁面,并從淘汰的物理內(nèi)存頁面中隨機選取一個標記為空閑物理內(nèi)存頁面;將空閑物理內(nèi)存頁面和虛擬內(nèi)存頁面執(zhí)行映射和喚醒操作。
9、在本技術一可選實施例中,批量淘汰操作,包括:從物理內(nèi)存中獲取滿足淘汰條件的物理內(nèi)存頁面,淘汰條件包括預設空閑條件,且物理內(nèi)存頁面對應的虛擬內(nèi)存頁面的布爾狀態(tài)位為可丟棄狀態(tài);利用操作系統(tǒng)將淘汰條件的物理內(nèi)存頁面批量淘汰,將淘汰了的物理內(nèi)存頁面標記淘汰物理內(nèi)存頁面;將淘汰物理內(nèi)存頁面對應的虛擬內(nèi)存頁面標記為淘汰虛擬內(nèi)存頁面;將淘汰虛擬內(nèi)存頁面的布爾狀態(tài)位設置逐出狀態(tài);在第二頁表中將淘汰虛擬內(nèi)存頁面映射到一個預設的已預填充到快表緩沖區(qū)中的固定的只讀物理內(nèi)存頁面;若淘汰虛擬內(nèi)存頁面的布爾狀態(tài)位為臟狀態(tài),則將淘汰虛擬內(nèi)存頁面的布爾狀態(tài)位設置為有鎖狀態(tài),將淘汰物理內(nèi)存頁面內(nèi)的數(shù)據(jù)寫入對應的固態(tài)硬盤頁面后,將淘汰虛擬內(nèi)存頁面的布爾狀態(tài)位恢復為無鎖狀態(tài)和非臟狀態(tài)。
10、在本技術一可選實施例中,映射和喚醒操作包括:在第二頁表和快表緩沖區(qū)中建立空閑物理內(nèi)存頁面和虛擬內(nèi)存頁面的映射關系;喚醒阻塞的當前線程,將虛擬內(nèi)存頁面的布爾狀態(tài)位設置成非逐出狀態(tài)和不可棄狀態(tài),并返回空閑物理內(nèi)存頁面。
11、在本技術一可選實施例中,配置虛擬內(nèi)存頁面的布爾狀態(tài)位,包括:若獲取到初始化指令,則將虛擬內(nèi)存頁面的布爾狀態(tài)位配置為逐出、無鎖、非臟和可丟棄狀態(tài);若虛擬內(nèi)存頁面有對應的物理內(nèi)存頁面,則虛擬內(nèi)存頁面處于非逐出狀態(tài),否則處于逐出狀態(tài);若虛擬內(nèi)存頁面對應的物理內(nèi)存頁面的數(shù)據(jù)正在寫入固態(tài)硬盤頁面,則虛擬內(nèi)存頁面處于有鎖狀態(tài),否則處于無鎖狀態(tài);若虛擬內(nèi)存頁面對應的物理內(nèi)存頁面的數(shù)據(jù)有更新但未寫入固態(tài)硬盤頁面,則虛擬內(nèi)存頁面處于臟狀態(tài),否則處于非臟狀態(tài);若虛擬內(nèi)存頁面對應的物理內(nèi)存頁面的數(shù)據(jù)在預設期限內(nèi)被讀取過,則虛擬內(nèi)存頁面處于不可棄狀態(tài),否則處于可丟棄狀態(tài)。
12、本技術還提供了一種計算機可讀存儲介質(zhì),存儲有計算機程序,當計算機程序被處理器執(zhí)行時實現(xiàn)如前述的方法。
13、采用本技術實施例,具有如下有益效果:
14、本技術在操作系統(tǒng)的內(nèi)核模塊中新增一讀寫模塊,用于維護一個連續(xù)的虛擬內(nèi)存頁面空間,與操作系統(tǒng)管理的固態(tài)硬盤頁面一一對應、大小一致,并維護一個具有預設個數(shù)工作線程的分散式內(nèi)存頁面分配器,每個工作線程管理一個由物理內(nèi)存頁面構成的局部內(nèi)存池,每個物理內(nèi)存頁面的大小與每個虛擬內(nèi)存頁面的大小一致。所述讀寫模塊在針對固態(tài)硬盤進行讀寫時,以虛擬內(nèi)存頁面為中介建立起讀寫操作涉及的固態(tài)硬盤頁面與所述分散式內(nèi)存頁面分配器管轄的物理內(nèi)存頁面的對應關系,將針對固態(tài)硬盤頁面的讀寫操作轉(zhuǎn)換成針對物理內(nèi)存頁面的讀寫操作,從而提高固態(tài)硬盤的讀寫效率。上述方法可以保證dbms在數(shù)據(jù)負載不超出內(nèi)存容量時取得數(shù)倍的性能提升;即使在數(shù)據(jù)負載超出內(nèi)存容量時,性能下降也是平緩的,且穩(wěn)定后相對于現(xiàn)有方案的性能提升更加明顯。
15、上述說明僅是本技術技術方案的概述,為了能夠更清楚了解本技術的技術手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本技術的上述和其他目的、特征和優(yōu)點能夠更明顯易懂,以下特舉較佳實施例,并配合附圖,詳細說明。應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本技術。