減少大型機(jī)CPU消耗是個重要工作。節(jié)約每個CPU周期,不僅可以延緩硬件升級,還可以降低基于使用規(guī)模的軟件授權(quán)費(fèi)。
IBM Language Environment (LE)編輯器和運(yùn)行時提供了很多優(yōu)化選項(xiàng)——從而無須修改源代碼。
編譯時間選項(xiàng)
通過LE編譯器優(yōu)化,大型機(jī)程序員可以調(diào)整目標(biāo)代碼,充分發(fā)揮某個處理器家族計算性能。
ARCH(架構(gòu))是一個編輯器選項(xiàng)。ARCH級會指示編譯器生成含有針對目標(biāo)處理器進(jìn)行性能優(yōu)化的機(jī)器指令目標(biāo)代碼。ARCH重要性日益增加,因?yàn)镮BM已經(jīng)推出了數(shù)代服務(wù)器,都包含了針對性能優(yōu)化設(shè)計的指令集。
另一種選擇是TUNE,告訴編輯器安排機(jī)器指令順序,確保能夠利用處理器的指令管道與緩存優(yōu)勢。
程序員需要為生產(chǎn)線上最古老的處理器系列進(jìn)行優(yōu)化。挑錯ARCH選項(xiàng),并且操作異常(0C1s)可能會導(dǎo)致壞的TUNE,并降低性能。
雖然這些選項(xiàng)通常來說只專門針對C++編譯器,但I(xiàn)BM已經(jīng)將其擴(kuò)展到COBOL與PL/1高級語言。
運(yùn)行時選項(xiàng)
IBM lE同樣提供了多種運(yùn)行時選項(xiàng),可以提高大型機(jī)性能。
以下是選項(xiàng)指定的層次結(jié)構(gòu):
運(yùn)行時選項(xiàng)在程序中調(diào)用中指定
使用用戶選項(xiàng)(UOPT)控制會話(CSECT)連接選項(xiàng)到程序
區(qū)域選秀(ROPT)模塊
CEEPRMxx ParmLIB成員中的全局選項(xiàng)集
CBLPSHOPOPS的常規(guī)處理?xiàng)l件,存儲初始化與堆棧大小是運(yùn)行時優(yōu)化選項(xiàng),尤其在CICS環(huán)境中。
CBLPSHPOPS。CBPSHPOPS控制LE在進(jìn)入或退出COBOL運(yùn)行時時,是否執(zhí)行PUSH HANDLE與POP HANDLE CICS命令。PUSH HANDLE命令PUSH HANDLE命令用棧保存所有尚未處理的條件,而POP則將句柄條件從前推動。如果任何條件在有未處理句柄的情況下被提出,那么控制會切換到HANDLE命令指定的錯誤運(yùn)行時。
關(guān)閉CBPSHPOPS選項(xiàng)可以節(jié)約CPU周期,避免額外的PUSH與POP命令。然而,如果沒有CBPSHPOPS,在較低模塊提出的條件可能會滲透到?jīng)]有錯誤準(zhǔn)備的高級處理運(yùn)行時。只有在分析與測試后才改變配置。
存儲初始化 。STORAGE選項(xiàng)通一些參數(shù)控制內(nèi)存初始化,例如新申請的堆段參數(shù),LE釋放的堆段參數(shù)以及初始化棧或當(dāng)控制進(jìn)入運(yùn)行時進(jìn)行自動存儲。
堆初始化往往是CPU周期方面最廉價的成本。初始化棧存儲則更昂貴,雖然成本取決于子程序調(diào)用次數(shù)。除非你為國家安全局工作,否則不要使用erase-on-free 清除選項(xiàng)。
要避免LE內(nèi)存共同初始化,遵循編程最佳實(shí)踐,假定存儲是為初始化的,除非在程序中有另外明確指出。
棧和堆大小 。LE有自己的內(nèi)存管理器,其目的是減少程序找操作系統(tǒng)或CICS申請更多存儲的次數(shù)。 LE在大塊中獲得內(nèi)存,再根據(jù)需要細(xì)分。當(dāng)塊無法滿足存儲要求時, LE會調(diào)用操作系統(tǒng)或CICS申請另一個塊。一個初始化堆或棧存儲的明智選擇將減少調(diào)用操作系統(tǒng)內(nèi)存管理次數(shù)并降低CPU使用率。
選擇初始塊大小時一門超越科學(xué)的藝術(shù)。分塊過小會增加CPU使用,但分塊過大可能會降低存儲使用。
在大存儲塊中的碎片在混合應(yīng)用程序中相當(dāng)麻煩。對于一個虛擬的應(yīng)用程序,某程序從對存儲塊中申請512KB大小的堆,而另一個程序可能會在相同時間申請從1MB堆塊中獲得32字節(jié)的堆。隨著程序運(yùn)行,第一個程序獲得512KB并調(diào)用另外那個獲得32字節(jié)的程序。當(dāng)?shù)谝粋€程序試圖獲得512KB時,LE無法通過現(xiàn)有的塊滿足需求,而必須申請另外一個塊。這意味著有幾乎0.5MB的存儲沒有被使用。
在選擇初始堆和棧大小時,先研究應(yīng)用程序行為。同樣為CICS在每個用戶存儲分段的開頭與結(jié)尾設(shè)置8字節(jié)“崩潰區(qū)”。一個4-K IBM LE事務(wù)請求(GETMAIN)實(shí)際占用4,112字節(jié),這將導(dǎo)致CICS存儲碎片。堆CICS來說,使用4,080字節(jié),非常適合一個4-K頁。LE同樣使用一些新的存儲用來滿足自己使用控制,這也進(jìn)一步降低了留給程序的可用空間。
新聞熱點(diǎn)
疑難解答
圖片精選