《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于多頁(yè)的龍芯2F軟TLB重載入異常處理改進(jìn)
基于多頁(yè)的龍芯2F軟TLB重載入異常處理改進(jìn)
來(lái)源:微型機(jī)與應(yīng)用2011年第23期
何 煒
(江蘇自動(dòng)化研究所,,江蘇 連云港 222006)
摘要: 龍芯2F系統(tǒng)在TLB替換處理上開(kāi)銷(xiāo)較大,,現(xiàn)有軟TLB技術(shù)從減少TLB重載入異常處理時(shí)間方面考慮,利用軟TLB來(lái)緩存TLB表項(xiàng),,提高替換處理中Cached命中率,減少了重載入異常處理時(shí)間,。為進(jìn)一步提高TLB效率,,設(shè)計(jì)采用多頁(yè)技術(shù)提高TLB的覆蓋率,減少TLB替換次數(shù),,進(jìn)而減少重載入異常處理的次數(shù),,達(dá)到提高系統(tǒng)性能的目的,。
Abstract:
Key words :

摘  要: 龍芯2F系統(tǒng)在TLB替換處理上開(kāi)銷(xiāo)較大,現(xiàn)有軟TLB技術(shù)從減少TLB重載入異常處理時(shí)間方面考慮,,利用軟TLB來(lái)緩存TLB表項(xiàng),,提高替換處理中Cached命中率,,減少了重載入異常處理時(shí)間。為進(jìn)一步提高TLB效率,,設(shè)計(jì)采用多頁(yè)技術(shù)提高TLB的覆蓋率,,減少TLB替換次數(shù),進(jìn)而減少重載入異常處理的次數(shù),,達(dá)到提高系統(tǒng)性能的目的,。
關(guān)鍵詞: TLB;重載入異常處理,;多頁(yè)技術(shù);龍芯2F 

 隨著軟件規(guī)模增大,,內(nèi)存需求越來(lái)越大?,F(xiàn)代系統(tǒng)提出虛空間的概念,軟件運(yùn)行在獨(dú)立的虛空間中,,被訪(fǎng)問(wèn)時(shí)才從物理內(nèi)存中建立與之對(duì)應(yīng)的空間,。TLB(Translate Look-aside Buffer)是加速線(xiàn)性地址向物理地址轉(zhuǎn)換的緩沖器,即緩存最近使用過(guò)的頁(yè)的物理地址,。使用線(xiàn)性地址和TLB中的存儲(chǔ)項(xiàng)進(jìn)行比較,如果相同就直接獲得目標(biāo)頁(yè)的物理地址,,不需要訪(fǎng)問(wèn)外存,,這樣可大大提高地址轉(zhuǎn)換速度。
 龍芯2F是中科院計(jì)算所自主研發(fā)的高性能通用64位處理器[1],,在龍芯2F的Linux系統(tǒng)中,,最占TLB替換處理時(shí)間的就是訪(fǎng)存操作,,減少訪(fǎng)存操作就可提高TLB使用效率,,從而提高龍芯2F的整體系統(tǒng)性能?,F(xiàn)有軟TLB技術(shù)可減少TLB替換處理時(shí)間,,多頁(yè)技術(shù)的采用更可以減少TLB替換次數(shù),,從而進(jìn)一步提高TLB替換效率,,幫助對(duì)龍芯2F系統(tǒng)進(jìn)行優(yōu)化,。
1 龍芯2F TLB重載入異常處理
 龍芯2F系統(tǒng)采用Debian Linux,,其TLB只負(fù)責(zé)地址轉(zhuǎn)譯,,表項(xiàng)維護(hù)由操作系統(tǒng)負(fù)責(zé),所以表頁(yè)發(fā)生修改時(shí)TLB內(nèi)容必須被及時(shí)更新[2],。Linux系統(tǒng)通過(guò)flush_tlb_all、flush_tlb_mm,、flush_tlb_page,、flush_tlb_range等函數(shù)來(lái)操作TLB內(nèi)容,。龍芯2F為了提高TLB重載入異常處理效率,,提供了兩個(gè)TLB專(zhuān)用寄存器K0和K1,,這樣在進(jìn)入重載入異常處理時(shí)就不需要對(duì)用戶(hù)寄存器進(jìn)行保存,從而減少操作時(shí)間,。
