自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux系統(tǒng)性能評測基準(zhǔn)系統(tǒng)配置及其原理

系統(tǒng) Linux
開發(fā)人員在高性能系統(tǒng)的性能調(diào)優(yōu)過程中,經(jīng)常會(huì)碰到各種背景的噪聲干擾, 從而使得收集的數(shù)據(jù)不夠精確。本文主要從CPU 以及Linux操作系統(tǒng)的角度來分析各種噪聲的來源以及消除方法。最終的目標(biāo)是搭建基準(zhǔn)平臺(tái),在特定的cpu上實(shí)現(xiàn)”0”干擾。

[[317478]]

概要

開發(fā)人員在高性能系統(tǒng)的性能調(diào)優(yōu)過程中,經(jīng)常會(huì)碰到各種背景的噪聲干擾, 從而使得收集的數(shù)據(jù)不夠精確。本文主要從CPU 以及Linux操作系統(tǒng)的角度來分析各種噪聲的來源以及消除方法。最終的目標(biāo)是搭建基準(zhǔn)平臺(tái),在特定的cpu上實(shí)現(xiàn)”0”干擾。

Cpu 運(yùn)行中存在的幾種背景噪聲干擾來源

1. 調(diào)度器:

進(jìn)程調(diào)度器對于系統(tǒng)的影響幾乎無處不在, Linux 內(nèi)核一般來說是使用公平的分時(shí)調(diào)度策略(CFS)。需要特定的參數(shù)來調(diào)整調(diào)度器的行為,從而盡量減少對于測量進(jìn)程的干擾。

2.中斷:

中斷是系統(tǒng)必須要響應(yīng)的事件, 具有較高優(yōu)先級,可以搶占普通的用戶進(jìn)程。

  • a. 硬件中斷

       主要來自外部事件, CPU需要非常及時(shí)的響應(yīng)。比如最常見的IO,時(shí)鐘,Linux 內(nèi)核支持的硬件中斷數(shù)量眾多,需要注意親和性配置。可以取消響應(yīng)一些比較特殊的中斷。

  • b. 軟中斷 Softirq

        軟中斷是硬件中斷處理的衍生子系統(tǒng)。LInux 硬件中斷響應(yīng)只需要處理一些必須立即響應(yīng)的操作, 而將一些可以延后處理的操作移交給軟中斷。Linux 中的有10類軟中斷, 后續(xù)我們將會(huì)分析。

  • c. Workqueue

        Workqueue 也是LInux中常見的一類延遲操作的任務(wù)類型

3. 電源管理 :

現(xiàn)代處理器通常為了更高效的利用能源,都會(huì)支持一些高級電源管理的功能。這些電源管理的功能如果使用不當(dāng)也會(huì)對于性能評測造成影響。

4. 時(shí)間源:

如果要進(jìn)行性能評測, 就離不開時(shí)間戳。所以時(shí)間戳的正確采集方法也是至關(guān)重要的。

以上這幾種因素往往是互相交織的, 比如進(jìn)程調(diào)度器需要時(shí)鐘中斷來驅(qū)動(dòng), 電源管理子系統(tǒng)需要調(diào)度器來驅(qū)動(dòng) 。時(shí)間戳的采集和微架構(gòu)也是息息相關(guān)的。下面我們將通過案例逐一分析。

系統(tǒng)配置案例

  • 系統(tǒng)配置信息:
  1. CPU: Intel 9900KF   P1 Frequency 3.6Ghz   1-core Turbo  5.0Ghz   HT-disabled 
  2. RAM: 16GB DDR4-3200 
  3. Ubuntu 19.04:  Kernel  5.0.0-38-generic  X86_64 
  4. Boot Parameter: 
  5. BOOT_IMAGE=/boot/vmlinuz-5.0.0-38-generic 
  6. root=UUID=697aea9f-2de2-4b9c-921d-5bd5f963c91f ro ipv6.disable=1 
  7. isolcpus=7 nohz_full=7 mce=off tsc=reliable no_watchdog  irqaffinity=0 
  8. hpet=disable 
  9. quiet splash vt.handoff=1 
  • 基準(zhǔn)系統(tǒng)配置目標(biāo):

在baremetal 機(jī)器上(vt-x 環(huán)境下配置會(huì)更加復(fù)雜難以精確控制), 將 Core 7 隔離在調(diào)度器之外, 最大程度的減少各種因素對于Core 7的干擾。

  • 啟動(dòng)參數(shù)詳解:

標(biāo)有紅色的這些啟動(dòng)參數(shù)都是我們下面要來詳細(xì)分解的

  • isolcpus = managed_irq cpuslist

