詳解Linux性能調優之tuned特性
tuned簡介
對普通用戶而言,Linux應用環境優化是比較困難的。領域多,範圍廣:CPU、存儲、緩存策略、內存管理等涉及的參數。Linux內部雖然有默認設置值,可以應對大多數的情況場景,但是針對一些特殊場景,例如高性能、高並發和高可用的系統,就需要我們進行調整。本文介紹的tuned特性就是目前Linux系統上常用的一種調優特性。
tuned特性由tuned和tuned-adm兩個程序組成。其中 tuned是服務端程序,用來監控和收集系統各個組件的數據;tuned-adm是客戶端程序,用命令行的方式管理和配置 tuned。
tuned提供了一些預先配置的優化策略(profile)可供直接使用,比如:虛擬機-主機、虛擬機-客戶機、節能等優化場景。當然不同的系統和應用場景有不同的優化方案,tuned預先配置的優化策略不是總能滿足要求,因此tuned還允許用戶自己創建和定製新的調優方案。
中移軟體的BC-Linux操作系統目前就支持tuned特性並使用其進行調優。
tuned的子系統
tuned子系統是相互獨立運行的,合作組成tuned的調優方案。每個子系統可以支持多個設備(每台設備可能有多個cpu、網卡等設備),並且每個設備可以使用單獨的實例控制。
CPU
CPU子系統主要實現兩個功能:
1. 設置CPU governor的值為配置文件中 「governor」 參數的值;CPU governor是內核的CPU頻率管理器,通過參數來對CPU的頻率進行調節,主要是以下幾種參數:
參數
名稱
更新
performance
性能
強制 CPU 儘可能使用最高的時鐘頻率
powersave
省電
強制 CPU 儘可能使用最低的時鐘頻率
ondemand
按需
系統負載高時,CPU 使用最高的時鐘頻率;系統空閑時,CPU 使用最低的時鐘頻率
userspace
用戶態
允許用戶或用戶態程序自行設置時鐘頻率
conservative
保守
類似 ondemand,區別是它根據是否適合負載來調整時鐘頻率,而不是簡單的在最高和最低之間選擇
CPU 的governor可以使用如下命令查看:
# cpupower --cpu all frequency-info --governors
查看目前支持的governor
# cpupower --cpu all frequency-info --policy
查看正在使用的governor
2. 根據CPU的負載動態的調節PM QoS CPU DMA延遲。當CPU負載低於 「load_threshold」 參數時,延遲被設為 「latency_high」 參數的數值,否則的話設為 「latency_low」。如果不希望動態調節延遲,可以通過設置 「force_latency」 參數,將延遲固定。
VM
內存子系統主要調節系統的內存參數。
根據 「transparent_hugepages」 參數的值設置huge page(巨頁)功能;
參數
說明
always
嘗試為任意進程分配巨頁
madvise
利用 madvise() 系統調用只為個別進程分配巨頁
never
禁用透明巨頁
# cat /sys/kernel/mm/transparent_hugepage/enabled
查看系統的巨頁配置
此外內存子系統還可以設置系統參數,也就是「/proc/sys/vm」路徑下的內存參數,比較常用的有以下幾種,其餘的也可根據需要配置:
vm.dirty_background_ratio: 設置 dirty pages 開始後台回寫時的百分比
vm.dirty_ratio: 設置 dirty pages 開始回寫時的百分比
vm.swappiness: 控制從物理內存換出到交換空間的相對權重,取值為0到100,更低的值導致避免交換,而更高的值導致嘗試使用交換空間
DISK
磁碟子系統主要調節磁碟的IO性能。
可以調節IO調度器的調度演算法:
參數
名稱
說明
cfq
完全公平隊列調度
試圖給所有進程提供一個完全公平的IO操作環境,將進程分為實時、盡其所能和空閑三個獨立的類別。是內核的默認調度演算法,對通用伺服器和桌面用戶都是較好的IO調度演算法選擇,但不適用IO壓力集中在某些進程上的場景
deadline
最終期限調度
嘗試為 I/O 請求提供有保障的延遲。適用於IO壓力集中在某些進程上的場景,如資料庫
noop
空操作調度
執行簡單的 FIFO調度演算法,並實現請求合併。適合使用快速存儲的 CPU 計算密集型系統
blk-mq
多隊列塊IO隊列機制
利用具有多核的CPU來映射 I/O 隊列到多隊列,與傳統的 I/O 調度器相比,通過多線程及多個CPU核心來分發任務,從而能夠加速讀寫操作。調度器適合高性能的快閃記憶體設備
# cat /sys/block/sda/queue/scheduler
查看系統的IO調度演算法
磁碟子系統也可以調節內核的磁碟參數,也就是「/proc/sys/kernel」路徑下的參數,比較常用的是以下幾種:
kernel.sched_min_granularity_ns: 針對CPU 計算密集型任務設置調度器的最小搶佔粒度
kernel.sched_wakeup_granularity_ns: 設置調度器的喚醒粒度,這將延遲搶佔效應,並減少過度調度
kernel.sched_migration_cost_ns: 調度器認為遷移的進程「cache hot」因而更少可能被重新遷移的總時間
此外磁碟子系統還可以配置磁碟電源策略,通過ALPM磁碟電源管理工具實現,對應 「alpm」 參數,用於降低磁碟功耗;也可以動態調整先進電源管理和磁碟spindown的超時時間。
NET
網路子系統主要調節網路性能和功耗:
1. 可以調節網路參數,常用的有以下幾種:
2. 根據網口的使用情況動態調整網口的速度,默認網口會一直保持在高速運行,可以降低功耗;
3. 根據 「wake-on-lan」 參數,配置wake-on-lan功能。Wake-On-LAN簡稱WOL,是一種電源管理功能,允許通過網路將設備從待機或休眠模式中喚醒。
其他子系統
sysctl
子系統主要使用sysctl工具來進行系統配置,相當於修改sysctl.conf配置文件。語法格式是 「name=value」 ,name就是sysctl工具的條目,value則是配置參數。
eeepc_she
根據CPU負載動態調節FSB的頻率(FSB--前端匯流排,是連接CPU和北橋晶元的匯流排),可以降低功耗。
usb
根據 「autosuspend」 參數設置USB設備自動掛起的超時時間,0表示關閉USB設備自動掛起。
audio
根據 「timeout」 參數設置音頻解碼設備的自動掛起超時時間,0表示關閉自動掛起。
mounts
根據「disable_barriers」參數開/關mounts的barrier特性,打開barrier特性次文件系統日誌記錄會更加可靠,但是會降低一些性能。
sysfs
通過設置sysfs路徑下的相關參數進行系統性能調節,語法格式是 「name=value」 ,name就是sysfs路徑的條目,value則是配置參數。
tuned提供的profiles
tuned會預先配置的一些優化策略,下面依次介紹下:(基於BCLinux7.3系統自帶的tuned 2.7.1版本,不同的版本可能會有差別,具體可以查看 /usr/lib/tuned 目錄下各策略的 tuned.conf文件確定)
策略名
主要優化內容
說明
balanced
governor參數」conservative」
alpm參數為」 medium_power」
默認的節能策略,追求功耗和性能的平衡,只對CPU和磁碟做了調節
powersave
governor參數」 ondemand」
alpm參數為」 min_power」
vm.dirty_writeback_centisecs參數1500
關閉watchdog
其他:wifi和usb的功耗優化選項
最節能的策略
throughput-performance
governor參數」 performance」
關閉alpm
readahead設置為4096
vm.swappiness設為10
vm.dirty_background_ratio和dirty_ratio分別設為10和40
sched_min_granularity設為10ms
sched_wakeup_granularity設為15ms
禁用節能配置,啟用sysctl模塊設置來提升性能,主要改善吞吐量,使用deadline的IO調度策略(默認CFQ)
latency-performance
governor參數」 performance」
force_latency參數為1
關閉alpm
vm.swappiness設為10
vm.dirty_background_ratio和dirty_ratio分別設為10和3
sched_min_granularity設為10ms
sched_migration_cost設為5ms
禁用節能配置,啟用sysctl模塊設置來提升性能,主要改善延遲
virtual-host
在throughput-performance策略基礎上,修改了vm. dirty_background_ratio為5;sched_migration_cost設為5ms
適用於虛擬機的host設備,基於throughput-performance策略
virtual-guest
在throughput-performance策略基礎上,修改了vm.dirty_ratio為30;vm.swappiness設為30
適用於作為虛擬機客戶機運行的設備,基於throughput-performance策略
desktop
在balanced策略基礎上修改kernel.sched_autogroup_enabled為1
適用於桌面設備,基於balanced策略
network-throughput
在throughput-performance策略基礎上,設置了sysctl裡面net.ipv4下tcp_rmem、tcp_wmem和udp_mem參數
優化網路吞吐量,基於throughput-performance策略
network-latency
在throughput-performance策略基礎上,
關閉hugepage特性
設置busy_read參數為50
設置busy_poll參數為50
設置.tcp_fastopen參數為3
優化網路延遲,基於latency-performance策略
tuned使用說明
Redhat7和centos7默認安裝並啟動了tuned服務,如果沒有的話可以手動安裝和啟動:
# yum install tuned -- 安裝tuned
# service tuned start -- 啟動tuned服務
# service tuned status -- 查看tuned狀態
對tuned的操作主要通過tuned-adm命令實現。
查看所有可用的profiles和當前使用的profile:
# tuned-adm list
Available profiles:
- balanced - General non-specialized tuned profile
- desktop - Optmize for the desktop use-case
- latency-performance - Optimize for deterministic performance…………
- network-latency - Optimize for deterministic performance …………
- network-throughput - Optimize for streaming network throughput. …………
- powersave - Optimize for low power consumption
- throughput-performance - Broadly applicable tuning that provides…………
- virtual-guest - Optimize for running inside a virtual guest.
- virtual-host - Optimize for running KVM guests
Current active profile: virtual-guest
只查看當前使用的profile:
# tuned-adm active
Current active profile: virtual-guest
切換profile:
tuned-adm profile
# tuned-adm profile balanced
# tuned-adm active
Current active profile: balanced
關閉優化策略,關閉之後可以使用「tuned-adm profile」命令重新打開優化策略:
# tuned-adm off
查看系統推薦的profile,這個優化策略也就是安裝並啟動tuned服務之後,tuned自動設置使用的profile:
# tuned-adm recommend
virtual-guest
自定義profile
不同的系統和應用場景有不同的優化方案,tuned-adm預先配置的優化策略不是總能滿足要求,因此tuned允許用戶自己創建和定製新的調優方案。
tuned預定義的profile的配置文件在/usr/lib/tuned目錄,用戶自定義的profile目錄是/etc/tuned。
自定義調優方案步驟很簡單:
首先,在/etc/tuned目錄下創建一個目錄,名稱就是自定義profile的名稱;
# mkdir myProfile
# ls
active_profile bootcmdline myProfile tuned-main.conf
然後,在自定義profile目錄下編寫配置文件」 tuned.conf」,可以從/usr/lib/tuned複製一個預定義的配置文件過來,然後進行修改,也可以直接創建一個;
# cd myProfile/
# ls
tuned.conf -- 自定義策略myProfile的優化配置文件
一個簡單的配置文件格式如下:
# more desktop/tuned.conf
#
# tuned configuration
#
[main] -- main段
summary=Optmize for the desktop use-case -- profile的介紹
include=balanced -- 包含的profile,也就是基於此profile做些調整
[sysctl] -- sysctl子系統
kernel.sched_autogroup_enabled=1 -- 需要修改的參數
最後,使用」 tuned-adm list」查看,自定義的策略可以使用了。
# tuned-adm list
Available profiles:
………………
- myProfile - My profile for test
………………
Current active profile: virtual-guest
總結
tuned特性主要還是使用linux系統現有的一些調節手段和工具,包括電源管理工具,CPU、內存、磁碟等內核參數調整的方式,並將其整合到一個具體的策略(profile)中進行系統的性能調節。
BC-Linux操作系統的用戶用戶可以根據不同的使用場景和需求,使用現有的策略或者自定義一些策略很方便的對系統的性能進行設置,極大的簡化對操作系統的性能調節。
END
TAG:蘇研大雲人 |