性能測試基礎知識-性能的規劃與實現

發表于:2008-07-23來源:作者:點擊數: 標簽:性能測試規劃知識基礎
性能的規劃與實現 一個不能按意愿執行的程序是沒有用處的。每個程序都必須滿足某組用戶(有時會是一組很大且 需求 各不相同的用戶)的需求。如果程序的性能確實不能滿足那些用戶中很大一部分用戶的需求,則不會使用這個程序。一個不被使用的程序是不能實現預

性能的規劃與實現
    一個不能按意愿執行的程序是沒有用處的。每個程序都必須滿足某組用戶(有時會是一組很大且需求各不相同的用戶)的需求。如果程序的性能確實不能滿足那些用戶中很大一部分用戶的需求,則不會使用這個程序。一個不被使用的程序是不能實現預期功能的。

    這種情況對經許可的軟件包和用戶編寫的應用程序是確實存在的,盡管大多數軟件包開發者意識到低性能的影響,并盡力提高程序的運行速度。不幸的是,他們不能預測程序要經歷的所有環境和用途。讓程序具有可接受性能的最終職責就落在了那些選擇或編寫、規劃以及安裝軟件包的人身上。

    本章描述程序員或系統管理員可以確保新編寫或購買的程序具有可接受性能的步驟。(當程序員這個詞單獨出現時,它包含系統管理員和任何對程序的最終成功負責的人。)

    為使程序達到可接受的性能,在工程開始時就要確定和量化可接受性,并且決不能忽視達到目標所需的方法和資源。盡管聽起來這是基本方法,但一些編程工程卻有意抵制它。他們采用一種清楚地描述為設計、編碼、調試、可能是編寫文檔,有時間的話再確定其性能的策略。

    為使程序運行時不僅在邏輯上,而且在時間上都是可預知的,唯一辦法就是在軟件規劃和開發過程中對性能注意事項進行整體考慮。由于安裝者較之開發者有較少的自由,所以在現有軟件安裝時提前規劃也許就更關鍵了。

    盡管對一個小程序來說,這個過程的細節可能看起來很繁重,但不要忘了我們還有第二個“記事本”。我們不僅必須保證新程序具有令人滿意的性能,還須確保該程序對現有系統的補充部分不會降低運行于該系統的其它程序的性能。

確定工作負載的組成部分
無論程序是新編寫的還是購買的、大程序還是小程序,開發者、安裝者和預期用戶都對程序的使用有所假設,比如:

誰使用該程序
程序在何種環境下運行
這些環境出現的頻度,以及在某年某月某日某時會出現多少次
在這些環境下是否還需使用其它現有程序
程序運行于何種系統
有多少數據將要從何處進行處理
由程序或為程序創建的數據是否會在其它方面用到

    除非這些想法是作為設計過程的一部分提出的,否則很可能模糊不清,并且程序員將幾乎無疑會有與預期用戶不同的假設。甚至在程序員同時也是用戶這樣明顯很普通的情況中,讓假設無關會使以任何嚴格方式進行設計與假設的比較成為不可能。更糟的是,在對正進行的工作沒有完全理解的情況下是不可能確定性能需求的。

編寫性能需求文檔
    在確定和量化性能需求時,確定某一特殊要求背后的推理是很重要的。這是規劃過程總能力的一部分。用戶可能會將其需求聲明基于與程序員的假設不匹配的程序邏輯的假設。性能需求集至少應記錄下面幾點:

    各種特定類型的用戶 — 計算機交互作用在大部分時間會經歷的最佳響應時間,以及對大部分時間的定義。響應時間從用戶執行“運行”這個操作的時間直到用戶從計算機接收到足夠反饋以繼續執行任務來衡量。這是用戶的主觀等待時間。它不是從一個子例程的入口到第一個寫語句的時間。
如果用戶對響應時間不感興趣,而僅僅對結果感興趣,您可以詢問“當前獨立執行時間估計值的十倍”是否可以接受。如果回答“是”,您就可以繼續討論吞吐量。否則,您可以在用戶十分注意的情況下繼續討論響應時間。

