軟件性能與軟件優(yōu)化_第1頁
軟件性能與軟件優(yōu)化_第2頁
軟件性能與軟件優(yōu)化_第3頁
軟件性能與軟件優(yōu)化_第4頁
軟件性能與軟件優(yōu)化_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、軟件性能與軟件優(yōu)化(v1.2)page 2n 培訓(xùn)之前,你所理解的這次培訓(xùn)的主題;n 三天的培訓(xùn),我們的學(xué)習(xí)內(nèi)容是哪些?n 如何評估我們的項目質(zhì)量;兩個問題page 3軟件性能與軟件質(zhì)量性能可靠性可修改性功能可維護(hù)性易用性可測試性可移植性可重用性安全性page 4培訓(xùn)目標(biāo)n 軟件優(yōu)化的經(jīng)驗分享;n 互動參與;n 優(yōu)化的案例收集;n 整理成文,指導(dǎo)以后的軟件設(shè)計;page 5 軟件性能指在指定條件下,相對于資源使用總量,軟件產(chǎn)品提供恰當(dāng)?shù)膱?zhí)行效果的能力,一般包括如下一些方面:1. 時間響應(yīng): 軟件產(chǎn)品執(zhí)行其功能時,提供恰當(dāng)?shù)捻憫?yīng)和處理時間的能力; 2. 資源的使用效率: 在指定條件下,軟件產(chǎn)品執(zhí)

2、行其功能時,占用恰當(dāng)?shù)馁Y源的能力; 3. 吞吐量: 指單位時間內(nèi)能處理的事件個數(shù),或單位時間傳輸?shù)臄?shù)據(jù)量; 軟件性能的定義page 6分類度量名稱目標(biāo)定義數(shù)據(jù)來源時間行為性響應(yīng)時間完成特定任務(wù)的估計時間x=time(計算或模擬的)估算吞吐時間單位時間內(nèi)估計可以完成多少任務(wù)x=單位時間的任務(wù)數(shù))估算周轉(zhuǎn)時間完成一項完整工作(包括一組相關(guān)任務(wù))的估計時間x=time(計算或模擬的)估算資源利用性i/o利用完成特定任務(wù)預(yù)計需要的io利用。x=緩沖的數(shù)量(計算或模擬的)源代碼i/o利用消息密度在系統(tǒng)調(diào)用中與i/o相關(guān)的消息占源代碼的比例x=a/b;a=有關(guān)于i/o錯誤的消息數(shù);b=直接與系統(tǒng)調(diào)用相關(guān)的

3、源代碼行數(shù);源代碼內(nèi)存利用完成特定任務(wù)產(chǎn)品需要占用的內(nèi)存數(shù)x=內(nèi)存大小內(nèi)存利用估計內(nèi)存利用消息密度在系統(tǒng)調(diào)用中與內(nèi)存利用相關(guān)的消息占源代碼的比例x=a/b;a=有關(guān)于內(nèi)存利用錯誤的消息數(shù);b=直接與系統(tǒng)調(diào)用相關(guān)的源代碼行數(shù);源代碼數(shù)據(jù)傳遞傳遞的效率x=數(shù)據(jù)量/時間估算性能一致性性能一致程度產(chǎn)品的性能與其他制度,標(biāo)準(zhǔn)和約定的一致性。x=a/b;a=實現(xiàn)了性能的項數(shù);b=需要與制度,標(biāo)準(zhǔn)和約定一致的項數(shù);相關(guān)標(biāo)準(zhǔn)和約定;需求;設(shè)計;代碼;評審報告;軟件性能的度量page 7關(guān)于軟件性能n 軟件性能與其他質(zhì)量屬性的關(guān)系;n 軟件性能的一些誤區(qū);page 8需求分析階段設(shè)計階段創(chuàng)建階段測試階段用戶現(xiàn)場

