說(shuō),通過(guò)本地緩存避免向服務(wù)器發(fā)送重復(fù)的1請(qǐng)求,從而減少網(wǎng)絡(luò)開(kāi)銷。
【附圖說(shuō)明】
[0017]圖1為bitmap存儲(chǔ)結(jié)構(gòu);
圖2為MTC讀數(shù)據(jù)流程圖;
圖3為本發(fā)明一實(shí)施例緩存塊N信息;
圖4為本發(fā)明一實(shí)施例緩存空間示意圖;
圖5為本發(fā)明2Q數(shù)據(jù)淘汰過(guò)程示意圖;
圖6為本發(fā)明TCCache淘汰數(shù)據(jù)過(guò)程圖;
圖7為本發(fā)明TCCA淘汰數(shù)據(jù)過(guò)程圖;
圖8為5個(gè)用戶訪問(wèn)的命中率對(duì)比圖;
圖9為10個(gè)用戶訪問(wèn)的命中率對(duì)比圖;
圖10為15個(gè)用戶訪問(wèn)的命中率對(duì)比圖;
圖11為20個(gè)用戶訪問(wèn)的命中率對(duì)比圖。
【具體實(shí)施方式】
[0018]為了節(jié)約存儲(chǔ)空間并且區(qū)分?jǐn)?shù)據(jù)是否已經(jīng)緩存,移動(dòng)透明計(jì)算系統(tǒng)采用Bitmap的存儲(chǔ)結(jié)構(gòu)。存儲(chǔ)文件分為三個(gè)部分如圖1所示。按照存儲(chǔ)順序從上到下分別是HEADER、MAP以及DATAt3HEADER數(shù)據(jù)結(jié)構(gòu)如下:
Struct HEADER{u_intl6 FileType; u_int32 MaxSize;u_intl6 MapUnit;u_intl6 DataUnit;u_int32 MapStartOffset;u_int32 DataStartOffset;u_int32 DataTotalSize;}
HEADER中的FileType為該存儲(chǔ)文件的一種約定格式說(shuō)明,這里取值為0x7C7C。MaxSize表示該文件存儲(chǔ)的邏輯塊(512byte)的最大范圍,這個(gè)值由具體的存儲(chǔ)鏡像大小決定。MapUnit指的是MAP存儲(chǔ)每個(gè)存儲(chǔ)單元占的字節(jié)數(shù)。DataUnit指的是DATA區(qū)域每個(gè)存儲(chǔ)單元表示的字節(jié)數(shù)。MapStartOffset指的是MAP區(qū)域在該文件中的起始地址,同理,DataStartOffset指的是DATA區(qū)域在該文件中的起始地址。DataTotalSize指的是目前已存儲(chǔ)的DATA區(qū)域的存儲(chǔ)單元數(shù),初始化時(shí)為O。
[0019]MAP區(qū)域存儲(chǔ)的是以M字節(jié)為基本單位的連續(xù)二進(jìn)制數(shù)據(jù)塊,M即MapUnit定義的大小,共計(jì)MaxSize塊,初始化時(shí)均為I。
[0020]DATA區(qū)域存儲(chǔ)的是以D字節(jié)為基本單位的連續(xù)二進(jìn)制數(shù)據(jù)塊,D S卩DataUnit定義的大小,系統(tǒng)的真實(shí)數(shù)據(jù)存儲(chǔ)在該部分,共計(jì)DataTotalSize塊,為動(dòng)態(tài)增加。
[0021]實(shí)例操作系統(tǒng)讀數(shù)據(jù)的流程圖如圖2所示。
[0〇22] MTCCMobile transparent computing)中客戶端與服務(wù)器之間采用流塊式傳輸指令和數(shù)據(jù)??蛻舳嗽谶h(yuǎn)程加載操作系統(tǒng)時(shí),不需要將整個(gè)操作系統(tǒng)下載到本地運(yùn)行,而是將服務(wù)器存儲(chǔ)的數(shù)據(jù)劃分為大小相同的數(shù)據(jù)塊,客戶端僅下載所需部分的數(shù)據(jù)塊,所有數(shù)據(jù)塊以數(shù)據(jù)流的形式傳輸當(dāng)使用該系統(tǒng)用戶過(guò)多時(shí),所有客戶端不斷向服務(wù)器請(qǐng)求所需數(shù)據(jù),此時(shí)服務(wù)器的磁盤(pán)I/O將成為系統(tǒng)的主要瓶頸之一,造成明顯的性能下降。緩存(Cache)是用以解決存儲(chǔ)系統(tǒng)之間巨大速度差異的有效手段之一。在移動(dòng)透明計(jì)算系統(tǒng)中,結(jié)合其客戶端存取數(shù)據(jù)塊的特點(diǎn),在服務(wù)器端預(yù)先將最有可能被客戶端使用的一些數(shù)據(jù)塊存儲(chǔ)在緩存中,當(dāng)需要時(shí)直接從緩存中讀取并傳送給客戶端,將減少服務(wù)器端磁盤(pán)I/O的次數(shù)和時(shí)間,顯著提高服務(wù)器數(shù)據(jù)讀取的性能。而如何提高緩存數(shù)據(jù)的命中率是需要重點(diǎn)考慮的問(wèn)題,即當(dāng)緩存空間已滿時(shí),需要根據(jù)一定的替換策略,選擇緩存內(nèi)的數(shù)據(jù)塊調(diào)出,并存入新的數(shù)據(jù)塊。
[0023]本發(fā)明緩存數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如下:
針對(duì)客戶端的網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)塊,為其定義緩存數(shù)據(jù)結(jié)構(gòu),便于標(biāo)識(shí),并放入緩存空間:
(I)設(shè)計(jì)緩存數(shù)據(jù)塊的存儲(chǔ)信息,包括:標(biāo)識(shí)區(qū)(FLAG),信息區(qū)(FI)和數(shù)據(jù)區(qū)(DATA)。FLAG存放了代表緩存數(shù)據(jù)塊的關(guān)鍵字,數(shù)據(jù)塊的查找和區(qū)分是通過(guò)該關(guān)鍵字進(jìn)行的,對(duì)緩存數(shù)據(jù)起標(biāo)識(shí)作用;FI存放了緩存數(shù)據(jù)塊的基本信息,如最后訪問(wèn)時(shí)間,訪問(wèn)次數(shù),存活時(shí)間,大小等信息,用于緩存更新和替換策略的實(shí)現(xiàn);DATA區(qū)存放所緩存的實(shí)際數(shù)據(jù),在客戶端發(fā)起1請(qǐng)求時(shí),將此部分?jǐn)?shù)據(jù)返回。用N表示每個(gè)節(jié)點(diǎn)。如圖3所示。
[0024](2)設(shè)計(jì)緩存空間來(lái)存放所有的緩存數(shù)據(jù)塊信息,采用哈希表結(jié)構(gòu),通過(guò)key關(guān)鍵字映射對(duì)應(yīng)的數(shù)據(jù)塊,便于查找。如圖4所示。
[0025]緩存塊從建立、加入緩存和從空間中移除,都需要維護(hù)并及時(shí)更新緩存基本信息。主要是對(duì)信息區(qū)相關(guān)內(nèi)容進(jìn)行修改,為緩存替換算法的實(shí)現(xiàn)提供決策依據(jù)。服務(wù)端緩存采用模塊化設(shè)計(jì),只需要在配置文件中進(jìn)行簡(jiǎn)單的配置,便能決定使用緩存與否、緩存大小、緩存生命周期等。具體步驟如下:
步驟1: properties文件中設(shè)置緩存大小和生命周期,選擇啟用緩存;
步驟2:服務(wù)器主程序啟動(dòng)時(shí)會(huì)按要求初始化緩存空間,為用戶的數(shù)據(jù)請(qǐng)求做準(zhǔn)備; 步驟3:為用戶的1請(qǐng)求塊建立對(duì)應(yīng)的緩存塊,包括FLAG、FI和DATA信息,并存入緩存空間;
FLAG信息由1請(qǐng)求在鏡像中的偏移量通過(guò)固定規(guī)則的轉(zhuǎn)換生成,用于在緩存空間中查找定位該緩存塊;FI信息在緩存塊建立時(shí)候初始化,并在每次訪問(wèn)該塊時(shí)都會(huì)更新當(dāng)前訪問(wèn)時(shí)間、累計(jì)訪問(wèn)次數(shù)和存活時(shí)長(zhǎng)等。
[0026]步驟4:每次訪問(wèn)緩存前,檢查并移除過(guò)期的緩存塊,保證緩存數(shù)據(jù)的實(shí)時(shí)有效。
[0027]服務(wù)器緩存空間的容量也是有限的,而且緩存也需要進(jìn)行一定的更新,這時(shí)我們就會(huì)考慮采用何種策略用新的緩存來(lái)代替舊的緩存,這種策略我們統(tǒng)稱為緩存替換算法。一個(gè)好的替換算法能夠決定緩存系統(tǒng)的多個(gè)指標(biāo),比如緩存的命中率、緩存使用效率(時(shí)間和空間上的代價(jià))、數(shù)據(jù)讀取性能提高等。
[0028]當(dāng)前常用的緩存替換算法是以數(shù)據(jù)的訪問(wèn)頻率和數(shù)據(jù)的訪問(wèn)時(shí)間作為設(shè)計(jì)標(biāo)準(zhǔn),如果訪問(wèn)頻率使用較少或者距上一次的訪問(wèn)時(shí)間較長(zhǎng)的緩存數(shù)據(jù),則被認(rèn)為將來(lái)訪問(wèn)頻率更低,使其被新的緩存替代。但是,目前常用的緩存替換算法均是為通用存儲(chǔ)系統(tǒng)所設(shè)計(jì),并未考慮到具體系統(tǒng)的特點(diǎn)和使用環(huán)境,因此往往在具體應(yīng)用中效率不高。因此根據(jù)與其相適應(yīng)的系統(tǒng)設(shè)計(jì)緩存替換算法,往往效果較通用算法更好。因此我們?cè)?Q算法的基礎(chǔ)上,提出了在透明計(jì)算環(huán)境下的緩存優(yōu)化替換算法。下面分別對(duì)三個(gè)算法進(jìn)行介紹。
[0029]2Q:緩存在減少直接訪問(wèn)的同時(shí),也額外增加一些開(kāi)銷。當(dāng)緩存空間足夠大時(shí),可能會(huì)增加空間的維護(hù)和數(shù)據(jù)塊的查找成本,因此考慮增加隊(duì)列的實(shí)現(xiàn)。2Q維護(hù)兩個(gè)緩存隊(duì)列,當(dāng)數(shù)據(jù)第一次訪問(wèn)時(shí),2Q算法將數(shù)據(jù)緩存在FIFO隊(duì)列里面,當(dāng)數(shù)據(jù)第二次被訪問(wèn)時(shí),則將數(shù)據(jù)從FIFO隊(duì)列移到LRU隊(duì)列里面,兩個(gè)隊(duì)列各自按照自己的方法淘汰數(shù)據(jù)。詳細(xì)實(shí)現(xiàn)如圖5所示。
[0030]步驟1.根據(jù)FLag判斷是否為新數(shù)據(jù),若是新訪問(wèn)的數(shù)據(jù),則將其插入到FIFO隊(duì)列,并更新FI和DATA的信息;否則執(zhí)行步驟3.步驟2.如果緩存數(shù)據(jù)在FIFO隊(duì)列中一直沒(méi)有被再次訪問(wèn),則按照FIFO規(guī)則淘汰;并且如果該緩存數(shù)據(jù)超過(guò)緩存塊的生命周期則直接淘汰。
[0031]步驟3.如果緩存數(shù)據(jù)塊在FIFO隊(duì)列中被再次訪問(wèn),則將該緩存數(shù)據(jù)塊移到LRU隊(duì)列頭部;
步驟4.如果緩存數(shù)據(jù)塊在LRU隊(duì)列再次被訪問(wèn),則將該緩存數(shù)據(jù)塊移到LRU隊(duì)列頭部; 步驟5.LRU隊(duì)列淘汰末尾的緩存數(shù)據(jù)塊。
[0032]TCCache:維護(hù)兩個(gè)緩存隊(duì)列,一個(gè)是LFU隊(duì)列,一個(gè)是LRU隊(duì)列。該