TLB重載入異常處理流程為:進(jìn)入重載入異常處理后,,首先獲取該進(jìn)程頁(yè)全局目錄首地址,取得頁(yè)全局目錄和頁(yè)中間目錄內(nèi)容,,然后獲取兩個(gè)連續(xù)頁(yè)表項(xiàng)用來(lái)進(jìn)行TLB替換寫(xiě)入,,處理完畢后返回異常處理現(xiàn)場(chǎng),。
2 軟TLB處理實(shí)現(xiàn)
 龍芯2F系統(tǒng)為64位,頁(yè)表為3級(jí)頁(yè)表,,且操作地址不連續(xù),每次訪(fǎng)問(wèn)三級(jí)頁(yè)表內(nèi)容時(shí),,TLB重載入需要5次訪(fǎng)存操作,,產(chǎn)生3次左右的Cache失效,,使得TLB重載入異常處理時(shí)間大大加長(zhǎng)。
龍芯2F系統(tǒng)中設(shè)計(jì)用軟TLB技術(shù)來(lái)減少TLB替換處理時(shí)間,,軟TLB技術(shù)在內(nèi)存空間中開(kāi)辟出一個(gè)全局TLB緩沖區(qū)域,作為硬件TLB的緩存,,在系統(tǒng)進(jìn)行TLB表項(xiàng)替換前,要先查詢(xún)?cè)揟LB緩沖區(qū),,如果所查內(nèi)容在緩沖區(qū)內(nèi),,則將內(nèi)容寫(xiě)入TLB,如果查詢(xún)不到,,則按照原來(lái)的TLB查詢(xún)過(guò)程進(jìn)行查詢(xún),。所以只訪(fǎng)問(wèn)一次緩沖區(qū)且訪(fǎng)存操作連續(xù)的軟TLB方法產(chǎn)生Cache失效的幾率被大大降低了[3],。如果軟TLB查詢(xún)失敗,該次查詢(xún)只會(huì)造成系統(tǒng)多作一次訪(fǎng)問(wèn)操作的額外開(kāi)銷(xiāo),,因此軟TLB技術(shù)減少TLB替換處理時(shí)間的重點(diǎn)在于提高軟TLB查詢(xún)命中率,。圖1為龍芯2F軟TLB重載入異常處理流程,。

 系統(tǒng)在修改頁(yè)表項(xiàng)時(shí),,除修改硬件TLB對(duì)應(yīng)項(xiàng)外,,還要查詢(xún)?cè)擁?yè)表項(xiàng)是否緩存于軟TLB中,若已有緩沖則修改軟TLB中的頁(yè)表項(xiàng),,否則就將該TLB表項(xiàng)緩存入軟TLB中,。
