您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Linux系統性能評測基準系統配置及其原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
概要
開發人員在高性能系統的性能調優過程中,經常會碰到各種背景的噪聲干擾, 從而使得收集的數據不夠精確。本文主要從CPU 以及Linux操作系統的角度來分析各種噪聲的來源以及消除方法。最終的目標是搭建基準平臺,在特定的cpu上實現”0”干擾。
Cpu 運行中存在的幾種背景噪聲干擾來源
1. 調度器:
進程調度器對于系統的影響幾乎無處不在, Linux 內核一般來說是使用公平的分時調度策略(CFS)。需要特定的參數來調整調度器的行為,從而盡量減少對于測量進程的干擾。
2.中斷:
中斷是系統必須要響應的事件, 具有較高優先級,可以搶占普通的用戶進程。
a. 硬件中斷
主要來自外部事件, CPU需要非常及時的響應。比如最常見的IO,時鐘,Linux 內核支持的硬件中斷數量眾多,需要注意親和性配置。可以取消響應一些比較特殊的中斷。
b. 軟中斷 Softirq
軟中斷是硬件中斷處理的衍生子系統。LInux 硬件中斷響應只需要處理一些必須立即響應的操作, 而將一些可以延后處理的操作移交給軟中斷。Linux 中的有10類軟中斷, 后續我們將會分析。
c. Workqueue
Workqueue 也是LInux中常見的一類延遲操作的任務類型
3. 電源管理 :
現代處理器通常為了更高效的利用能源,都會支持一些高級電源管理的功能。這些電源管理的功能如果使用不當也會對于性能評測造成影響。
4. 時間源:
如果要進行性能評測, 就離不開時間戳。所以時間戳的正確采集方法也是至關重要的。
以上這幾種因素往往是互相交織的, 比如進程調度器需要時鐘中斷來驅動, 電源管理子系統需要調度器來驅動 。時間戳的采集和微架構也是息息相關的。下面我們將通過案例逐一分析。
系統配置案例
系統配置信息:
CPU: Intel 9900KF P1 Frequency 3.6Ghz 1-core Turbo 5.0Ghz HT-disabled RAM: 16GB DDR4-3200 Ubuntu 19.04: Kernel 5.0.0-38-generic X86_64 Boot Parameter: BOOT_IMAGE=/boot/vmlinuz-5.0.0-38-generic root=UUID=697aea9f-2de2-4b9c-921d-5bd5f963c91f ro ipv6.disable=1 isolcpus=7 nohz_full=7 mce=off tsc=reliable no_watchdog irqaffinity=0 hpet=disable quiet splash vt.handoff=1
基準系統配置目標:
在baremetal 機器上(vt-x 環境下配置會更加復雜難以精確控制), 將 Core 7 隔離在調度器之外, 最大程度的減少各種因素對于Core 7的干擾。
啟動參數詳解:
標有紅色的這些啟動參數都是我們下面要來詳細分解的
isolcpus = managed_irq cpuslist
Isolcpus 主要是將目標cpu 從調度器的調度算法中隔離出來。也就是說從用戶進程的角度來說,調度器不會主動調度任何進程到目標cpu上來。但是僅僅靠這個參數仍然不能保證所有軟/硬中斷和一些其他的內核組件不會運行在目標的cpu上。
nohzfull = cpulist
這個參數還有一個相對弱化的版本nohz。nohz 的含義是在目標cpu的runqueue上沒有任何可調度實體時,cpu 進入idle狀態, 在此情況下 該cpu停止 時鐘tick(缺省是10ms一次)。那么nohzfull就更進一步, 在runqueue上只有一個活動的實體的時候也會停止時鐘tick。這樣就會大大減少對正在運行的唯一的進程的干擾(不是100%消除)。值得注意的是在非服務器版本的內核中 nohzfull一般是沒有打開的,需要重新編譯內核。大家可以檢查對應的內核編譯選項 CONFIGNOHZFULL=y。如果沒有打開則會在啟動日志中顯示警告。同時nohzfull 也就隱含了rcunocbs= cpulist
下圖是成功打開選項的日志
下圖是沒有打開編譯選項的報錯信息
在內核的Timer System 中修改選項
Nowatchdog
關閉所有的軟/硬件 死鎖監測
hpet=disable, tsc= reliable
這部分主要是針對時間子系統。hpet=disable 主要是避免hpet產生過多的中斷干擾系統。tsc= reliable 標記tsc 為可靠的, 減少運行時,時間源校驗。在我們的驗證過程中, 這個參數對于減少jitter有較大幫助
mce=off disable machine check to avoid interrupt
Machine checking 是一種高級的RAS 功能,對于產品環境非常重要, 但是對于評測環節我們先禁止掉它。
軟硬中斷的隔離
Disable irqblance service
我們并不希望任何硬件中斷被發送到core 7上
所以我們需要disable irqblance service
Take care irq affinity
硬件中斷的親和性也需要注意。
同樣是避免任何硬件中斷被發送到core 7
修改
/sys/devices/virtual/workqueue/cpumask to 1
效果對比截圖
下圖是/proc/interrupts
下圖是 /proc/softirqs
下圖是htop顯示的信息, 可以觀察到core 7上的可調度實體已經壓縮到了最少
MSR
MSR(ModelSpecific Register) 是配置處理器和獲取處理器狀態信息的關鍵接口。 MSR 主要分為兩類。
Per-Core MSR
這類的MSR 的讀寫指令都必須本地的core執行,所以要盡量避免從其它的core上來讀寫。例如 從core 7 上讀寫Core 3 。這樣LInux kernel 還需要調度這個讀寫操作到目標core3 上來 會帶來不必要的延遲。同時 如果在用戶層(ring3)中試圖讀寫msr 也需要切換到kernel 來完成這個操作(通過IPI,CAL 中斷)。也會對應用有干擾. 對于性能評測來說最典型的就是APERF/MPERF, 以及HWP對應的MSR, 以及PMU的配置接口 MSR 都是Per-Core。訪問Per-MSR的延遲 無法完全避免,所以要注意采樣的頻率,防止過度采樣。
Un-Core MSR
這類MSR 并不屬于任何具體的core,是公共資源。最典型的就是UNCORE_RATIO_LIMIT MSR。Un-Core MSR可以從任一core發起讀寫。只要避免從正在評測的core發起讀寫即可
通常來講, MSR需要通過 加載內核模塊 msr(/dev/msr), 之后通過rdmsr/wrmsr 工具來操作。
電源管理
Linuxkernel 中的電源管理主要由以下的兩個子系統來完成。在kernel 4.10以后, 電源管理系統是由調度器來觸發。
Cpufreq
Cpuf Freq 子系統主要管理在C0狀態下 處理器頻率的調整,主要由兩部分組成
Cpufreq driver
主要是針對各種不同硬件適配的對應的調頻驅動程序
Cpufreq governor
主要是各種不同的調頻策略
X86環境下主要有兩種選擇
acpi_cpufreq driver 以及其對應的7種governor
見參考鏈接:
https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html
Intel_pstate driver 及其對應的2種governor
(這是系統缺省的配置)
intel_pstate driver 是比較特別的驅動,相比于其它平臺。intel_pstate driver 主要是利用x86 的HWP 硬件特性來調整頻率。提供了有限的可定制策略。自動化程度更好,overhead更少。
Sysfs entries
見參考鏈接:
https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html
CpuIdle
Cpu idle 子系統主要管理在C1-C7狀態下 處理器idle狀態調整, 主要由兩部分組成
Cpu idle driver
主要是針對各種不同硬件適配的對應的idle驅動程序
Cpu idle governor
主要是各種不同的idle 時長策略
X86環境下主要有兩種選擇
acpi_idle driver
缺省是menu governor
Intel_idle driver
缺省是menu governor(這是系統缺省的配置, ladder 需要重新編譯內核)
Sysfs entries(見參考鏈接)
參考鏈接:
https://www.kernel.org/doc/html/latest/admin-guide/pm/cpuidle.html
推薦的配置方法:
鴻蒙官方戰略合作共建——HarmonyOS技術社區
在BIOS中,Disable Turbo
應用power.py[2] 腳本鎖定目標core的頻率(或者在BIOS 中disable Pstate)
設定內核參數 intel_idle.max_cstate=1.
如果需要徹底禁止idle 推薦 processor.max_cstate=0 ,idle=poll
這里需要注意 intel_idle.max_cstate=0只是disable intel_idle driver 轉而使用acpi_idle driver
根據workload特點 調整 UNCORE_RATIO_LIMIT 的min/max ratio
IPI,TLB Shootdown優化
進程隔離會減少shootdown, 但是內核部分做不到隔離地址空間。仍然會導致一定數量的tlb shootdown。 禁用 VT-X 減少 IPI.
MSR不要過采樣!因為per core 的MSR讀寫操作從非本地core調用,LInux 是通過IPI 調度到目標core上執行
除此之外, 調度算法/NUMA Aware/L3Cache QoS(RDT)/SMM-BMC/SmartEngine等模塊都會對系統性能測試有著噪音干擾, 敬請期待后續內容~
Reference
Intel SDM
Power.py
https://github.com/intel/CommsPowerManagement
看完上述內容,你們對Linux系統性能評測基準系統配置及其原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。