4、性能確定性能指標(biāo)性能設(shè)計并發(fā)設(shè)計分布式設(shè)計架構(gòu)設(shè)計代碼級別的優(yōu)化性能測試壓力測試性能采集軟件性能與研發(fā)階段性能,也是設(shè)計出來的性能,也是設(shè)計出來的page 9軟件的優(yōu)化page 10一.需求階段的性能描述; 二.設(shè)計階段的性能設(shè)計; 三.開發(fā)階段的性能實現(xiàn);四.測試階段的性能驗證;page 11一.需求階段的性能描述 1.列出系統(tǒng)的性能需求;2.用精確的數(shù)據(jù)指標(biāo)來表達(dá),包括最大吞吐量,響應(yīng)和處理時間,資源的使用效率等;3.必須是系統(tǒng)可達(dá)到的數(shù)據(jù)指標(biāo); page 12一.需求階段的性能描述 我們目前存在的問題:n 項目需求階段的性能描述是否清晰?n 性能的描述除了在需求階段,還在其他階段有所描述

5、?n 其他?page 13舉例:zxv10某產(chǎn)品的性能要求 最大32個2m終端接入能力; 單畫面會議視頻在mcu的視頻延時小于200毫秒; 關(guān)鍵dsp,cpu性能留有20%余量。 關(guān)鍵cpu留有30%以上的空閑內(nèi)存; 單板復(fù)位的時間小于6秒; 最多16路的視頻混合;page 14二.設(shè)計階段的性能設(shè)計設(shè)計階段能有哪些方法提高性能?page 15二.設(shè)計階段的性能設(shè)計1.系統(tǒng)體系結(jié)構(gòu)的設(shè)計: 系統(tǒng)的體系結(jié)構(gòu)從最基礎(chǔ)架構(gòu)上決定著整個系統(tǒng)的性能,如果這個階段的設(shè)計作不好,對以后的研發(fā)影響很大,其他優(yōu)化的設(shè)計無法彌補(bǔ)架構(gòu)的缺陷 。page 16二.設(shè)計階段的性能設(shè)計1.系統(tǒng)體系結(jié)構(gòu)的設(shè)計舉例 i. z

6、xv10 mcu:分組交換和電路交換 基于分組交換的h.323協(xié)議,對數(shù)據(jù)包直接進(jìn)行處理,但是因為繼承原有基于時系交換的mcu,仍然采用時系交換,對于每個數(shù)據(jù)包都要進(jìn)行包的拆解,時系拼湊操作,占用大量的cpu能力,也大大增加了軟件復(fù)雜度,后期的性能指標(biāo)很難達(dá)到。 ii.zxj10:mp模塊 mp模塊的設(shè)計采用工控機(jī),大量操作的數(shù)據(jù)處理在本地硬盤;page 17二.設(shè)計階段的性能設(shè)計2.軟件體系結(jié)構(gòu)的設(shè)計: 軟件體系結(jié)構(gòu)也非常重要,同樣的硬件,不同的軟件架構(gòu),最后的系統(tǒng)性能差別非常大,對于各個任務(wù)的設(shè)計,任務(wù)間通訊的方式,任務(wù)優(yōu)先級的設(shè)置,任務(wù)同步的方式等,都要在系統(tǒng)設(shè)計階段好好考慮進(jìn)來。pag

7、e 18二.設(shè)計階段的性能設(shè)計2.軟件體系結(jié)構(gòu)的設(shè)計舉例 i.時鐘節(jié)拍的設(shè)計,太低的頻率導(dǎo)致任務(wù)響應(yīng)時間變大,太高的頻率會讓系統(tǒng)開銷太高,需要根據(jù)系統(tǒng)特點進(jìn)行選擇,例如mpc8260的時鐘節(jié)拍可以選擇60-100; ii.對消息隊列的操作,是否采用阻塞方式等; 舉例:為了獲得高精度的定時器,采用更高的系統(tǒng)時鐘;減少不必要的系統(tǒng)調(diào)用開銷;page 19二.設(shè)計階段的性能設(shè)計3.硬件的選型 : 不同的處理器,性能不同,適用領(lǐng)域也不同,有的適用大量的運算,如dsp,有的適用通訊處理,所以,需要在芯片選型即確定哪些芯片是我們需要的,硬件選型錯誤帶來的影響也是致命的。 page 20二.設(shè)計階段的性能設(shè)