3 分頁(yè)對(duì)Linux系統(tǒng)的影響
 龍芯2F采用軟硬協(xié)同實(shí)現(xiàn)內(nèi)存管理,,硬件完成TLB地址轉(zhuǎn)譯,軟件完成TLB表項(xiàng)替換,。為了增大TLB的覆蓋率,,必須增加每項(xiàng)TLB表項(xiàng)的覆蓋范圍,系統(tǒng)設(shè)計(jì)每個(gè)表項(xiàng)可以有不同的分頁(yè)大小,,從4 KB~16 MB按4倍增長(zhǎng),。CP0寄存器PageMask用于記錄映射的頁(yè)的大小,,并且這個(gè)記錄在寫(xiě)一個(gè)新的表項(xiàng)的同時(shí)載入TLB中[1]。因此操作系統(tǒng)可以支持不同大小的頁(yè)表項(xiàng)以適用于不同的目的,,然而在同一運(yùn)行的時(shí)刻只能是固定大小的頁(yè),。
 當(dāng)TLB表項(xiàng)均采用4 KB分頁(yè)大小時(shí),TLB可為512 KB的地址進(jìn)行轉(zhuǎn)譯,;16 MB分頁(yè)大小時(shí)可為2 GB地址進(jìn)行轉(zhuǎn)譯,。對(duì)于某個(gè)運(yùn)算集合在4 MB和8 MB之間的程序來(lái)說(shuō),如果分頁(yè)大小為32 KB,,則在運(yùn)算集合大于4 MB時(shí)TLB重載入異常處理會(huì)大量產(chǎn)生,,TLB替換次數(shù)會(huì)大量增加。如果分頁(yè)大小為64 KB,,TLB就可以覆蓋整個(gè)8 MB運(yùn)算集合,,會(huì)大大減少TLB重載入異常的發(fā)生。但是分頁(yè)也不是越大越好,,例如文件系統(tǒng)I/O操作與TLB無(wú)關(guān),,如果用戶(hù)讀取數(shù)據(jù)小于頁(yè)大小,,分頁(yè)過(guò)大反而會(huì)增加系統(tǒng)I/O操作[4];同樣,,大的分頁(yè)會(huì)使得系統(tǒng)每個(gè)進(jìn)程所需資源增加,,使系統(tǒng)能支持的進(jìn)程數(shù)減少,降低系統(tǒng)多進(jìn)程的性能,;大頁(yè)還會(huì)造成內(nèi)存使用緊張,,碎片增多,頁(yè)的換入換出操作增多,,降低系統(tǒng)內(nèi)存使用率,。
 不同分頁(yè)大小對(duì)系統(tǒng)TLB重載入異常處理和替換次數(shù)有不同影響,進(jìn)而對(duì)系統(tǒng)性能有不同影響,,所以應(yīng)根據(jù)不同應(yīng)用需求采用不同頁(yè)大小,。
