2017-07-08 155 views
1

我試圖在主機上使用Intel-PT,而我在客戶機中運行一般軟件程序。所以我期望在主機上運行的Intel-PT將記錄所有相關的數據包(如PIP,FUP,TSC等)以及所有基於VM的數據包,如VMCS。當KVM-QEMU打開時,Intel-PT不記錄任何數據包

我用下面的命令 -

./perf kvm --host --guest --guestkallsyms=guest-kallsyms --guestmodules=guest-modules record -e intel_pt//

客kallsyms的評價和模塊是我從來賓複製到我的主機kallsyms和模塊文件。

然後我將啓動我的虛擬機。我將在客機上運行一個程序。程序執行完成後,我將在主機上按Ctrl + C(SIGINT)停止錄製。

我看到,當我嘗試使用PERF報告讀取使用下面的命令生成的文件 -

./perf kvm report -i perf.data.kvm

它返回「NO樣品中發現的。」這意味着Intel-PT未能記錄任何樣本。

注意:我發現對於我的處理器,MSR MSR_IA32_VMX_MISC中的值的位14爲0。根據英特爾文檔,此位應該爲1,Intel-PT將用於VMX操作。這是否會以任何方式影響Intel爲何不記錄任何樣品?

即使虛擬機啓動,INTEL-PT工作嗎?或者是我的記錄數據的方法錯誤?

編輯:我正在使用Linux Kernel 4.11.3,具有Ubuntu 17.04和支持Intel-PT的Broadwell CPU。

+0

我認爲英特爾PT必須在UEFI中啓用,因爲它傾向於導致安全問題。你確認處理器支持它,它已啓用?另外,如果PT可用且已啓用,則可能需要以root用戶身份運行命令。(我認爲我閱讀了英特爾的白皮書,但目前我找不到它)。 – jww

+0

嗨@jww,感謝您的提供。我有PT可用和啓用,因爲我有以前用它來分析普通用戶空間程序。然而,我像你所說的那樣將命令作爲「sudo」運行,我有趣地遇到了分段錯誤。 –

+0

PT不能與虛擬化功能一起使用。我不能說現在如果它是所有CPU的限制,或者只是像Broadwell這樣的早期實現。 – 0andriy

回答

1

因爲我現在清楚瞭解爲什麼Intel-PT不能與QEMU-KVM一起工作,我會發佈一個答案。

正如我在問題中提到的,主要原因是這樣做的主要原因是MSR MSR_IA32_VMX_MISC中的值的位14對於我的處理器是0。根據英特爾文檔,該位應該爲1,Intel-PT用於VMX根目錄操作(在VMXONVMXOFF之間)。

的主要問題是,當上述位是0,一個VMXON指令將的IA32_RTIT_CTL MSR的TraceEn分量設置爲0。此組件控制跟蹤操作,如果該被複位,沒有跟蹤數據被寫入到緩衝區。該重置在硬件級別進行控制。

要執行此活動,至少需要有一個Skylake處理器。我正在使用一個Broadwell系統,它現在看起來不起作用。

相關問題