最低程度可接受剩余時間的響應時間。較長的響應時間會使用戶認為系統當機。您還需要指定剩余時間,例如,一天的高峰時刻,百分之一的交互作用。在一天的某特定時間減少響應時間很難辦到,或者代價更高。 
需要的典型吞吐量和將發生的次數。這并不是臨時注意事項。例如,對一個程序的需求可能是每天運行兩次:上午 10:00 和下午 3:15。如果這是一個運行 15 分鐘,并且計劃運行于多用戶系統的有 CPU 限制的程序,則需要某種協商以便依次運行。
最大吞吐量周期的大小和計時。
綜合預期請求及其如何隨時間變化。
多用戶應用程序中每臺機器的用戶數及總用戶數。此描述應包括這些用戶登錄和注銷的次數,以及假設的擊鍵速率、完成的請求和思考次數。您可能想弄清楚思考次數是否隨前后請求而系統地變化。
用戶所做的關于工作負載要在其上運行的機器的任何假設。如果用戶頭腦中存在一臺具體的機器,那么確保您早就了解它。同樣,如果用戶所采用的是特殊類型、大小、成本、位置、互聯或任何其它變量,而這些變量將限制您滿足前述需求的能力,那么假設也變為需求的一部分。滿意程度可能不會在程序開發、測試或首次安裝的系統上進行評估。

估計工作負載的資源需求
除非您正在購買配有詳細資源需求文檔的軟件包,否則資源估計可能是性能規劃過程中最困難的任務。造成困難有如下幾個原因:

執行任何任務都有幾種方法。您可以編寫 C(或其它高級語言)程序、shell 腳本、perl 腳本、awk 腳本、sed 腳本、AIXwindows 對話等等。從性能觀點看,一些看來特別適合算法和程序員生產力的技術非常昂貴。
有一條準則很有用,即,抽象級別越高,就越要謹慎,以確保某個系統不會承受令人驚訝的性能。請仔細考慮由一些明顯無害的構造所暗示的數據量大小和迭代數量。

單個過程的精確成本是很難確定的。困難之處不僅僅是技術上的;還有哲學上的。如果多用戶運行的給定程序的多個實例正在共享程序文本頁面,則哪一個進程應該負責那些內存頁面呢?操作系統將最近用過的文件頁面保留在內存中,以便為重新訪問該數據的程序提供高速緩存的效果。重新訪問數據的程序應該對用來保留數據的空間負責嗎?某些評估的粒度,比如系統時鐘,可以在用于同一程序連續實例的 CPU 時間上產生變化。
有兩種方法來處理資源報告的模糊性和可變性。第一種是忽略模糊性,持續消除可變性的來源,直到評估變得可一致性接受。第二種方法是嘗試讓評估盡可能真實,并從統計上描述結果。注意后者產生與生產環境有某種相關性的結果。

系統很少專門運行單個程序的單個實例。存在幾乎一直處于運行的守護程序、頻繁的通信活動和通常來自多個用戶的工作負載。這些活動很少線性增加。例如,增加給定程序的實例個數幾乎沒有增加使用的新程序文本頁面數,因為大部分程序已存在于內存中。但是,附加的進程可能導致對處理器高速緩存的額外爭用,所以,不僅其它進程不得不和新進程共享處理器時間,而且所有進程都會經歷執行每條指令需要更多周期的情況。這實際上使得處理器速度減慢,結果導致更頻繁的高速緩存未命中。
為使您的估計與具體情況所允許的一樣真實,請使用以下準則:

如果程序存在,對最類似您自己需求的現有安裝進行評估。最好的方法是使用容量規劃工具,如 BEST/1。
如果沒有合適的安裝可用,則進行試安裝并對綜合工作負載進行評估。
如果生成與需求相匹配的綜合工作負載是不實際的,則評估個體的交互作用并將結果用作仿真輸入。
如果程序還不存在,查找使用同種語言和通用結構的同等程序并對其進行評估。再次強調,語言越抽象,在確定可比性時就越需謹慎。
如果同等程序不存在,則用規劃的語言開發一個主要算法的原型,對這個原型進行評估并對工作負載建模。
只有當任何類型的評估都是不可能或不可行的,您才應作一個有根據的猜測。如果在規劃階段有必要對資源需求進行猜測,則在其開發階段盡早對實際程序進行評估是很關鍵的。
牢記獨立軟件供應商(ISV)對他們的應用程序常常有可縮放的準則。

在估計資源時,我們主要對四個方面感興趣(無特殊順序):

CPU 時間
工作負載的處理器成本
磁盤訪問
工作負載產生的磁盤讀寫速率
LAN 流量
工作負載生成的信息包數目和交換的數據字節數
實內存
工作負載所需 RAM 的大小
以下各節討論了在各種情況下如何確定這些值。

評估工作負載資源
如果實際程序、可比程序或原型對評估都是可用的,則技術方法的選擇依賴以下幾點:

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97