Isolcpus 主要是將目標(biāo)cpu 從調(diào)度器的調(diào)度算法中隔離出來。也就是說從用戶進(jìn)程的角度來說,調(diào)度器不會(huì)主動(dòng)調(diào)度任何進(jìn)程到目標(biāo)cpu上來。但是僅僅靠這個(gè)參數(shù)仍然不能保證所有軟/硬中斷和一些其他的內(nèi)核組件不會(huì)運(yùn)行在目標(biāo)的cpu上。

  • nohzfull = cpulist

這個(gè)參數(shù)還有一個(gè)相對弱化的版本nohz。nohz 的含義是在目標(biāo)cpu的runqueue上沒有任何可調(diào)度實(shí)體時(shí),cpu 進(jìn)入idle狀態(tài), 在此情況下 該cpu停止 時(shí)鐘tick(缺省是10ms一次)。那么nohzfull就更進(jìn)一步, 在runqueue上只有一個(gè)活動(dòng)的實(shí)體的時(shí)候也會(huì)停止時(shí)鐘tick。這樣就會(huì)大大減少對正在運(yùn)行的唯一的進(jìn)程的干擾(不是100%消除)。值得注意的是在非服務(wù)器版本的內(nèi)核中 nohzfull一般是沒有打開的,需要重新編譯內(nèi)核。大家可以檢查對應(yīng)的內(nèi)核編譯選項(xiàng) CONFIGNOHZFULL=y。如果沒有打開則會(huì)在啟動(dòng)日志中顯示警告。同時(shí)nohzfull 也就隱含了rcunocbs= cpulist

下圖是成功打開選項(xiàng)的日志

下圖是沒有打開編譯選項(xiàng)的報(bào)錯(cuò)信息

在內(nèi)核的Timer System 中修改選項(xiàng)

  • Nowatchdog

關(guān)閉所有的軟/硬件 死鎖監(jiān)測

  • hpet=disable, tsc= reliable

這部分主要是針對時(shí)間子系統(tǒng)。hpet=disable 主要是避免hpet產(chǎn)生過多的中斷干擾系統(tǒng)。tsc= reliable 標(biāo)記tsc 為可靠的, 減少運(yùn)行時(shí),時(shí)間源校驗(yàn)。在我們的驗(yàn)證過程中, 這個(gè)參數(shù)對于減少jitter有較大幫助

  • mce=off disable machine check to avoid interrupt

Machine checking 是一種高級的RAS 功能,對于產(chǎn)品環(huán)境非常重要, 但是對于評測環(huán)節(jié)我們先禁止掉它。

軟硬中斷的隔離

  • Disable irqblance service

我們并不希望任何硬件中斷被發(fā)送到core 7上

所以我們需要disable irqblance service

  • Take care irq affinity

硬件中斷的親和性也需要注意。

同樣是避免任何硬件中斷被發(fā)送到core 7

  • 修改

/sys/devices/virtual/workqueue/cpumask to 1

效果對比截圖

下圖是/proc/interrupts

下圖是 /proc/softirqs

下圖是htop顯示的信息, 可以觀察到core 7上的可調(diào)度實(shí)體已經(jīng)壓縮到了最少

MSR

MSR(ModelSpecific Register) 是配置處理器和獲取處理器狀態(tài)信息的關(guān)鍵接口。 MSR 主要分為兩類。

  • Per-Core MSR

         這類的MSR 的讀寫指令都必須本地的core執(zhí)行,所以要盡量避免從其它的core上來讀寫。例如 從core 7 上讀寫Core 3 。這樣LInux kernel 還需要調(diào)度這個(gè)讀寫操作到目標(biāo)core3 上來 會(huì)帶來不必要的延遲。同時(shí) 如果在用戶層(ring3)中試圖讀寫msr 也需要切換到kernel 來完成這個(gè)操作(通過IPI,CAL 中斷)。也會(huì)對應(yīng)用有干擾. 對于性能評測來說最典型的就是APERF/MPERF, 以及HWP對應(yīng)的MSR, 以及PMU的配置接口 MSR 都是Per-Core。訪問Per-MSR的延遲 無法完全避免,所以要注意采樣的頻率,防止過度采樣。

  • Un-Core MSR

            這類MSR 并不屬于任何具體的core,是公共資源。最典型的就是UNCORE_RATIO_LIMIT MSR。Un-Core MSR可以從任一core發(fā)起讀寫。只要避免從正在評測的core發(fā)起讀寫即可

            通常來講, MSR需要通過 加載內(nèi)核模塊 msr(/dev/msr), 之后通過rdmsr/wrmsr 工具來操作。

電源管理

Linuxkernel 中的電源管理主要由以下的兩個(gè)子系統(tǒng)來完成。在kernel 4.10以后, 電源管理系統(tǒng)是由調(diào)度器來觸發(fā)。

  • Cpufreq

