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