本文曾獲得OOPSLA十年最具影響力論文獎。我們看到許多論文都包含某種性能評估。正如Georges等人所說,如果沒有良好的實驗設計和嚴謹的統計數據,很難得出確鑿的結論,有時甚至還可能獲得錯誤的結論,本文是在Java性能評估的背景下完成的。
基準測試是實驗計算機科學研究和開發的核心。因此,擁有嚴格的基準測試方法是至關重要的。一個不嚴謹的方法可能會扭曲整體情況,甚至導致錯誤的結論,推動研究和開發向非生產性方向發展,或者導致一個非最優產品投放市場。
一個好的基準需要一個精心挑選,充滿動力的實驗設計。除此之外,它需要一個完善的績效評估方法。
績效評估方法需要充分處理實驗環境中的非確定性問題。而處理非確定性的常用數據分析方法在統計上往往都不夠嚴格。
在Java的上下文中,非確定性的來源包括JIT編譯,線程調度和垃圾收集等。對于在云平臺上運行的許多基準測試來說,底層云平臺中的非確定性也是一個重要因素。
性能評估問題
通常在發布時進行評估是一種方法,這種方法可以完成一些性能運行(,并報告最佳性能數值(最小執行時間)。例如,下圖是五個不同的垃圾收集器的性能對比。
CopyMS和GenCopy表現差不多,而SemiSpace明顯優于GenCopy。
以下是相同的實驗結果,但報告使用了95%置信區間,統計學上更嚴格的報告方法。
現在我們看到,GenCopy明顯優于CopyMS,而SemiSpace和GenCopy具有重疊置信區間,它們之間的差異可能僅僅是由于被測系統中的隨機性能變化。
在調查了50篇Java性能文章之后,作者表示對于Java性能評估使用的方法論沒有統一的意見,下表中總結了這些論文中使用的一些方法:
誤導結果的例子
假設你使用非嚴格的方法,需要從一組運行中得出單個數字,例如最佳,平均,最差等。在成對比較中,如果兩個系統之間的增量大于某個閾值,則可能會有一個有意義的性能差異θ。如果使用統計學上嚴謹的方法學和置信區間報告,可能會看到:
·重疊的間隔
·非重疊的間隔,與非嚴格的方法相同
·非重疊的間隔,與非嚴謹的方法不同
這會導致六種不同的情況,其中只有一種情況,你可以依靠非嚴謹方法的結果:
作者進行了一系列的測試,發現所有流行的方法都可能導致誤導,其中大部分替代方法的比較高達16%。即使在3%的比較中也會出現錯誤的結論。(如果你真的必須得到單一的數字,平均值和中位數會是更好的選擇)。
統計
我們主張增加統計的嚴格性來管理運行時系統,尤其是Java系統的性能評估研究。統計學上嚴格數據分析的動機是統計學,特別是置信區間,使人們能夠確定在測量中觀察到的差異是否是由于測量中的隨機波動或者由于替代方式中的實際差異相互比較而造成的。
原文中的這一部分基本上是為測試人員量身定做的迷你統計教程。如果我們能夠從每次的實驗中得到確切可重復的數字,那么一切就變得簡單了。但事實并非這樣,非確定性的存在,使得我們不得不控制實驗與測量內容無關的騷擾事件。第一步就是舍棄極端的異常值,然后計算一個置信區間。
在每個實驗中,樣本是從潛在人口中抽取的。從這些樣本得出均值的置信區間,然后量化具有包括實際總體均值給定概率值的范圍。
定義一個置信區間 【C1,C2】,使得μ介于C1和C2之間的概率1-α,其中α是顯著性水平,(1-α)是置信水平。
90%置信區間意味著90%的可能性是潛在人口的實際分布均值處于置信區間內。對于同樣的數據,如果我們想要更確信真實的均值位于區間內,比如說95%的置信區間,那么隨之而來的是我們需要使區間更寬。
比較替代品
到目前為止,我們知道如何計算單個系統均值的置信區間。如果我們比較兩個系統和它們的置信區間重疊,那么我們就不能得出這樣的結論:在平均值中所看到的差異不是由于測量中的隨機波動造成的。如果置信區間不重疊,我們就得出結論,沒有證據表明差異有統計學意義。
本文給出了兩種方法差分計算置信區間的計算公式(見第3.3節)。如果這個區間包含0,我們可以在所選的置信水平上得出結論,兩者之間沒有統計上的顯著差異。
如果我們想要比較兩個以上的替代方案,那么我們就可以使用一個叫做方差分析的技術(ANOVO)。
方差分析將一組測量中的總變化分為由于測量中的隨機波動而導致的分量和由于替代方式之間的實際差異導致的分量...如果替代之間的變化大于每個替代中的變化,可以得出結論,在替代方案之間存在統計上顯著的差異。
ANOVO測試并沒有告訴你哪一種選擇有統計學差異,如果有的話,可以使用Tukey HSD(非常不同的)測試。
在方差分析中,我們可以在一個實驗中改變一個輸入變量。多因素方差分析使你能夠研究多個輸入變量及其相互作用的影響。ANOVA(MANOVA)使你能夠在多個基準測試中得出結論。
建議
使用更復雜的分析,如多因素方差分析和MANOVA,通常會有兩個問題。首先,他們的產出通常是不直觀的,而且在許多情況下,沒有深入的統計背景,很難理解。第二,正如前面所提到的,在分析過程中所需要做的所有度量都非常耗時,以致于它變得難以處理。
因此,本文第4節介紹了一套實用但仍有統計學意義的Java性能評估建議。