Cpuf Freq 子系統(tǒng)主要管理在C0狀態(tài)下 處理器頻率的調(diào)整,主要由兩部分組成

Cpufreq driver

主要是針對各種不同硬件適配的對應(yīng)的調(diào)頻驅(qū)動(dòng)程序

Cpufreq governor

主要是各種不同的調(diào)頻策略

X86環(huán)境下主要有兩種選擇

acpi_cpufreq driver 以及其對應(yīng)的7種governor

見參考鏈接:

https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html

Intel_pstate driver 及其對應(yīng)的2種governor

(這是系統(tǒng)缺省的配置)

intel_pstate driver 是比較特別的驅(qū)動(dòng),相比于其它平臺(tái)。intel_pstate driver 主要是利用x86 的HWP 硬件特性來調(diào)整頻率。提供了有限的可定制策略。自動(dòng)化程度更好,overhead更少。

Sysfs entries

見參考鏈接:

https://www.kernel.org/doc/html/v4.14/admin-guide/pm/cpufreq.html

  • CpuIdle

Cpu idle 子系統(tǒng)主要管理在C1-C7狀態(tài)下 處理器idle狀態(tài)調(diào)整, 主要由兩部分組成

Cpu idle driver

主要是針對各種不同硬件適配的對應(yīng)的idle驅(qū)動(dòng)程序

Cpu idle governor

主要是各種不同的idle 時(shí)長策略

X86環(huán)境下主要有兩種選擇

acpi_idle driver

缺省是menu governor

Intel_idle driver

缺省是menu governor(這是系統(tǒng)缺省的配置, ladder 需要重新編譯內(nèi)核)

Sysfs entries(見參考鏈接)

參考鏈接:

https://www.kernel.org/doc/html/latest/admin-guide/pm/cpuidle.html

推薦的配置方法:

  1. 在BIOS中,Disable Turbo
  2. 應(yīng)用power.py[2] 腳本鎖定目標(biāo)core的頻率(或者在BIOS 中disable Pstate)
  3. 設(shè)定內(nèi)核參數(shù) intel_idle.max_cstate=1.

如果需要徹底禁止idle 推薦 processor.max_cstate=0 ,idle=poll

這里需要注意 intel_idle.max_cstate=0只是disable intel_idle driver 轉(zhuǎn)而使用acpi_idle driver

根據(jù)workload特點(diǎn) 調(diào)整 UNCORE_RATIO_LIMIT 的min/max ratio

IPI,TLB Shootdown優(yōu)化

進(jìn)程隔離會(huì)減少shootdown, 但是內(nèi)核部分做不到隔離地址空間。仍然會(huì)導(dǎo)致一定數(shù)量的tlb shootdown。 禁用 VT-X 減少 IPI.

MSR不要過采樣!因?yàn)閜er core 的MSR讀寫操作從非本地core調(diào)用,LInux 是通過IPI 調(diào)度到目標(biāo)core上執(zhí)行

除此之外, 調(diào)度算法/NUMA Aware/L3Cache QoS(RDT)/SMM-BMC/SmartEngine等模塊都會(huì)對系統(tǒng)性能測試有著噪音干擾, 敬請期待后續(xù)內(nèi)容~

Reference

  1. Intel SDM
  2. Power.py
  3. https://github.com/intel/CommsPowerManagement

https://www.kernel.org/doc/Documentation/kernel-per-CPU-kthreads.txt

 

責(zé)任編輯:武曉燕 來源: Linux閱碼場
相關(guān)推薦

2011-01-10 17:57:28

linux配置

2010-03-02 15:47:39

Linux內(nèi)核系統(tǒng)

2011-10-26 20:37:27

XManager ss

2010-03-26 16:45:12

CentOS系統(tǒng)

2010-03-02 16:51:59

Linux操作系統(tǒng)

2020-02-24 09:45:02

Bash截Linux系統(tǒng)配置

2019-10-31 16:38:57

WindowsWindows 7軟件

2009-12-22 10:15:36

Linux Apach

2010-01-06 14:56:07

Linux操作系統(tǒng)

2011-01-20 17:09:11

2010-04-22 15:44:10

Aix操作系統(tǒng)

2012-08-08 10:10:30

CentOS 6操作系統(tǒng)

2010-04-15 13:42:18

Unix操作系統(tǒng)

2009-09-29 10:39:04

Linuxlinux系統(tǒng)性能檢測

2010-01-06 15:18:19

Linux操作系統(tǒng)

2011-09-15 15:16:37

Ubuntu軟件

2010-02-02 17:46:43

Fedora vsft

2009-12-09 14:45:42

2009-12-17 13:20:46

路由器配置

2010-01-13 15:17:18

VirtualBox安
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)