作為一個(gè)驗(yàn)證工程師我經(jīng)常被問到這樣的問題:"處理器的驗(yàn)證什么時(shí)候完成?"或者換句話說,"我該如何衡量測(cè)試平臺(tái)的效率,我如何對(duì)驗(yàn)證的質(zhì)量建立信心?"。當(dāng)然這一問題沒有簡(jiǎn)單的答案。業(yè)界有幾個(gè)常用的指標(biāo)可以參考,如覆蓋率和錯(cuò)誤曲線。雖然這些指標(biāo)是絕對(duì)必要的,但它們并不足以達(dá)到盡可能高的處理器品質(zhì)。事實(shí)上,這些指標(biāo)并不能真正揭示驗(yàn)證方法找到最后一個(gè)bug的能力。隨著經(jīng)驗(yàn)的積累,我了解到檢測(cè)處理器漏洞的復(fù)雜性是一個(gè)很好的指標(biāo),并可以在項(xiàng)目的整個(gè)開發(fā)過程中使用。
是什么定義了處理器漏洞的復(fù)雜性以及如何檢測(cè)它?
經(jīng)驗(yàn)告訴我,我們可以通過計(jì)算擊中漏洞所需的獨(dú)立事件或條件的數(shù)量來定義一個(gè)漏洞的復(fù)雜性。
那么“事件”又如何定義呢?
讓我們舉一個(gè)簡(jiǎn)單的例子。當(dāng)缺少所需的警告時(shí),一個(gè)典型的bug會(huì)在緩存中發(fā)現(xiàn)一個(gè)典型的漏洞。此時(shí)數(shù)據(jù)損壞可能發(fā)生在以下情況:
A cache line at address @A is Valid and Dirty in the cache.
A load at address @B causes an eviction of line @A.
Another load at address @A starts.
The external write bus is slower than the read, so the load @A completes before the end of the eviction.
External memory returns the previous data because the most recent data from the eviction got lost, causing data corruption.
在這個(gè)例子中,我們需要4個(gè)事件或條件來擊中這個(gè)漏洞。這4個(gè)事件給這個(gè)bug打了4分,也就是說漏洞的復(fù)雜性為4。
對(duì)處理器漏洞進(jìn)行分類?
為了衡量一個(gè)漏洞的復(fù)雜性,我們可以對(duì)漏洞進(jìn)行分類,供整個(gè)處理器驗(yàn)證團(tuán)隊(duì)來使用。在之前的一篇博文中,我們討論了4種類型的bug,并解釋了我們?nèi)绾问褂眠@些分類來提高測(cè)試平臺(tái)和驗(yàn)證的質(zhì)量。此時(shí)我們可以再進(jìn)一步,即將這種方法與漏洞的復(fù)雜性結(jié)合起來處理問題。
一個(gè)簡(jiǎn)單的漏洞可能需要觸發(fā)1到3個(gè)事件。那么第一個(gè)簡(jiǎn)單的測(cè)試就會(huì)失敗,而一個(gè)極端案例可能會(huì)需要4個(gè)或更多的事件。
回到我們上面的例子,我們有一個(gè)復(fù)雜性為4的bug,如果四個(gè)條件中的任何一個(gè)不存在,那么這個(gè)bug就不會(huì)被擊中。
一個(gè)受限的隨機(jī)測(cè)試平臺(tái)需要幾個(gè)功能,以便能夠擊中上文例子中的漏洞。地址序列應(yīng)該足夠聰明,可以重用之前請(qǐng)求的地址,外部總線上的延遲也應(yīng)該足夠非典型,以便有足夠快/慢的讀寫。
而一個(gè)隱藏比較深的案例可能需要更多的事件來觸發(fā)。假定一個(gè)更微妙的bug與我們的例子有相同的條件,但是它只發(fā)生在緩存上發(fā)現(xiàn)ECC錯(cuò)誤的時(shí)候,與中斷發(fā)生的時(shí)間完全一致,并且只發(fā)生在內(nèi)核完成FPU操作導(dǎo)致除以0錯(cuò)誤出現(xiàn)的時(shí)候。在典型的隨機(jī)測(cè)試平臺(tái)上,所有這些條件同時(shí)出現(xiàn)的概率是非常低的,這使得它成為一個(gè) "隱藏 "的終極漏洞。
為了使得這些隱藏的bug在測(cè)試平臺(tái)上更容易被發(fā)現(xiàn),提高驗(yàn)證的質(zhì)量是重點(diǎn)。它包括使隱藏的個(gè)例成為極端的個(gè)例此種情況。
如圖所示,4只紅色昆蟲分別代表4種類型的CPU漏洞
這種分類沒有任何限制。經(jīng)驗(yàn)告訴我們,一個(gè)能夠找到8分或9分漏洞的測(cè)試平臺(tái)本身就是一個(gè)強(qiáng)大的模擬測(cè)試平臺(tái),是提供高質(zhì)量RTL的關(guān)鍵。根據(jù)我們的觀察,今天最先進(jìn)的仿真測(cè)試平臺(tái)可以找到復(fù)雜度高達(dá)10的漏洞。幸運(yùn)的是,形式化驗(yàn)證的使用使我們更容易找到復(fù)雜度更高的bug,為更好的設(shè)計(jì)鋪平道路,并為仿真中需要改進(jìn)的地方提供線索。
使用漏洞的復(fù)雜性分類來提高驗(yàn)證測(cè)試平臺(tái)的質(zhì)量
這種分類和方法只有在驗(yàn)證開始時(shí)和整個(gè)項(xiàng)目開發(fā)過程中使用才有效,原因有二:
漏洞必須在被發(fā)現(xiàn)時(shí)即時(shí)修復(fù)。留下一個(gè)2級(jí)或3級(jí)的bug而不即時(shí)修復(fù),則意味著在啟動(dòng)大型浸泡測(cè)試(soak test)時(shí)會(huì)出現(xiàn)大量的失誤。據(jù)統(tǒng)計(jì),一個(gè)需要更多事件的類似bug(來自同一漏洞集群)可能會(huì)被忽略。
漏洞的復(fù)雜性被用來改善和衡量測(cè)試平臺(tái)的質(zhì)量。復(fù)雜性水平與觸發(fā)漏洞所需的事件數(shù)量越匹配,復(fù)雜性得分越高,測(cè)試平臺(tái)的壓力越大。追蹤和分析觸發(fā)漏洞的事件對(duì)于了解如何調(diào)整隨機(jī)約束或創(chuàng)建新的功能覆蓋點(diǎn)來說非常有用。
最后,通過將這種方法與Codasip的驗(yàn)證方法結(jié)合起來,包括獵殺以集群為單位的bug,確保了高水平的驗(yàn)證質(zhì)量,幫助我們確信并超越驗(yàn)證驗(yàn)收標(biāo)準(zhǔn)。
審核編輯 :李倩
-
處理器
+關(guān)注
關(guān)注
68文章
19384瀏覽量
230511 -
漏洞
+關(guān)注
關(guān)注
0文章
204瀏覽量
15401
原文標(biāo)題:處理器驗(yàn)證系列之四:系統(tǒng)Bug獵殺-檢測(cè)處理器漏洞的復(fù)雜性以提高測(cè)試平臺(tái)的質(zhì)量!
文章出處:【微信號(hào):Codasip 科達(dá)希普,微信公眾號(hào):Codasip 科達(dá)希普】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論