vtune 的 host 和 target 機器
以下就以我的環境爲例:
- 我的 vtune GUI 工具是 安裝在 window 的機器上。這個就是 host 機器。
- 而我的被測試機器,則是一臺 centos7 的服務器。這個就是 target 機器。
安裝 vtune 驅動 的動機
vtune 可以使用 perf 來採樣,但是在進行微架構分析的時候,perf 採樣會報錯。
這時,則需要 vtune 自帶的驅動來採樣。
安裝 vtune 驅動 前的準備
在安裝 vtune 自帶的驅動 前,需要內核打開以下編譯選項:
- CONFIG_MODULES=y
- CONFIG_MODULE_UNLOAD=y
- CONFIG_PROFILING=y
- CONFIG_SMP=y
- CONFIG_TRACEPOINTS=y (optional but recommended)
- CONFIG_KPROBES=y
- CONFIG_RING_BUFFER=y
- CONFIG_FRAME_POINTER=y (optional but recommended for kernel stack analysis)
修改 內核 的 Makefile:
在 CFLAGS_KERNEL 添加 -g
參數
CFLAGS_KERNEL := -g
CFLAGS := -g
重新編譯內核
export CFLAGS_KERNEL=-g
export CFLAGS=-g
make -j 16 clean
make -j 16 && make -j 16 modules && make -j 16 modules_install && make -j 16 install
修改 /etc/sysctl.conf
解除 kernel addresses 的限制。
kernel.kptr_restrict=0
安裝 vtune 的幫助文件
安裝 vtune 的幫助文件可以參考以下文件。
該文檔 位於 host 機器 vtune 的安裝路徑上 。
參考文檔:
C:\Program Files (x86)\IntelSWTools\documentation_2019\en\VTune Amplifier\amplxe_install_guide_windows.pdf
vtune 驅動 的源碼在哪裏?
vtune 驅動 已經包含在 vtune 的安裝包中。
當將 vtune 安裝到 host 機器後。可以在其中 C:\Program Files (x86)\IntelSWTools\VTune Amplifier 2019\target\linux
找到源碼。
比如 以下的兩個就是 32 和 64 位的 linux 源碼:
- <install_dir>/target/linux/vtune_amplifier_target_x86.tgz
- <install_dir>/target/linux/vtune_amplifier_target_x86_64.tgz
將 host 機器上 C:\Program Files (x86)\IntelSWTools\VTune Amplifier 2019\target\linux\vtune_amplifier_target_x86_64.tgz 文件
拷貝 到 target 機器 上的 /tmp 目錄。
解壓 得出 /tmp/vtune_amplifier_2019.6.0.602217
源碼則在 /tmp/vtune_amplifier_2019.6.0.602217/sepdk/src
在 target 機器中。
# 解壓
tar xzf vtune_amplifier_target_x86_64.tgz
參考章節:
Post-Installation Steps
+-> Set Up Linux* System for Remote Analysis
vtune 驅動 的 編譯 和 安裝
# 編譯 驅動
# 參考章節:
# Build the Sampling Driver
cd /tmp/vtune_amplifier_2019.6.0.602217/sepdk/src
sh build-driver
# 安裝 驅動
# 參考章節:
# Install the Sampling Drivers
cd /tmp/vtune_amplifier_2019.6.0.602217/sepdk/src
sh insmod-sep -r -g root
# 驗證 安裝
# 參考章節:
# Check Sampling Driver Installation
cd /tmp/vtune_amplifier_2019.6.0.602217/sepdk/src
sh insmod-sep -q
參考章節:
Sampling Drivers
+-> Build and Install the Sampling Drivers for Linux* Targets
vtune 採樣提早終止
記錄超限,會導致採樣提早終止。工具會出現以下錯誤信息:
The specified data limit of 1000 MB is reached. Data colloection is stop
可以到 target 機器上。查看中間的記錄文件。比如這裏例子的 中間的記錄文件 是放置在 /tmp
目錄。
du -s /tmp/* | sort -n | grep amplxe
> 4 /tmp/amplxe-tmp-root
> 88 /tmp/amplxe-log-root
> 1081624 /tmp/amplxe-results-root
> ^~~~~ 這個文件已經超過 1000M 了。
amplxe-results-root
中的 記錄,需要找一個合適的分區來存放,以保證有足夠的空間。
在實際的使用中,取 1ms 採樣間隔。會很容易超出 1G 的限制,導致採樣中斷。
這個時候只需要將 CPU sampleing interval, ms
採用間隔設置得大一點就可以了。比如採用間隔 5ms 就足夠了。
我在調試 dpdk 程序的時候:
採樣持續 30秒,由於採樣點過少,很多數據都是 灰色無效的。
採樣持續 60~90秒,情況會比較好。
採樣持續超過 120秒,很多時候結束的時候,會假死。我就從任務管理器,直接殺掉 vtune 再開過。
下載 glibc 的調試信息
在 vtune 採樣後,有的時候會出現 Outside any loop
。表示缺少調試信息。
在 centos 下,可以使用以下方法,下載 glibc 的調試信息。
修改文件:
/etc/yum.repos.d/CentOS-Debug.repo
修改內容:
[debug]
name=CentOS-7 - Debuginfo
baseurl=http://debuginfo.centos.org/7/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
enabled=1
# ^~~~ set enabled to 1 from 0.
下載 glibc 的調試信息。
debuginfo-install glibc
ref:
https://stackoverflow.com/questions/10352546/how-to-install-glibc-with-debugging-info-on-centos-5-5
dpdk 的調試信息
默認情況下dpdk是開了-O3優化的,如果需要有調試信息,要執行 export EXTRA_CFLAGS="-O3 -g3" 再進行編譯。
export EXTRA_CFLAGS="-O3 -g3"