8、計3.cpu的選型 舉例 adi6834adi6834idt32438idt32438motorola 8260motorola 8260ixp425ixp425內(nèi)核mips3000mips4000powerpc603estrongarm主頻200m300m200m400m指令cache16k16k32k32k數(shù)據(jù)cache8k16k32k(32+2)ksdram/ddr100m sdramddr150m66m(64bit) sdram133m sdrampci32bit/v2.2,帶arbiter32bit/v2.2,帶arbiter無32bit/v2.2,帶arbiter片上sram32k

9、byte1k*32bitcpm用與dcache共用mmu支持支持支持支持gpio16bit323216uart2222dma61022功耗2w2.4w2.4w2.2wosvxworks/linuxvxworks/linuxvxworksvxworks/linux使用環(huán)境adi+linux2.4idt+linux2.48260+vxworks ixp425+vxworkspage 21二.設(shè)計階段的性能設(shè)計4.好的算法和數(shù)據(jù)結(jié)構(gòu): n 選擇一個好的算法和好的數(shù)據(jù)結(jié)構(gòu),其影響遠(yuǎn)遠(yuǎn)大于選擇一個好的語言和好的編譯器;n 算法對應(yīng)用程序執(zhí)行速度的影響是最顯著的。n 一個大量使用了排序的程序,使用堆排序的

10、執(zhí)行速度遠(yuǎn)大于使用冒泡排序的程序。n 算法沒有好的優(yōu)化的程序,即使把它按照處理器的優(yōu)化指令做成了硬件版,它遠(yuǎn)還是比不上使用了優(yōu)化算法的純軟件程序。n 在我們做優(yōu)化的時候,一定要分析代碼中主要使用的算法,首先考慮是否有明顯更好的算法,如果有,馬上放棄現(xiàn)有的算法,避免在低效算法上進(jìn)行徒勞的優(yōu)化。,page 22二.設(shè)計階段的性能設(shè)計n 好的算法和數(shù)據(jù)結(jié)構(gòu):例子:zxv10非全交換的實現(xiàn);page 23全交換的處理思路page 24非全交換的處理思路page 25二.設(shè)計階段的性能設(shè)計5.改造協(xié)議棧和操作系統(tǒng) : 底層軟件的效率,很大程度依賴操作系統(tǒng)和協(xié)議棧,很多時候并不能滿足要求,就需要定制操作系

11、統(tǒng),來完成符合要求的模塊,同時,對于協(xié)議棧,因為分層結(jié)構(gòu),會導(dǎo)致性能的下降,在不能滿足需求的時候,也要進(jìn)行裁減和修改,甚至需要重寫協(xié)議棧代碼,根據(jù)需求來開發(fā)定制協(xié)議棧 。page 26二.設(shè)計階段的性能設(shè)計5.改造協(xié)議棧和操作系統(tǒng) 舉例 i. 改造tcp/ip協(xié)議棧: 重寫適用系統(tǒng)的協(xié)議棧; ii.完善tcp/ip協(xié)議棧: 對于udp協(xié)議處理,不在進(jìn)行socket的收發(fā)處理,而是直接從ip層獲得數(shù)據(jù)包進(jìn)行處理,繞過udp協(xié)議和socket接口,減少內(nèi)存拷貝次數(shù),減少大量的查詢操作,從而大大提高程序效率。 數(shù)據(jù)發(fā)送可以直接調(diào)用驅(qū)動層的發(fā)送函數(shù)。 page 27二.設(shè)計階段的性能設(shè)計6.驅(qū)動優(yōu)化設(shè)

