2017-04-12 20 views
1

在使用perf與Intel-PT事件時,我遇到了反覆出現的問題。我目前正在執行一個英特爾(R)至強(R)CPU E5-2620 v4 @ 2.10GHz機器的分析,其x86_64架構和32個硬件線程啓用了虛擬化。我特別使用來自SpecCPU2006的程序/源代碼進行分析。從SPECCpu2006編譯的二進制文件上運行帶有Intel-PT事件的perf記錄會崩潰服務器機器

我特別觀察了我第一次從SpecCPU2006編譯好的二進制文件之一進行剖析,一切工作正常和perf.data文件被產生,這是預期與英特爾-PT。由於SpecCPU2006程序的計算量非常大(任何時候都使用100%的CPU),因此對於大多數程序來說,perf.data文件顯然很大。我大致獲得7-10 GB perf.data大多數配置文件的程序文件。

但是,當我嘗試在同一個編譯二進制上進行第二次性能分析時,第一次成功完成後 - 我的服務器機器凍結。有時候,當我嘗試第三次/第四次分析時(第二次或第三次分析成功完成後)會發生這種情況。這種行爲是非常不可預測的。現在除非我重新啓動機器,否則我無法再分析更多的二進制文件。

我也發佈了服務器錯誤日誌,當我看到計算機已停止響應時,就會得到這些錯誤日誌。

Server error logs

顯然有一個錯誤信息,說固定遞歸的錯,但需要重新啓動!

這種情況發生在足夠特別大的SpecCPU2006二進制文件中,這些文件需要超過1分鐘才能運行而無需執行。

有什麼特別的原因可能會發生這種情況嗎?這不應該由於CPU使用率過高而發生,因爲在沒有perf或perf的情況下運行程序,但是任何其他硬件事件(perf列表可以看到)成功完成。這似乎只發生在Intel-PT。

請指導我使用步驟解決此問題。謝謝。

+0

任何人都可以幫助我或至少引導我嗎? –

+0

Kalita,**你的內核版本是什麼?**「修復遞歸故障」是來自linux內核的消息,它是災難性的故障。你可以發佈完整的內核錯誤消息(因爲文本不像圖片;需要更多文本;它可能保存在/ var/log/messages或附近的其他文件中)?你可以升級你的內核到更新的版本嗎?在哪裏使用NFS,你不能使用它?什麼是精確的perf命令,你能設置較低的分析頻率嗎? (10GB的perf.data文件聽起來太龐大,無法用於分析) – osgx

+1

嗨@osgx謝謝!現在已經解決了。有一個空指針解引用問題發生在結構體'perf_event'的成員(我從'var/log/syslog'中獲得了這個)。如果我在早期執行「perf record」之前就開始捕獲數據包,則可能發生這種情況。這已在內核版本4.10中得到解決。我正在使用內核版本4.4 –

回答

1

似乎我現在解決了這個問題。所以會發佈一個答案。

服務器因結構perf_event的特定成員發生空指針解除引用/訪問而崩潰。基本上成員perf_event->handle是罪魁禍首。這個信息,如@osgx所建議的,是從var/log/syslog文件中獲得的。該錯誤消息的一部分是: -

年04月19四時49分15秒######內核:[582411.404677] BUG:無法處理內核空指針引用在00000000000000ea

四月19 4時49分15秒######內核:[582411.404747] IP:[] perf_event_aux_event + 0x2E讀取/ 0XF0

一種可能的情況,其中該結構件被證明是NULL是如果我開始甚至捕獲數據包在更早的性能記錄完成釋放其所有資源之前。這已在內核版本4.10中正確處理。我正在使用內核版本4.4。

我將我的內核升級到更新的版本,現在它工作正常!

相關問題