4 多頁(yè)技術(shù)的實(shí)現(xiàn)
 多頁(yè)技術(shù)針對(duì)TLB每個(gè)表項(xiàng)可分配頁(yè)大小,根據(jù)實(shí)際需求按需分配頁(yè)大小,,該頁(yè)大小信息保存在頁(yè)表項(xiàng)中,,用戶(hù)申請(qǐng)大空間時(shí)用大頁(yè)進(jìn)行分配,申請(qǐng)小空間時(shí)用小頁(yè)進(jìn)行分配,,有利于減少內(nèi)存碎片,。系統(tǒng)最小的頁(yè)被定為基本頁(yè),其他不同大小的頁(yè)用多個(gè)連續(xù)的基本頁(yè)來(lái)表示,,在TLB頁(yè)表項(xiàng)中有頁(yè)大小的信息項(xiàng),。由于線(xiàn)性區(qū)內(nèi)映射的TLB表項(xiàng)中的頁(yè)屬性在頁(yè)分配時(shí)并不分析該頁(yè)所屬線(xiàn)性區(qū)內(nèi)的其他頁(yè)信息,所以在建立線(xiàn)性空間時(shí)就要將用戶(hù)所需的頁(yè)大小信息保存入頁(yè)表中,,進(jìn)行頁(yè)分配時(shí)再根據(jù)信息進(jìn)行不同大小的頁(yè)分配,。
 多頁(yè)技術(shù)主要通過(guò)修改Linux系統(tǒng)內(nèi)存管理子系統(tǒng)實(shí)現(xiàn)。線(xiàn)性空間建立主要通過(guò)Linux內(nèi)存分配函數(shù)mmap()實(shí)現(xiàn),,應(yīng)用軟件的代碼段和數(shù)據(jù)段均通過(guò)mmap()實(shí)現(xiàn)線(xiàn)性空間的建立,,并和文件系統(tǒng)關(guān)聯(lián),使得線(xiàn)性空間成為文件內(nèi)容的映射區(qū)域[5],。要實(shí)現(xiàn)多頁(yè)技術(shù)需要對(duì)mmap()進(jìn)行修改,,為了方便大頁(yè)的產(chǎn)生,在查找空閑的線(xiàn)性空間時(shí),,要根據(jù)申請(qǐng)空間大小找到滿(mǎn)足條件的頁(yè)大小對(duì)齊的線(xiàn)性地址,,如果找不到,則從大到小進(jìn)行頁(yè)對(duì)齊,。在線(xiàn)性空間分配完成后,,要建立多頁(yè)屬性的頁(yè)表,根據(jù)傳入的線(xiàn)性空間大小,盡量采用大頁(yè),,將分配好的頁(yè)信息保存至TLB頁(yè)表項(xiàng)的頁(yè)大小區(qū)域內(nèi),。
 完成線(xiàn)性空間建立后,根據(jù)用戶(hù)需求來(lái)決定頁(yè)大小并將頁(yè)信息存入頁(yè)表中,,根據(jù)這些信息進(jìn)行實(shí)際頁(yè)分配,。Linux系統(tǒng)有頁(yè)緩存頁(yè)和匿名頁(yè)兩種頁(yè)面,為了實(shí)現(xiàn)多頁(yè)技術(shù),,需對(duì)這兩種頁(yè)面的分配進(jìn)行修改,。多頁(yè)技術(shù)的修改主要在于對(duì)原有頁(yè)分配函數(shù)進(jìn)行修改替換,通過(guò)對(duì)filemap_nopage()函數(shù)的修改實(shí)現(xiàn)將分配大頁(yè)后的文件數(shù)據(jù)讀入到連續(xù)頁(yè)緩存中,,通過(guò)對(duì)do_no_page()函數(shù)的修改實(shí)現(xiàn)頁(yè)表的建立,。具體多頁(yè)申請(qǐng)分配流程見(jiàn)圖2。

 

 

 現(xiàn)有龍芯Linux操作系統(tǒng)軟件規(guī)模日益增大與TLB覆蓋空間小的矛盾,,使得系統(tǒng)在TLB替換處理上開(kāi)銷(xiāo)很大,,需要在系統(tǒng)內(nèi)存管理方面進(jìn)行性能優(yōu)化[6]。通過(guò)軟件TLB重載入異常處理實(shí)現(xiàn)了TLB替換處理中命中率的提高,,減少了處理時(shí)間,。根據(jù)用戶(hù)需求進(jìn)行分配的多頁(yè)技術(shù)進(jìn)一步改進(jìn)了軟TLB重載入異常處理,提高了TLB覆蓋率,,減少了重載入異常處理次數(shù),,能夠發(fā)揮各種頁(yè)大小的優(yōu)勢(shì),使得系統(tǒng)性能得到明顯提升,。
參考文獻(xiàn)
[1] 北京龍芯中科技術(shù)服務(wù)中心有限公司.龍芯2F處理器用戶(hù)手冊(cè)V1.0.2008.
[2] 蘇波,,李凱.龍芯2F上的訪(fǎng)存優(yōu)化[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,,19(1):171-175.
[3] 許先超.減少TLB失效開(kāi)銷(xiāo)提高64位Linux系統(tǒng)性能的方法[J].計(jì)算機(jī)工程,,2006,32(1):70-72.
[4] 孫益輝,,陳凱,白英彩.嵌入式操作系統(tǒng)內(nèi)存管理機(jī)制分析及改進(jìn)[J].計(jì)算機(jī)應(yīng)用與軟件,,2006,,23(3):98-99,115.
[5] 謝長(zhǎng)生,,劉志斌.Linux2.6內(nèi)存管理研究[J].計(jì)算機(jī)應(yīng)用研究,,2005(3):58-60.
[6] 李小群,孫玉芳.Linux內(nèi)存管理機(jī)制的分析與研究[J].計(jì)算機(jī)科學(xué),,2002,,29(4),18-20.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。