基于程序分析的低功耗無線傳感器網絡優化方法
【專利摘要】本發明公開了一種基于程序分析的低功耗無線傳感器網絡優化方法,包括步驟:步驟一,搭建一個無線傳感器網絡群集;步驟二,進行程序分析;步驟三,函數調度優化;步驟四,基本塊級優化。本發明利用程序分析的結果進行無線傳感器網絡的能耗優化,通過對調用頻率最高的內聯函數進行有效調度,實現了降低無線傳感器網絡能耗的目的。
【專利說明】基于程序分析的低功耗無線傳感器網絡優化方法
【技術領域】
[0001]本發明涉及的是無線傳感器網絡通信領域,具體是一種基于程序分析的無線傳感器網絡優化方法。
【背景技術】
[0002]無線傳感器網絡(以下簡稱WSN)生存時間要求長達數月或數年,節點一般采用容量有限的電池供電,而且不方便更換電池,在維護性能的前提下,如何節省能耗并延長運行時間是其應用的重要挑戰。
[0003]嵌入式系統功耗優化最先集中在硬件級,包括電路級、RTL級,級別越高就需要更大的能耗空間以及更高的設計成本。由于硬件級功耗優化已經遇到瓶頸,軟件級功耗建模與優化為無線傳感器網絡提供了節能的新途徑。有學者首先提出了對嵌入式軟件進行功耗分析的一些基本概念,建立了基本的指令級功耗模型。隨后,許多研究者紛紛開展了各種傳統編譯優化技術在低功耗方面的改良研究,主要工作集中在分支預測、循環結構優化、存儲器和cache分配優化等方面,在保持程序語義和遵守目標機器資源限制的條件下,以形成各種功耗優化的程序分析技術。
[0004]目前基于程序分析的軟件功耗優化工作主要集中在源程序結構級,技術也相對成熟,如循環結構優化等,已經在編譯器中得到了部分實現,并取得了良好的功耗優化效果;算法級的功耗優化措施,借鑒現有的一些算法優化設計措施,如改善數據結構、壓縮數據存儲空間、減少重復計算與算法冗余度、貪心法等,降低算法的空間復雜度和時間復雜度,從而改善軟件功耗。
[0005]程序分析功耗優化方法主要偏重于靜態分析方法,尤其偏重于編譯階段。通過針對源代碼的程序分析,變換某種結構,達到降耗的效果。程序分析這幾年已經有了長足的進展,從傳統的靜態程序分析、動態程序分析發展到基于符號執行的混合程序分析。這些程序分析新進展為無線傳感器網絡的節能提供了新思路。
[0006]無線通信領域作為嵌入式系統的典型應用環境,目前的節能方法主要是單純的靜態分析,要么針對每條指令進行建模,要么針對整個任務進行建模。缺少對系統的動態行為能耗分析,以及基本塊、函數級別的節能分析。傳統的動態分析工具有Panorama, Dytan, Pin等,通過動態監控目標系統,基于數據流、控制流和信息流等進行分析。而動靜態結合的混合程序分析可以提供基本塊、函數級別的分析,同時通過動態注入的方式,獲取程序的功耗和性能參數。混合程序分析通過細粒度的功耗調整方法,打開和關閉不同的部件、不同的更新和廣播策略來節能,提供了一個更有效的能耗管理策略。
【發明內容】
[0007]為了克服上述現有技術的不足,本發明提供一種基于程序分析的低功耗無線傳感器網絡優化方法,先對無線網絡通信過程中運行的程序進行基本塊級的分析,鑒于基本塊是一個程序執行的基本單元,能夠將硬件級別的細節掩蓋起來,綜合考慮每條指令的耦合效果,模型參數少,精度高。然后通過函數調度優化可以有效地降低無線傳感器網絡設備的功耗,因為一個程序中,每一條指令都將激活微處理器中的某些硬件部件,因此正確調度指令可降低處理器的功耗。此發明可用于現有的無線傳感器網絡設備中。
[0008]本發明通過以下技術方案實現的,包括以下步驟:
[0009]一種基于程序分析的低功耗無線傳感器網絡優化方法,其特征在于,該方法包括如下步驟:
[0010]步驟一,搭建一個無線傳感器網絡群集,包括是目標、觀測節點、傳感節點和感知視場四類基本實體對象,其中每個傳感器節點都會周期性地對周圍環境進行感知取樣,且末端節點見收集到的數據傳輸給基站,數據將在基站進行匯聚分析;
[0011]步驟二,進行程序分析:
[0012]利用程序profile信息分析工具劃分出傳感器節點運行程序的函數級,基于數據流、控制流和信息流分析方法檢測出整個無線傳感器網絡群集運行中最耗能的函數集,記為集合F。
[0013]集合F中的函數可用基本塊的集合來標識,利用基本塊劃分算法劃分出這些函數中的基本塊,通過程序動態分析工具監控基本塊模型,檢測出每個基本塊的運行時間。其中基本塊劃分方法如下:
[0014](I)確定基本塊的入口語句,
[0015](2)構造每一入口語句的基本塊:由該入口語句到下一入口語句之間的語句序列組成。
[0016]步驟三,函數調度優化:針對集合F的函數為內聯函數這一情況,將大部分間接調用轉換為直接調用,使得函數調用的開銷大大減少。
[0017]步驟四,基本塊級優化:分析集合F中基本塊的運行狀態:
[0018]對于基本塊運行平均時間較長的函數,即基本塊運行平均時間排在F所有函數最前30%的,則加大這部分函數正常態和休眠態的切換頻率。
[0019]對于基本塊運行平均時間較短的函數,即基本塊運行平均時間排在F所有函數最后30%的,則縮短這部分函數正常態的時間。
[0020]所述的最耗能的函數集,集合F為整個無線傳感器網絡運行中被調用最多的函數,將運行程序中的所有函數按被調用次數從高到低排序,取第一梯隊的函數作為之后優化的對象(第一梯隊的函數指的是被調用次數不低于最大次數90%的函數),由于這些被調用最多的函數必定會造成較高的能耗,故在能耗優化上先對這些函數進行處理。
[0021]所述的小規模無線傳感器網絡群集包括:四類基本實體對象,分別是目標,觀測節點,傳感節點和感知視場。大量傳感節點隨機部署在目標的鄰近區域,通過自組織方式構成網絡,協同形成對目標監測的感知視場。傳感節點檢測的目標信號經本地的簡單處理后通過鄰近傳感節點多跳傳輸到觀測節點。用戶可以通過外部網絡與觀測節點進行交互,觀測節點可向傳感節點發布查詢請求和控制指令,接受傳感節點返回的目標信息。傳感器節點一般都由數據采集模塊、數據處理模塊、數據傳輸模塊和供電模塊組成。
[0022]采用額外的硬件電路對整個網絡所有節點的功率消耗進行測量分析。基于軟件探針對整個無線傳感器網絡進行實時監測,即通過插入能耗測量代碼,再配合外部硬件電路來計算節點能耗。[0023]所述的程序分析包括:通過動靜態結合的混合程序分析方法,建立無線傳感器網絡基于動態程序注入的基本塊級能耗模型,通過函數Summary的方法,得到函數級的高層功耗模型。由于單純的動態程序分析方法是在目標程序運行時進行某些關鍵特征的提取以及監控,一次運行只能達到一條路徑。針對動態分析路徑覆蓋率低的問題,可以通過輔助靜態分析的方法進行優化。
[0024]所述的程序分析,是指利用一些信息分析工具,分析程序的流程邏輯與控制結構,尋找程序變量與值間的依賴關系,為程序優化提供索引,提供了詳細的靜態分析用于檢查代碼的冗余。
[0025]所述的基本塊,是指程序一個順序執行的語句序列,其中只有一個入口和一個出口,入口就是其中的第一個語句,出口就是其中的最后一個語句。對一個基本塊來說,執行時只從其入口進入,從其出口退出。
[0026]所述的函數調度優化包括:通過基本塊能耗模型,在函數級進行不同運行狀態的調節,開關不同的外部設備,并根據路由協議和傳輸路徑,設定不同的運行狀態,盡量保持基本塊級調度的能耗最小化。根據基本塊運行時間的長短,調節正常態和休眠態在整個工作狀態中的比例。在函數級上,開銷最大的函數均為內聯函數,在編譯時,對于一個可以inline的函數,在每一個調用這個函數的地方,直接以函數的內容代替,因此默認不會生成這個函數的函數體。對函數進行inline優化時,由于可以減少調用函數的開銷,這種方法適用于大量頻繁調用的小函數,由于會將函數的內容復制到每一處調用的地方,會增加編譯二進制文件的體積。
[0027]與現有技術相比,本發明利用程序分析的結果進行無線傳感器網絡的能耗優化,是既軟件架構級、算法級之后更細分的基本塊級優化,通過對調用頻率最高的內聯函數進行有效調度,實現了降低無線傳感器網絡能耗的目的。
【專利附圖】
【附圖說明】
[0028]圖1是本發明基于程序分析的低功耗無線傳感器網絡優化方法的流程圖。
[0029]圖2是本發明的實施案例流程圖。
【具體實施方式】
[0030]下面對本發明的實施例作詳細說明,本實施例在以本發明技術方案為前提下進行實施,給出了詳細的實施方式和具體的操作過程,但本發明的保護范圍不限于下述的實施例。
[0031]一種基于程序分析的無線傳感器網絡優化方法,包括第一步,搭建一個小規模的無線傳感器網絡群集;第二步,對于整個網絡運行程序進行分析,劃分出函數級,再在函數級基礎上劃分出基本塊級;第三步,函數調度優化;第四步,基本塊級優化。
[0032]其中無線傳感器網絡群集中的每個傳感器節點都會周期性地對周圍環境進行感知取樣,如對環境溫度的記錄,所有末端節點收集到的數據會不斷傳給基站,數據將在基站進行匯聚分析;在群集工作期間,對其加入能耗測量模塊,利用基于外部電流測量的方法計算出每個節點的實際能耗;測量完功耗優化前的整個網絡的能耗后,進入程序分析這一步驟,利用傳統的動態分析工具,如Panorama, Dytan, Pin等,通過動態監控目標系統,基于數據流、控制流和信息流分析等方法便可檢測出整個網絡運行過程最耗能的基本塊;針對前三個最耗能的基本塊,進行代碼分析后發現內聯函數是最耗能的,修改內聯函數將大部分間接調用轉換為直接調用,函數調用的開銷大大減少;對優化后的網絡再實施能耗測量,能發現能耗相較于優化前有了大幅度的下降。
[0033]本實施例具體操作過程如下:
[0034]搭建一個小規模的無線傳感器網絡群集,其中傳感器節點采用CrossBow公司生產的TelosB節點,在傳感器網絡中至少有一個節點作為基站,其他若干節點作為普通節點。在TinyOS下編寫基站程序和節點程序,然后將程序燒錄到每個節點上,每個普通節點的程序相同,但在燒錄過程中需指定ID號以區分。網絡中各相鄰的節點可以完成相互間的通信,進行數據交換,通過無線通信方式形成了一個多跳自組織的網絡系統。
[0035]在節點正常工作或休眠期間,由一路供電電源(供電電壓為V)對傳感器網絡節點供電,供電線路中串聯一個小阻值電流采樣電阻R。電流采樣電阻R兩端的電壓Vl送入差分放大器進行放大,放大倍數固定為K。放大后的電壓信號V2經過A/D轉換器轉換為數字信號,并進行后端的數據處理、存儲和顯示。由于引入了差分放大器,可以測量到電流采樣電阻微弱的兩端電壓差,因此電流采樣電阻可以很小,典型的傳感器節點最大供電電壓為3V,最大電流為40mA,電流采樣電阻為0.5 Ω,若放大倍數K為100,則滿量程輸出為2V,足以滿足需求。即使對于最大工作電流,電流采樣電阻上帶來的壓降也僅為20mV,對傳感器節點的工作幾乎沒有影響。人工觀察數字示波器,得出多次電壓的測量值,再根據公式P=V*I=(V電源-V電阻)*V電阻/R電阻,得出多次節點的能耗值取其平均。測量小規模網絡群集上的所有節點能耗得出整個網絡的總能耗。
[0036]程序分析過程涉及到修改makefile文件這個步驟。操作系統TinyOS中的makefile文件保存了編譯器和連接器的參數選項,還表述了所有源文件之間的關系,創建程序(make)首先讀取makefile文件,然后再激活編譯器,匯編器,資源編譯器和連接器以便產生最后的輸出。現在每個節點的makefile文件中手動添加pg參數,gprof工具可以顯示flat profile,包括每個函數的調用次數,每個函數消耗的處理器時間,可以顯示callgraph,包括函數的調用關系,每個函數調用花費了多少時間,可以顯示注釋的源代碼,這是程序源代碼的復本,標記有程序中每行代碼的執行次數。修改完makefile文件后makeclean,重新make,在終端下使用gprof命令得出所有函數被調用的統計值,編寫bash腳本文件使得這些函數按照被調用頻率從高到低依次排序,針對排名靠前的函數進行代碼優化。統計信息顯示開銷最大的函數均為內聯函數,這為之后的函數調度模塊提供了實施的可能性。
[0037]函數調度模塊主要針對內聯函數的優化。內聯函數只有當函數比較短小的時候它才能得到很好的效果,如果函數并不是很短而且在很多地方都被調用,會使得可執行體的體積增大,而且當編譯器拒絕inline的時候,會造成性能的下降,這些開銷最大的內聯函數大多都是出于這樣的原因。于是,修改inline函數,將間接調用改成直接調用。實施功耗優化的函數調度模塊之后,再次利用能耗測量模塊,測出此時網絡節點的總能耗,與優化前的網絡相比,有了明顯的下降。
[0038]綜上所述,我們提出了上述的基于程序分析的無線傳感器網絡及其優化方法,利用程序分析工具動態分析出各個基本塊的能耗情況,建立了基本塊能耗模型,著重對功耗高的基本塊進行基本塊級的運行狀態更改,以及對這些基本塊包含的函數進行代碼優化,這一軟件上的改進可應用在現有的無線傳感器網絡設備中,實驗測試出這樣的方法是可以明顯下降無線傳感器網絡功耗的。
【權利要求】
1.一種基于程序分析的低功耗無線傳感器網絡優化方法,其特征在于,該方法包括如下步驟: 步驟一,搭建一個無線傳感器網絡群集,包括是目標、觀測節點、傳感節點和感知視場四類基本實體對象,其中每個傳感器節點都會周期性地對周圍環境進行感知取樣,且末端節點見收集到的數據傳輸給基站,數據將在基站進行匯聚分析; 步驟二,進行程序分析: 利用程序profile信息分析工具劃分出傳感器節點運行程序的函數級,基于數據流、控制流和信息流分析方法檢測出整個無線傳感器網絡群集運行中最耗能的函數集,記為集合F。 集合F中的函數用基本塊的集合來標識,利用基本塊劃分方法劃分出這些函數中的基本塊,通過程序動態分析工具監控基本塊模型,檢測出每個基本塊的運行時間; 步驟三,函數調度優化:針對集合F的函數為內聯函數這一情況,將間接調用轉換為直接調用,使函數調用的開銷減少; 步驟四,基本塊級優化:分析集合F中基本塊的運行狀態: 對于基本塊運行平均時間長的函數,即基本塊運行平均時間排在F所有函數最前的30%,則加大這部分函數正常態和休眠態的切換頻率。 對于基本塊運行平均時間短的函數,即基本塊運行平均時間排在F所有函數最后的30%,則縮短這部分函數正常態的時間。
2.根據權利要求1所述的基于程序分析的低功耗無線傳感器網絡優化方法,其特征在于,所述的最耗能的函數集是將運行程序中的所有函數按被調用次數從高到低排序,被調用次數不低于最大次數90%的函數。
3.根據權利要求1所述的基于程序分析的低功耗無線傳感器網絡優化方法,其特征在于, 所述的步驟二中,基本塊劃分方法,包括如下步驟: (1)確定基本塊的入口語句, (2)構造每一入口語句的基本塊:由該入口語句到下一入口語句之間的語句序列組成。
【文檔編號】H04W24/02GK103648116SQ201310563735
【公開日】2014年3月19日 申請日期:2013年11月13日 優先權日:2013年11月13日
【發明者】陳潤, 戚正偉, 管海兵, 辛銳 申請人:上海交通大學