12、計 優(yōu)化的驅(qū)動設(shè)計可以讓整個軟件執(zhí)行效率大大提升,有經(jīng)驗的開發(fā)人員,特別是底層技術(shù)專家,可以設(shè)計出非常高效的驅(qū)動程序; page 28二.設(shè)計階段的性能設(shè)計6.驅(qū)動優(yōu)化設(shè)計 舉例 單板同時處理16個2m終端數(shù)據(jù),每秒收發(fā)數(shù)據(jù)包達(dá)到3200個,每次中斷都要保存,恢復(fù)環(huán)境,占用大量cpu時間,通過設(shè)置bd表,每32個數(shù)據(jù)包產(chǎn)生一次中斷,而不是先前的一個數(shù)據(jù)包一次中斷,從而讓驅(qū)動效率提升200%,系統(tǒng)效率提升100%。同時,因為處理時間都在毫秒級別,對應(yīng)用沒有影響;page 29二.設(shè)計階段的性能設(shè)計7. cpu的特性 :i.主頻 : 很多cpu都可以工作在不同的主頻下,例如mpc860t,可以在6

13、5m,50m,8260可以在200m,166m,133m等。 ii. dma: 對于大量數(shù)據(jù)訪問,數(shù)據(jù)拷貝,dma是提高程序效率很好的方法,但是要注意和主程序之間的異步操作。dma雖然不會占用cpu時間,但是會和cpu爭奪總線資源;page 30二.設(shè)計階段的性能設(shè)計7. cpu的特性 :iii.cache的打開和關(guān)閉 cache的打開和關(guān)閉對于程序效率差別非常大,應(yīng)該盡早打開數(shù)據(jù)和程序cache。同時,對于非常高效的代碼,例如小的驅(qū)動程序,可以鎖定到cache,從而提高局部代碼的運行效率; page 31二.設(shè)計階段的性能設(shè)計7. cpu的特性 :iv:字節(jié)對齊 對于系統(tǒng)中的大量數(shù)據(jù)拷貝,應(yīng)

14、該在設(shè)計的時侯就要考慮到字節(jié)對齊,這樣在調(diào)用memcpy的時侯,會很容易的進(jìn)行字拷貝,長字拷貝,效率差別很大,字節(jié)對齊一定要在設(shè)計階段考慮進(jìn)來,特別是緩沖區(qū)的設(shè)計; memcpy的實現(xiàn)機(jī)制;page 32二.設(shè)計階段的性能設(shè)計7.動態(tài)內(nèi)存分配 (1)對于頻繁使用的數(shù)據(jù)結(jié)構(gòu),不要每次使用時候分配內(nèi)存,使用后馬上釋放。否則,如果你是在一個循環(huán)體內(nèi)使用它的,就會花費很多時間在分配和釋放內(nèi)存上。(2)內(nèi)存分配方式的選擇。使用標(biāo)準(zhǔn)c運行庫的malloc()和free()是最簡單也是最低效的方式; (3)創(chuàng)建內(nèi)存管理模塊; page 33二.設(shè)計階段的性能設(shè)計 8.文件io使用: 硬盤是慢速設(shè)備,文件io

15、操作是一個非常消耗時間的操作。(1)使用標(biāo)準(zhǔn)c的fopen(),fread(),fwrite()等進(jìn)行文件io最簡單,最低效。(2)使用c+的io流改進(jìn)了效率,因為它往往對輸出的流進(jìn)行緩沖,直到緩沖滿時候刷新,減少了磁訪問次數(shù)。(3)一個改進(jìn)的方式是直接使用readfile()和writefile()等系統(tǒng)調(diào)用,自己管理緩沖區(qū)。(4)可以劇烈的改進(jìn)io操作的兩個方式是:內(nèi)存映像文件和異步文件io。page 34二.設(shè)計階段的性能設(shè)計 9.緩沖區(qū)的設(shè)計 : 緩沖區(qū),消息隊列大小等,也是根據(jù)系統(tǒng)的吞吐量來設(shè)計,注意不要出現(xiàn)緩沖區(qū)過小,或者消息隊列太小導(dǎo)致丟消息; page 35三.開發(fā)階段的性能實

