專利名稱:一種基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法
技術(shù)領(lǐng)域:
本發(fā)明屬于嵌入式系統(tǒng)的動(dòng)態(tài)電源管理領(lǐng)域,特別是涉及一種基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法。
背景技術(shù):
嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的最大特點(diǎn)是其具有目的性或針對(duì)性,即嵌入式系統(tǒng)是為了滿足某個(gè)特定領(lǐng)域內(nèi)的需求而開(kāi)發(fā)的,因此它常常受到空間、成本、存儲(chǔ)等條件的限制。這也決定了嵌入式系統(tǒng)在實(shí)時(shí)性及功耗等方面較其它計(jì)算機(jī)系統(tǒng)而言,有較為苛刻的要求。由于嵌入式系統(tǒng)往往由電池作為整個(gè)系統(tǒng)的供電設(shè)施,為了延長(zhǎng)電池使用時(shí)間,也為了保障嵌入式設(shè)備連續(xù)使用時(shí)的正常性能,有必要提供較好的電源管理措施。
動(dòng)態(tài)電源管理(DPM)是解決這一矛盾的有效手段當(dāng)系統(tǒng)部件不工作時(shí),關(guān)閉系統(tǒng)部件或?qū)⒉考糜谀芎妮^低的狀態(tài),從而達(dá)到省電的目的。如發(fā)明人申請(qǐng)的專利申請(qǐng)?zhí)枮?00610122002.3的“一中基于嵌入式系統(tǒng)的動(dòng)態(tài)電源管理架構(gòu)”的發(fā)明專利,對(duì)動(dòng)態(tài)電源管理架構(gòu)做出了詳細(xì)的說(shuō)明。
目前國(guó)外關(guān)于DPM的研究主要集中在DPM算法的理論研究,對(duì)于算法在具體設(shè)備上的具體實(shí)現(xiàn)涉及的比較少;國(guó)內(nèi)關(guān)于DPM算法的實(shí)現(xiàn)大多都是以CPU作為研究對(duì)象,對(duì)于磁盤動(dòng)態(tài)電源管理的研究幾乎沒(méi)有。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供一種通過(guò)磁盤不同的能耗狀態(tài)之間的轉(zhuǎn)換從而實(shí)現(xiàn)磁盤動(dòng)態(tài)電源管理的方法。
為了實(shí)現(xiàn)上述發(fā)明目的,采用的技術(shù)方案如下 一種基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,該方法通過(guò)在動(dòng)態(tài)電源管理架構(gòu)上擴(kuò)展磁盤電源管理,在動(dòng)態(tài)電源管理架構(gòu)上對(duì)磁盤的狀態(tài)進(jìn)行劃分,并通過(guò)讀寫I/O端口設(shè)置磁盤控制器中的命令寄存器的內(nèi)容實(shí)現(xiàn)磁盤狀態(tài)轉(zhuǎn)換,使磁盤從一個(gè)高能耗狀態(tài)轉(zhuǎn)換到一個(gè)低能耗狀態(tài)。
本發(fā)明將磁盤的狀態(tài)劃分為活動(dòng)Active、空閑Idle、Standby、休眠Sleep四種狀態(tài);所述Active狀態(tài)為磁盤控制器執(zhí)行指令或者讀寫磁盤介質(zhì)的狀態(tài),處于此狀態(tài)下的磁盤功耗最大;所述Idle狀態(tài)為所有磁盤控制器的電子元件都是啟動(dòng)并且全速運(yùn)轉(zhuǎn)的狀態(tài),該狀態(tài)在極短時(shí)間內(nèi)轉(zhuǎn)換到Active狀態(tài),且處于此狀態(tài)下的磁盤功耗僅低于Active狀態(tài);所述Standby狀態(tài)為磁盤停止旋轉(zhuǎn),磁盤控制器接口可以接受指令,但是磁盤介質(zhì)不可以訪問(wèn),該狀態(tài)需要比較長(zhǎng)的時(shí)間轉(zhuǎn)換到Active狀態(tài),且處于此狀態(tài)下的磁盤功耗低于Active和Idle狀態(tài);所述Sleep狀態(tài)為磁盤最低功耗狀態(tài),磁盤需要一個(gè)RESET指令來(lái)進(jìn)行激活,且轉(zhuǎn)換到Active狀態(tài)需要最長(zhǎng)的時(shí)間。
磁盤狀態(tài)轉(zhuǎn)換在Linux下通過(guò)I/O端口與磁盤進(jìn)行直接通信的方式,或者通過(guò)磁盤驅(qū)動(dòng)程序接口與磁盤進(jìn)行通信的方式實(shí)現(xiàn)。
所述磁盤電源管理還包括獲取磁盤負(fù)載的操作,該操作通過(guò)采集讀寫I/O請(qǐng)求軌跡實(shí)現(xiàn)。
本發(fā)明還包括磁盤的策略優(yōu)化操作。
本發(fā)明提出了一種基于讀寫磁盤寄存器來(lái)改變磁盤狀態(tài)的方法以及通過(guò)讀寫I/O請(qǐng)求獲取磁盤負(fù)載的方法,又利用更新理論模型算法來(lái)實(shí)現(xiàn)磁盤策略優(yōu)化,并且通過(guò)實(shí)驗(yàn)證實(shí)了其具有較好的性能。至此,完整的提出了一種用來(lái)實(shí)現(xiàn)磁盤動(dòng)態(tài)電源管理的方法。
圖1為磁盤控制器結(jié)構(gòu)示意圖; 圖2為磁盤讀寫I/O請(qǐng)求處理流程圖; 圖3為磁盤電源管理系統(tǒng)模型示意圖; 圖4為基于更新理論的系統(tǒng)狀態(tài)轉(zhuǎn)換圖; 圖5無(wú)電源管理磁盤狀態(tài)變化圖; 圖6為超時(shí)策略磁盤狀態(tài)變化圖。
具體實(shí)施例方式 下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的說(shuō)明。
本發(fā)明為了控制磁盤的狀態(tài)和讀寫磁盤上的數(shù)據(jù),就必須使用磁盤控制器。磁盤控制器是CPU與驅(qū)動(dòng)器之間的邏輯接口電路,它從CPU接收請(qǐng)求命令,向驅(qū)動(dòng)器發(fā)送尋道、讀/寫和控制信號(hào),如圖1所示。
內(nèi)核與磁盤控制器的交互過(guò)程就是通過(guò)I/O端口設(shè)置控制器中的相關(guān)寄存器內(nèi)容,并通過(guò)寄存器獲取操作的結(jié)果信息。
計(jì)算機(jī)主機(jī)對(duì)IDE接口磁盤的控制是通過(guò)磁盤控制器上的二組寄存器實(shí)現(xiàn)。一組為命令寄存器組(Task File Registers),I/O的端口地址為1F0H~1F7H,其作用是傳送命令與命令參數(shù),另一組為控制/診斷寄存器(Control/DiagnosticRegisters),I/O的端口地址為3F6H~3F7H,其作用是控制磁盤驅(qū)動(dòng)器。
下表是Task File Register命7令寄存器組。在磁盤執(zhí)行讀寫過(guò)程中,為了節(jié)省I/O地址空間,用相同的地址來(lái)標(biāo)識(shí)不同的寄存器。例如,如表1中I/O端口地址1F7h,在向磁盤寫入數(shù)據(jù)時(shí)作為命令寄存器,而向磁盤讀取數(shù)據(jù)時(shí)作為狀態(tài)寄存器。
對(duì)IDE磁盤的控制,可以通過(guò)I/O端口1F7h向命令寄存器寫入相應(yīng)的16位指令;指令執(zhí)行的狀態(tài)和結(jié)果,可以通過(guò)I/O端口1F7h讀取狀態(tài)寄存器的內(nèi)容獲取,如下表所示。
磁盤的狀態(tài)可以用磁盤的功耗模式來(lái)表示,本實(shí)施例以Hitachi Travelstar4K40筆記本IDE磁盤為例,狀態(tài)設(shè)計(jì)如下表所示
狀態(tài)之間的切換,可以通過(guò)I/O端口1F7h向命令寄存器寫入相應(yīng)的16位指令來(lái)實(shí)現(xiàn)。例如要讓磁盤進(jìn)入Sleep狀態(tài),可以向命令寄存器寫入E6h。如果要對(duì)當(dāng)前操作點(diǎn)進(jìn)行查詢,可以向命令寄存器寫入E5h,磁盤控制器返回扇區(qū)數(shù)寄存器的值如果為FFh則表示磁盤處于Active或Idle狀態(tài),如果為0則處于Standby或Sleep狀態(tài)。
磁盤狀態(tài)轉(zhuǎn)換在Linux下的實(shí)現(xiàn)有兩種方式一是通過(guò)I/O端口與磁盤進(jìn)行直接通信的方式,二是通過(guò)磁盤驅(qū)動(dòng)程序接口與磁盤進(jìn)行通信的方式。
1、I/O端口直接通信方式 這種方式是通過(guò)直接調(diào)用inb、outb、inw、outw等一系列的內(nèi)核函數(shù)來(lái)實(shí)現(xiàn)的。I/O操作必須以特定的順序來(lái)執(zhí)行時(shí),可以在操作之間設(shè)置內(nèi)存屏障(memory barrier),Linux提供了4個(gè)宏來(lái)解決 #include<linux/kernel.h> void barrier(void) //禁止對(duì)barrier前后的編譯優(yōu)化 #include<asm/system.h> void rmb(void) //rmb保證讀操作順序執(zhí)行 void wmb(void) //wmb保證寫操作順序執(zhí)行 void mb(void) //mb保證讀寫操作順序執(zhí)行 讀寫I/O端口必須把8位、16位、32位端口區(qū)分開(kāi)來(lái),IDE磁盤是8位的寄存器。Linux內(nèi)核提供了訪問(wèn)I/O端口的接口,本實(shí)施例以8位讀寫端口函數(shù) #include<asm/io.h> unsigned inb(unsigned port)//字節(jié)讀I/O端口 void outb(unsigned char byte,unsigned port); //字節(jié)寫I/O端口 通過(guò)對(duì)磁盤I/O端口的訪問(wèn),就可以實(shí)現(xiàn)磁盤狀態(tài)的轉(zhuǎn)換。
下面是一個(gè)將磁盤設(shè)置為Standby狀態(tài)的實(shí)例。
/*將磁盤狀態(tài)轉(zhuǎn)入Standby狀態(tài)*/ int set_standby(){ outb(0xE0,0x1F7);//向命令寄存器寫入Standby指令 mb(); //讀寫屏障 if(inb(0x1F7)&0xA0==0//讀狀態(tài)寄存器判斷狀態(tài)是否轉(zhuǎn)換成功 &&inb(0x1F1)&0xFB==0)//讀錯(cuò)誤寄存器判斷是否出錯(cuò) return 1; //狀態(tài)轉(zhuǎn)換成功 return 0; //狀態(tài)轉(zhuǎn)換失敗 } 2、磁盤驅(qū)動(dòng)程序通信方式 利用已有的ioctl接口——ioctl底層實(shí)際上包裝了inb、outb、inw、outw等一系列函數(shù),同時(shí)還增加了一些諸如安全性等方面的檢查。
Linux內(nèi)核使用gendisk結(jié)構(gòu)(在<linux/genhd.h>中聲明)來(lái)表示一個(gè)獨(dú)立的磁盤設(shè)備。在gendisk結(jié)構(gòu)中有一個(gè)request_queue結(jié)構(gòu)指針,用于管理請(qǐng)求隊(duì)列;請(qǐng)求隊(duì)列是由請(qǐng)求結(jié)構(gòu)(request)組成的隊(duì)列,請(qǐng)求隊(duì)列保存了描述設(shè)備所能處理的請(qǐng)求的參數(shù)最大尺寸、在同一個(gè)請(qǐng)求中所能包含的獨(dú)立段的數(shù)目、硬件扇區(qū)的大小、對(duì)齊需求等。
在磁盤驅(qū)動(dòng)程序中,每個(gè)request結(jié)構(gòu)都代表了一個(gè)I/O請(qǐng)求,request可以是讀寫I/O請(qǐng)求,也可以是其它I/O操作請(qǐng)求。內(nèi)核通過(guò)請(qǐng)求處理函數(shù)對(duì)請(qǐng)求隊(duì)列中的請(qǐng)求進(jìn)行處理,來(lái)實(shí)現(xiàn)對(duì)磁盤的控制。
本發(fā)明把磁盤狀態(tài)轉(zhuǎn)換指令封裝成請(qǐng)求結(jié)構(gòu),指令寫入請(qǐng)求結(jié)構(gòu)的命令成員(cmd);然后把請(qǐng)求放入請(qǐng)求隊(duì)列,通過(guò)執(zhí)行請(qǐng)求隊(duì)列來(lái)完成指令的執(zhí)行,Linux下實(shí)現(xiàn)如下所示。
/*I/O指令封裝成I/O請(qǐng)求偽碼 *hd驅(qū)動(dòng)設(shè)備指針,argsI/O指令參數(shù) */ int dpm_ide_cmd(struct ide_drive_t*drive,u8*args){ struct request rq;int err=0; ide_init_drive_cmd(&rq,args); //args初始化請(qǐng)求 _elv_add_request(drive->queue,&rq);//加入請(qǐng)求隊(duì)列 ide_do_request();//執(zhí)行請(qǐng)求 if(rq.errors) err=-EIO;//I/O操作出錯(cuò) return err; } 利用上面的接口,只需要依據(jù)IDE協(xié)議,傳送不同的指令參數(shù)就可以實(shí)現(xiàn)磁盤狀態(tài)轉(zhuǎn)換,在DPM框架中實(shí)現(xiàn)了下表的4個(gè)接口。
上面幾個(gè)接口最終會(huì)調(diào)用函數(shù)ide_cmd_ioctl完成對(duì)寄存器的讀寫,從而實(shí)現(xiàn)磁盤狀態(tài)的轉(zhuǎn)換。以內(nèi)核版本2.6.15為例,使用系統(tǒng)調(diào)用ioctl對(duì)磁盤進(jìn)行操作時(shí),ioctl()將映射到/drivers/ide/ide.c中的函數(shù)generic_ide_ioctl(),此函數(shù)根據(jù)命令類型(由函數(shù)參數(shù)cmd決定)調(diào)用相應(yīng)的低層函數(shù),其中命令類型HDIO_DRIVE_CMD對(duì)應(yīng)的函數(shù)ide_cmd_ioctl是本發(fā)明需要的,其原型如下 int ide_cmd_ioctl(ide_drive_t*drive,unsigned int cmd,unsigned long arg); 函數(shù)參數(shù)含義 drive代表具體設(shè)備的結(jié)構(gòu)指針,可以從內(nèi)核中獲?。? cmd命令類型,在本文中都是HDIO_DRIVE_CMD; arg數(shù)組地址,指向的數(shù)組存儲(chǔ)了命令所需的數(shù)據(jù)。
不同的接口調(diào)用ide_cmd_ioctl函數(shù)時(shí),傳遞進(jìn)來(lái)的參數(shù)arg是不一樣的,即不同命令所需要的數(shù)據(jù)不同。不同接口對(duì)應(yīng)的參數(shù)數(shù)組如下 CheckPowerMode接口unsigned char args[4]={0xE5,0,0,0};當(dāng)函數(shù)返回時(shí),args[2]存儲(chǔ)了返回的扇區(qū)計(jì)數(shù)寄存器的值。
Idle接口unsigned char args[4]={0xE3,0,0,0}; Standby接口unsigned char args[4]={0xE0,0,0,0}; Sleep接口unsigned char args[4]={0xE6,0,0,0}; 具體實(shí)現(xiàn)時(shí),可仿照內(nèi)核中的函數(shù)ide_cmd_ioctl重寫自己的ide_cmd_ioctl函數(shù),即對(duì)原函數(shù)做必要的裁減,以提高效率。
本發(fā)明在linux下獲取磁盤負(fù)載的方法。磁盤負(fù)載由磁盤讀寫I/O請(qǐng)求的來(lái)到所決定,因此采集讀寫I/O請(qǐng)求軌跡對(duì)于分析用戶的行為非常關(guān)鍵。分析讀寫I/O請(qǐng)求的處理流程如附圖2所示。
內(nèi)核通過(guò)調(diào)用低級(jí)塊讀寫函數(shù)ll_rw_block()來(lái)讀寫磁盤中的數(shù)據(jù)。該函數(shù)的主要功能是為設(shè)備創(chuàng)建讀寫I/O請(qǐng)求,并插入到設(shè)備的請(qǐng)求隊(duì)列中。實(shí)際的讀寫操作則是由磁盤的請(qǐng)求處理函數(shù)ide_do_rw_disk()完成的。若ll_rw_block()為磁盤建立一個(gè)讀寫I/O請(qǐng)求,并且當(dāng)前設(shè)備空閑時(shí),就會(huì)設(shè)置新建的請(qǐng)求為當(dāng)前請(qǐng)求,并直接調(diào)用ide_do_rw_disk()來(lái)處理請(qǐng)求。否則就會(huì)將請(qǐng)求插入請(qǐng)求隊(duì)列等待處理。當(dāng)ide_do_rw_disk()結(jié)束一個(gè)請(qǐng)求的處理,就會(huì)把該請(qǐng)求從請(qǐng)求隊(duì)列中刪除。ide_do_rw_disk()在請(qǐng)求處理結(jié)束時(shí),都會(huì)通過(guò)中斷回調(diào)函數(shù)(主要是read_intr()和write_intr())再次調(diào)用ide_do_rw_disk()自身去處理請(qǐng)求隊(duì)列中的其余請(qǐng)求。請(qǐng)求隊(duì)列為空時(shí),ide_do_rw_disk()將不再向磁盤控制器發(fā)送指令,而是立刻退出。
由于所有讀寫I/O操作都要通過(guò)請(qǐng)求處理函數(shù)ide_do_rw_disk()來(lái)完成,可以通過(guò)ide_do_rw_disk()來(lái)采集讀寫I/O請(qǐng)求軌跡。在DPM模塊啟動(dòng)時(shí),初始化擁有16個(gè)緩沖區(qū)的緩沖區(qū)組,每個(gè)緩沖區(qū)大小為128kB;在ide_do_rw_disk()每次處理讀寫I/O請(qǐng)求時(shí),采集請(qǐng)求信息寫入緩沖區(qū);在DPM模塊退出時(shí),利用內(nèi)核函數(shù)sys_write()將緩沖區(qū)信息寫入磁盤。
在ide_do_rw_disk()采集的讀寫I/O請(qǐng)求信息如下 coHect_disk_trace() { if(rq->cmd==READ)dtb_datum
=′r′; else datum
=′w′; datum[1]=MAJOR(rq->rq_dev); datum[2]=MINOR(rq->rq_dev); if(drive->select.b.lba)dtb_datum[3]=′L′; else datum[3]=′C′; datum[4]=rq->nr_sectors>>24; datum[5]=rq->nr_sectors>>16; datum[6]=rq->nr_sectors>>8; datum[7]=rq->nr_sectors; datum[8]=block>>24; datum[9]=block>>16; datum[10]=block>>8; datum[11]=block; datum[12]=j(luò)iffies>>24; datum[13]=j(luò)iffies>>16; datum[14]=j(luò)iffies>>8; datum[15]=j(luò)iffies; write_to_buffer(datum); } 使用獲取的磁盤讀寫I/O請(qǐng)求軌跡,就可以非常方便的分析用戶的行為;依據(jù)軌跡分析來(lái)實(shí)現(xiàn)磁盤的策略優(yōu)化,使得磁盤的節(jié)能策略更加貼近用戶行為。
策略優(yōu)化是動(dòng)態(tài)電源管理的核心,磁盤電源管理系統(tǒng)由三部分組成用戶,緩沖隊(duì)列和磁盤,如附圖3所示。
DPM算法實(shí)現(xiàn)的一般思路是每隔一段固定時(shí)間做一次決策,采用某種策略(即算法),根據(jù)設(shè)備當(dāng)前狀態(tài)和負(fù)載情況,讓設(shè)備轉(zhuǎn)入適當(dāng)?shù)哪芎臓顟B(tài)。這種方法采用了定時(shí)驅(qū)動(dòng)的思想,其缺點(diǎn)是即使設(shè)備已經(jīng)處于低能耗狀態(tài)而且接下來(lái)有較長(zhǎng)一段時(shí)間會(huì)處于低能耗狀態(tài),仍會(huì)每隔一段固定時(shí)間去做決策,這將加重系統(tǒng)的負(fù)擔(dān),也會(huì)消耗能量,對(duì)于做決策時(shí)要消耗較多系統(tǒng)資源的策略而言,其結(jié)果可能是得不償失的。理想的方法是一直等到有新請(qǐng)求到來(lái)的時(shí)候才去做決策。
本發(fā)明引入事件驅(qū)動(dòng),即采用事件驅(qū)動(dòng)與定時(shí)驅(qū)動(dòng)相結(jié)合的方法來(lái)改進(jìn)上面的缺點(diǎn),其基本思想是用全局變量α來(lái)標(biāo)識(shí)是否做決策(α=1表示做;α=0表示不做;α初始值為1),每當(dāng)設(shè)備轉(zhuǎn)入低能耗狀態(tài)而且沒(méi)有請(qǐng)求到來(lái)的時(shí)候,就將α置0,有新請(qǐng)求到來(lái)(有事件發(fā)生)的時(shí)候?qū)ⅵ林?;每次做決策之前總會(huì)檢查α的值,只有α=1才會(huì)做決策。具體實(shí)現(xiàn)如下 a=1; time_driver() { if(a==1) { do_policy(); if(設(shè)備轉(zhuǎn)入低能耗狀態(tài)且沒(méi)有請(qǐng)求到來(lái)) a=0; } } event_happen() { a=1; } time_driver()和event_happen()的調(diào)度是相互獨(dú)立的time_driver()每隔一段固定時(shí)間被調(diào)用一次;event_happen()則在有請(qǐng)求到來(lái)的時(shí)候被調(diào)用。在Linux中,當(dāng)請(qǐng)求到來(lái)時(shí),系統(tǒng)會(huì)調(diào)用某一函數(shù)將新的請(qǐng)求加入到請(qǐng)求隊(duì)列(以linux2.6.15內(nèi)核為例,/block/ll_rw_blk.c中的函數(shù)add_request()就是用于將訪問(wèn)磁盤的請(qǐng)求加入到請(qǐng)求隊(duì)列中),因此,在具體實(shí)現(xiàn)中,只要在這一函數(shù)中調(diào)用even_happen()或者直接修改變量a的值就可以。
磁盤電源管理系統(tǒng)的每一部分行為都可以用概率分布來(lái)描述。用戶行為可以用請(qǐng)求到達(dá)間隔時(shí)間分布來(lái)描述。同樣,設(shè)備的行為可以用服務(wù)時(shí)間分布來(lái)描述。狀態(tài)轉(zhuǎn)換時(shí)間分布描述設(shè)備在不同狀態(tài)轉(zhuǎn)換的行為。請(qǐng)求到達(dá)間隔時(shí)間分布和服務(wù)時(shí)間分布之間的聯(lián)系就描述了緩沖隊(duì)列的行為。這幾類概率分布就組成了需要解決的隨機(jī)最優(yōu)化問(wèn)題。
由于用戶請(qǐng)求來(lái)到間隔時(shí)間與磁盤的服務(wù)時(shí)間在活動(dòng)狀態(tài)都服從指數(shù)分布,用戶與磁盤就組成了一個(gè)M/M/1排隊(duì)系統(tǒng)。
更新理論研究隨機(jī)過(guò)程中存在獨(dú)立同分布的間隔時(shí)間序列,其過(guò)程在每一間隔時(shí)間都可視為一個(gè)重新開(kāi)始的過(guò)程;泊松過(guò)程是更新理論的一個(gè)特例,其特性在于過(guò)程在任何時(shí)刻都重新開(kāi)始,從任何時(shí)刻起過(guò)程獨(dú)立于先前已發(fā)生的一切(獨(dú)立增量),且有與原過(guò)程完全一樣的分布(平穩(wěn)增量),也就是說(shuō)過(guò)程無(wú)記憶性(指數(shù)分布)。
以X1記第一個(gè)時(shí)間來(lái)到的時(shí)刻,對(duì)n≥1,以Xn記第(n-1)個(gè)到第n個(gè)事件之間的時(shí)間,序列{Xn,n≥1}稱為來(lái)到間隔分布。
如果計(jì)數(shù)過(guò)程{N(t),t≥0}的來(lái)到間隔獨(dú)立同分布,分布函數(shù)任意,則稱為更新過(guò)程。由于間隔是獨(dú)立同分布的,所以在各個(gè)更新時(shí)刻此過(guò)程在概率意義上重新開(kāi)始。
用戶在活動(dòng)狀態(tài),空閑狀態(tài)的請(qǐng)求來(lái)到間隔時(shí)間分布,磁盤服務(wù)間隔時(shí)間分布都是指數(shù)分布,可以視為泊松過(guò)程來(lái)研究。
磁盤從idle狀態(tài)轉(zhuǎn)換到其他狀態(tài),再轉(zhuǎn)換到idle狀態(tài)這一循環(huán)過(guò)程可以視為一更新過(guò)程。系統(tǒng)狀態(tài)轉(zhuǎn)換如附圖4所示,當(dāng)系統(tǒng)處于active狀態(tài)時(shí),請(qǐng)求來(lái)到間隔時(shí)間是指數(shù)分布,磁盤的服務(wù)間隔時(shí)間也是指數(shù)分布;當(dāng)隊(duì)列為空時(shí),系統(tǒng)進(jìn)入idle狀態(tài),在idle時(shí)間小于2s時(shí)請(qǐng)求來(lái)到間隔時(shí)間分布與active狀態(tài)是一直的;在idle做決策,將磁盤轉(zhuǎn)入sleep狀態(tài),此時(shí)請(qǐng)求來(lái)到間隔時(shí)間仍然是指數(shù)分布,當(dāng)請(qǐng)求來(lái)到時(shí),系統(tǒng)轉(zhuǎn)入active狀態(tài)。利用更新理論,把尋找最優(yōu)策略的過(guò)程轉(zhuǎn)化為隨機(jī)最優(yōu)化問(wèn)題。
把等效工作時(shí)間平均分成N段時(shí)間間隔,每一等分時(shí)刻作為一個(gè)決策時(shí)刻,策略由每一決策時(shí)刻進(jìn)入低功耗狀態(tài)的概率集合組成。
定義S={jh|j=1,2...,N}為系統(tǒng)在idle狀態(tài)決策時(shí)刻集合,其中Nh等于等效工作時(shí)間; P={p(j)|j=1,2...,N}系統(tǒng)的策略優(yōu)化決策集合,p(j)是系統(tǒng)在jh時(shí)刻將磁盤從idle狀態(tài)轉(zhuǎn)入sleep狀態(tài)的概率; E(tj)系統(tǒng)在jh時(shí)刻至下一個(gè)更新過(guò)程來(lái)到的時(shí)間間隔數(shù)學(xué)期望; q(j)在E(tj)時(shí)間的性能損耗; c(j)在E(tj)時(shí)間的能量損耗; Pst為能量損耗約束,則我們可以構(gòu)造在能量損耗約束的條件下,性能損耗最小的最優(yōu)化問(wèn)題(反之亦然),如公式(1)。
是能量損耗數(shù)學(xué)期望,
是能量損耗約束下數(shù)學(xué)期望,能量損耗要小于等于能量損耗約束。
計(jì)算更新過(guò)程時(shí)間間隔數(shù)學(xué)期望 定義β為更新過(guò)程中第一個(gè)請(qǐng)求來(lái)到的時(shí)刻,Psr為請(qǐng)求來(lái)到的概率密度函數(shù)。則更新過(guò)程時(shí)間間隔數(shù)學(xué)期望可以表示如公式2。
E(tj)=E(tj|β≤jh,s=j(luò)h)+(2) E(tj|β>jh,s=j(luò)h) E(tj|β≤jh,s=j(luò)h),由處于idle狀態(tài)的時(shí)間加上請(qǐng)求服務(wù)的時(shí)間;E(tj|β>jh,s=j(luò)h),由處于idle狀態(tài)的時(shí)間,轉(zhuǎn)換到sleep狀態(tài)所用的時(shí)間,處于sleep狀態(tài)所用的時(shí)間,轉(zhuǎn)換到active狀態(tài)所用的時(shí)間,請(qǐng)求服務(wù)的時(shí)間組成。
用戶和磁盤構(gòu)成了一個(gè)M/M/1排隊(duì)系統(tǒng),由排隊(duì)論理論知識(shí),期望時(shí)間可以用公式3和公式4計(jì)算。
計(jì)算能量損耗 能量損耗由公式W=P×t計(jì)算,由磁盤白皮書(shū)可以知道P在不同狀態(tài)的值;利用公式3與公式4,可以得到磁盤在不同狀態(tài)的時(shí)長(zhǎng)。能量損耗計(jì)算如下表所示,c為磁盤在不同狀態(tài)下的功率。
計(jì)算性能損耗 由于性能損耗∝等待時(shí)間,用等待時(shí)間來(lái)衡量性能損耗。
利用非線性規(guī)劃求解式子(1),可以計(jì)算出策略優(yōu)化決策集合P={p(j)|j=1,2...,N},定義分布函數(shù)磁盤策略優(yōu)化實(shí)現(xiàn)如下當(dāng)磁盤進(jìn)入idle狀態(tài)時(shí),系統(tǒng)生成一個(gè)隨機(jī)數(shù)RND(0<RND≤1),假設(shè)P(j-1)<RND≤P(j),則磁盤在idle時(shí)長(zhǎng)為jh進(jìn)入sleep狀態(tài);如果在jh時(shí)段,有請(qǐng)求來(lái)到,則磁盤進(jìn)入active狀態(tài)。下表是用Matlab計(jì)算出來(lái)的一個(gè)策略。
本實(shí)施例在Hitachi Travelstar 4K40筆記本IDE磁盤進(jìn)行實(shí)驗(yàn),對(duì)Timeout算法、預(yù)測(cè)算法、隨機(jī)模型算法和更新理論模型算法進(jìn)行實(shí)驗(yàn)數(shù)據(jù)的采集,用Matlab對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析,并將各算法實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比分析。
測(cè)試時(shí)間為8分鐘,在啟動(dòng)DPM模塊后,啟動(dòng)X-window,然后播放一個(gè)時(shí)間長(zhǎng)為5分20秒的視頻,接著編寫一段Hello World代碼,啟動(dòng)gcc編譯代碼,執(zhí)行此代碼,最后大約一分半鐘什么都不做。這樣就可以測(cè)試磁盤繁忙以及磁盤空閑時(shí)策略優(yōu)化算法的性能。
圖5是不采用電源管理時(shí)磁盤的狀態(tài)變化圖。不采用電源管理,磁盤只會(huì)隨著服務(wù)隊(duì)列的變化在Idle和Active兩個(gè)狀態(tài)之間變換,這種情況磁盤的性能損失是最小的。
圖6是采用超時(shí)策略(Timeout值為5s)磁盤的狀態(tài)變化圖。從圖中我們可以看到,磁盤的狀態(tài)隨著服務(wù)請(qǐng)求隊(duì)列的變化而變化,所不同的只是磁盤進(jìn)入Standby狀態(tài)延遲了5s。
從上面兩個(gè)圖的對(duì)比可以看出,通過(guò)讀寫相關(guān)寄存器中的內(nèi)容,實(shí)現(xiàn)了對(duì)磁盤狀態(tài)的轉(zhuǎn)換。
權(quán)利要求
1、一種基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于該方法通過(guò)在動(dòng)態(tài)電源管理架構(gòu)上擴(kuò)展磁盤電源管理,在動(dòng)態(tài)電源管理架構(gòu)上對(duì)磁盤的狀態(tài)進(jìn)行劃分,并通過(guò)讀寫I/O端口設(shè)置磁盤控制器中的命令寄存器的內(nèi)容實(shí)現(xiàn)磁盤狀態(tài)轉(zhuǎn)換,使磁盤從一個(gè)高能耗狀態(tài)轉(zhuǎn)換到一個(gè)低能耗狀態(tài)。
2、根據(jù)權(quán)利要求1所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于將磁盤的狀態(tài)劃分為Active、Idle、Standby、Sleep四種狀態(tài);所述Active狀態(tài)為磁盤控制器執(zhí)行指令或者讀寫磁盤介質(zhì)的狀態(tài),處于此狀態(tài)下的磁盤功耗最大;所述Idle狀態(tài)為所有磁盤控制器的電子元件都是啟動(dòng)并且全速運(yùn)轉(zhuǎn)的狀態(tài),該狀態(tài)在極短時(shí)間內(nèi)轉(zhuǎn)換到Active狀態(tài),且處于此狀態(tài)下的磁盤功耗僅低于Active狀態(tài);所述Standby狀態(tài)為磁盤停止旋轉(zhuǎn),磁盤控制器接口可以接受指令,但是磁盤介質(zhì)不可以訪問(wèn),該狀態(tài)需要比較長(zhǎng)的時(shí)間轉(zhuǎn)換到Active狀態(tài),且處于此狀態(tài)下的磁盤功耗低于Active和Idle狀態(tài);所述Sleep狀態(tài)為磁盤最低功耗狀態(tài),磁盤需要一個(gè)RESET指令來(lái)進(jìn)行激活,且轉(zhuǎn)換到Active狀態(tài)需要最長(zhǎng)的時(shí)間。
3、根據(jù)權(quán)利要求2所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于磁盤狀態(tài)轉(zhuǎn)換在Linux下通過(guò)I/O端口與磁盤進(jìn)行直接通信的方式,或者通過(guò)磁盤驅(qū)動(dòng)程序接口與磁盤進(jìn)行通信的方式實(shí)現(xiàn)。
4、根據(jù)權(quán)利要求1所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于所述磁盤電源管理還包括獲取磁盤負(fù)載的操作,該操作通過(guò)采集讀寫I/O請(qǐng)求軌跡實(shí)現(xiàn)。
5、根據(jù)權(quán)利要求4所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于所述采集讀寫I/O請(qǐng)求軌跡在Linux系統(tǒng)下通過(guò)請(qǐng)求處理函數(shù)ide_do_rw_disk()來(lái)完成,動(dòng)態(tài)電源管理啟動(dòng)時(shí),先初始化一個(gè)緩沖區(qū)組,在ide_do_rw_disk()每次處理讀寫I/O請(qǐng)求時(shí),采集請(qǐng)求信息寫入緩沖區(qū),動(dòng)態(tài)電源管理退出時(shí),利用內(nèi)核函數(shù)sys_write()將緩沖區(qū)信息寫入磁盤。
6、根據(jù)權(quán)利要求1或4所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于還包括磁盤的策略優(yōu)化操作,所述策略優(yōu)化操作包括將磁盤電源管理系統(tǒng)設(shè)置為由用戶,緩沖隊(duì)列和磁盤三部分組成,并采用事件驅(qū)動(dòng)與定時(shí)驅(qū)動(dòng)相結(jié)合的方式進(jìn)行動(dòng)態(tài)電源管理決策,并且利用更新模型把尋找最優(yōu)策略的過(guò)程轉(zhuǎn)化為隨機(jī)最優(yōu)化問(wèn)題,所述更新模型將磁盤從idle狀態(tài)轉(zhuǎn)換到其他狀態(tài),再轉(zhuǎn)換到idle狀態(tài)這一循環(huán)過(guò)程為一更新過(guò)程。
7、根據(jù)權(quán)利要求6所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于所述事件驅(qū)動(dòng)與定時(shí)驅(qū)動(dòng)相結(jié)合的具體實(shí)現(xiàn)為采用全局變量α來(lái)標(biāo)識(shí)是否做決策,α=1表示做,α=0表示不做,α初始值為1,每當(dāng)設(shè)備轉(zhuǎn)入低能耗狀態(tài)而且沒(méi)有請(qǐng)求到來(lái)的時(shí)候,就將α置0,有新請(qǐng)求到來(lái)的時(shí)候?qū)ⅵ林?,每次做決策之前先檢查α的值,只有α=1才做決策。
8、根據(jù)權(quán)利要求7所述的基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,其特征在于所述利用更新模型進(jìn)行策略優(yōu)化的具體操作如下
把等效工作時(shí)間平均分成N段時(shí)間間隔,每一等分時(shí)刻作為一個(gè)決策時(shí)刻,策略由每一決策時(shí)刻進(jìn)入低功耗狀態(tài)的概率集合組成;
定義S={jh|j=1,2...,N}為在idle狀態(tài)決策時(shí)刻集合,其中Nh等于等效工作時(shí)間;
P={p(j)|j=1,2...,N}為策略優(yōu)化決策集合,p(j)是在jh時(shí)刻將磁盤從idle狀態(tài)轉(zhuǎn)入sleep狀態(tài)的概率;
E(tj)為在jh時(shí)刻至下一個(gè)更新過(guò)程來(lái)到的時(shí)間間隔數(shù)學(xué)期望;
q(j)為在E(tj)時(shí)間的性能損耗;
c(j)為在E(tj)時(shí)間的能量損耗;
Pst為能量損耗約束,在能量損耗約束的條件下,性能損耗最小的最優(yōu)化如下述公式(1)所示
p(j)≥0
是能量損耗數(shù)學(xué)期望,
是能量損耗約束下數(shù)學(xué)期望,能量損耗要小于等于能量損耗約束;
定義β為更新過(guò)程中第一個(gè)請(qǐng)求來(lái)到的時(shí)刻,Psr為請(qǐng)求來(lái)到的概率密度函數(shù),則更新過(guò)程時(shí)間間隔數(shù)學(xué)期望如下述公式2所示
E(tj)=E(tj|β≤jh,s=j(luò)h)+(2)
E(tj|β>jh,s=j(luò)h)
E(tj|β≤jh,s=j(luò)h),由處于idle狀態(tài)的時(shí)間加上請(qǐng)求服務(wù)的時(shí)間;E(tj|β>jh,s=j(luò)h),由處于idle狀態(tài)的時(shí)間,轉(zhuǎn)換到sleep狀態(tài)所用的時(shí)間,處于sleep狀態(tài)所用的時(shí)間,轉(zhuǎn)換到active狀態(tài)所用的時(shí)間,請(qǐng)求服務(wù)的時(shí)間組成;
由于用戶請(qǐng)求來(lái)到間隔時(shí)間與磁盤的服務(wù)時(shí)間在活動(dòng)狀態(tài)都服從指數(shù)分布,所以期望時(shí)間如下述公式3和公式4計(jì)算
(3)
能量損耗由公式W=P×t計(jì)算,利用公式3與公式4,得到磁盤在不同狀態(tài)的時(shí)長(zhǎng),能量損耗計(jì)算下表6,c為磁盤在不同狀態(tài)下的功率
用等待時(shí)間來(lái)衡量性能損耗,得出如下公式(5)
(5)
利用公式(1),計(jì)算出策略優(yōu)化決策集合P={p(j)|j=1,2...,N},定義分布函數(shù)磁盤策略優(yōu)化實(shí)現(xiàn)如下
當(dāng)磁盤進(jìn)入idle狀態(tài)時(shí),系統(tǒng)生成一個(gè)隨機(jī)數(shù)RND(0<RND≤1),假設(shè)P(j-1)<RND≤P(j),則磁盤在idle時(shí)長(zhǎng)為jh進(jìn)入sleep狀態(tài);如果在jh時(shí)段,有請(qǐng)求來(lái)到,則磁盤進(jìn)入active狀態(tài)。
全文摘要
本發(fā)明提供一種基于嵌入式系統(tǒng)的磁盤動(dòng)態(tài)電源管理方法,該方法通過(guò)在動(dòng)態(tài)電源管理架構(gòu)上擴(kuò)展磁盤電源管理,在動(dòng)態(tài)電源管理架構(gòu)上對(duì)磁盤的狀態(tài)進(jìn)行劃分,并通過(guò)讀寫I/O端口設(shè)置磁盤控制器中的命令寄存器的內(nèi)容實(shí)現(xiàn)磁盤狀態(tài)轉(zhuǎn)換,使磁盤從一個(gè)高能耗狀態(tài)轉(zhuǎn)換到一個(gè)低能耗狀態(tài)。本發(fā)明提出了一種基于讀寫磁盤寄存器來(lái)改變磁盤狀態(tài)的方法以及通過(guò)讀寫I/O請(qǐng)求獲取磁盤負(fù)載的方法,又利用更新理論模型算法來(lái)實(shí)現(xiàn)磁盤策略優(yōu)化,并且通過(guò)實(shí)驗(yàn)證實(shí)了其具有較好的性能。至此,完整的提出了一種用來(lái)實(shí)現(xiàn)磁盤動(dòng)態(tài)電源管理的方法。
文檔編號(hào)G06F1/32GK101344812SQ200810030260
公開(kāi)日2009年1月14日 申請(qǐng)日期2008年8月19日 優(yōu)先權(quán)日2008年8月19日
發(fā)明者劉發(fā)貴, 吳澤祥, 麥偉鵬 申請(qǐng)人:華南理工大學(xué)