16、現(xiàn) 開發(fā)階段都有哪些優(yōu)化方法?page 36三.開發(fā)階段的性能實現(xiàn) 1.嵌入?yún)R編語言 : 匯編語言的效率要比c語言高很多,特別是一些要求效率非常高的算法,都需要用匯編實現(xiàn),匯編的開發(fā)效率并不高,所以,好的策略是在c程序中嵌入?yún)R編語言。 page 37三.開發(fā)階段的性能實現(xiàn) 1.嵌入?yún)R編語言 舉例 因為有大量的數(shù)據(jù)拷貝,系統(tǒng)提供的memcpy性能很低下,通過匯編代碼即可看出來,通過重新寫匯編代碼,則可以提供比原有實現(xiàn)高效很多的方法,注意,這個要保證輸入?yún)?shù)都是字對齊的,所以緩沖區(qū)也要設(shè)計成字對齊。先前的匯編代碼:略,重寫的memcpy匯編代碼:bcopylongsm2m:_bcopylongsm

17、2m:addir3,r3,-4addir4,r4,-4mtctrr5bcflgom2m:lwzur7,4(r3)stwur7,4(r4)bdnzbcflgom2mblr page 38三.開發(fā)階段的性能實現(xiàn) 2.使用優(yōu)化編譯選項: 每個編譯器都有自己的優(yōu)化選項,如果可能,都設(shè)置成最高級的優(yōu)化。初期可以不打開優(yōu)化開關(guān),但是后期一定要打開,編譯開關(guān)打開后,可能系統(tǒng)發(fā)生異常崩潰,這多半和優(yōu)化選項無關(guān),而是系統(tǒng)中有時間敏感部分,在優(yōu)化后,代碼執(zhí)行更塊,導(dǎo)致運行異常。 舉例: -o1 寄存器優(yōu)化,會將局部變量優(yōu)化成寄存器,性能提高很大,文件變?。?-o2 局部優(yōu)化,會優(yōu)化匯編語句前后順序,會在函數(shù)內(nèi)部排

18、流水線,性能提高很大,文件變??; -o3 文件級優(yōu)化,部分函數(shù)會被內(nèi)聯(lián),且可能會被內(nèi)聯(lián)后排流水線,性能提高與應(yīng)用關(guān)系很大,文件可能變大;page 39三.開發(fā)階段的性能實現(xiàn) 3.循環(huán)變量與條件判斷的使用: 對于循環(huán)內(nèi)有判斷條件的,盡量把判斷條件轉(zhuǎn)移到循環(huán)語句外,這樣可以避免,每次循環(huán)都進(jìn)行判斷操作,重要的是如果是dsp軟件,這樣會破壞流水線的工作,讓程序效率大大降低。for (循環(huán)條件)if (條件判斷 )if (條件1) & (條件2) continue; do page 40三.開發(fā)階段的性能實現(xiàn) 4.條件語句,switch語句的判斷順序。 對于多重條件語句,應(yīng)該把執(zhí)行次數(shù)最多的條

19、件分支放在最前面,按可能的調(diào)用頻率來排列順序。switch( tmsg.cmsgtype )case board_info_req:/* 0 x00 處理板信息請求消息:mpc860-mpc8260-c6202 ok! */processboardinforeq( &tmsg );break;case ip_addr_ind:/* 0 x02 處理ip地址指示消息:mpc860-mpc8260 ok! */processchangeip( &tmsg );break;page 41三.開發(fā)階段的性能實現(xiàn) 5.注意類型轉(zhuǎn)換 。 一個頻繁使用的循環(huán)體內(nèi)作從double到int的轉(zhuǎn)換會消耗可能比計算本身還多的時間。 。page 42三.開發(fā)階段的性能實現(xiàn) 6.使用寄存器變量 。 register會讓編譯器把指定變量放到寄存器,提高運行效率 。參數(shù),局部變量;page 43三.開發(fā)階段的性能實現(xiàn) 7.短路語句 。/* 如果不是udp協(xié)議或者不是本地包,則釋放,直接返回 */if( ( piphead-cprotocol != protocol_udp ) & ( g_ptenilmng-nip != (*(uint32 *)piphead-cdestination) ) )m_freem( *pptrmbuf );return true;pag

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論