例如:linux
#查看內核一秒鐘中斷CPU次數 [root@xuegod70 ~]# grep HZ /boot/config-3.10.0-693.el7.x86_64 CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set # CONFIG_NO_HZ_IDLE is not set CONFIG_NO_HZ_FULL=y # CONFIG_NO_HZ_FULL_ALL is not set CONFIG_NO_HZ=y # CONFIG_RCU_FAST_NO_HZ is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set CONFIG_HZ_1000=y CONFIG_HZ=1000 #1秒鐘有1000次中斷 CONFIG_MACHZ_WDT=m 注: 此文件/boot/config-3.10.0-693.el7.x86_64 是編譯內核的參數文件
調整進程nice值,讓進程使用更多的CPU
優先級控制:
nice值 #範圍, -20 ~ 19 越小優先級越高 普通用戶0-19
nice
做用:以什麼優先級運行進程 。默認優先級是0
語法: nice -n 優先級數字 命令
例:vim
[root@xuegod63 ~]# nice -n -5 vim a.txt # vim進程以-5級別運行 查看: [root@xuegod63 ~]# ps -axu | grep a.txt [root@xuegod63 ~]# ps -axu | grep a.txt Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 24318 0.0 0.2 143624 3280 pts/4 S+ 17:00 0:00 vim b.txt [root@xuegod63 ~]# top -p 24318 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 24219 root 15 -5 140m 3336 2200 S 0.0 0.3 0:00.08 vim 檢測一下範圍: -20 - 19 renice #修改正在運行的進程的優先級 #renice -n 5 PID #修改進程優先級 [root@xuegod63 ~]# renice -n -21 24219 24219: old priority -20, new priority -20
taskset 做用:在多核的狀況下,能夠認爲指定一個進程在哪顆CPU上執行程序,減小進程在不一樣CPU以前切換的開銷。bash
安裝: [root@xuegod63 ~]# rpm -qf `which taskset ` util-linux-2.23.2-43.el7.x86_64
語法: taskset -c N 命令
例1:本機是4核CPU ,指定vim命令在第一個CPU上運行服務器
[root@xuegod63 ~]# taskset -c 0 vim a.txt #1號CPU ID是0 [root@xuegod63 ~]# ps -axu | grep vim Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 2614 1.3 0.2 143696 3332 pts/0 S+ 18:39 0:00 vim a.txt [root@xuegod63 ~]# taskset -p 2614 # -p 要查看的進程ID pid 2614's current affinity mask: 1 #CPU親和力掩碼,1表明第一個CPU核心
例2:查sshd進程運行在哪幾個CPU上 架構
[root@xuegod63 ~]# ps -axu | grep sshd Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 2030 0.0 0.0 64068 1140 ? Ss 18:26 0:00 /usr/sbin/sshd [root@xuegod63 ~]# taskset -p 2030 pid 2030's current affinity mask: f #說明sshd在4顆CPU上隨機進行切換。 說明: Cpu ID 號碼,對應的16進制數爲: CPU ID: 7 6 5 4 3 2 1 0 對應的10數爲: 128 64 32 16 8 4 2 1 當前, 個人系統中cpu ID 的爲(0,1,2,3) pid 2030's current affinity mask: f 的值爲cpu ID 16進制的值的和(1+2+4+8=f),轉換成二進制爲:1111 這個說明了(pid=2030)的這個sshd進程工做在cpu ID 分別爲0,1,2,3這個四個cpu上面的切換。 注: 咱們的CPU是4核心,因此taskset -c後能夠跟: 0,1,2,3 例:指定vim c.txt 程序運行在第2和第4個CPU上 [root@xuegod63 ~]# taskset -c 1,3 vim b.txt [root@xuegod63 ~]# ps -axu | grep vim Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 6314 1.5 0.2 143612 3280 pts/1 S+ 14:41 0:00 vim b.txt root 6317 0.0 0.0 103300 848 pts/2 S+ 14:41 0:00 grep vim [root@xuegod63 ~]# taskset -p 6314 pid 6314's current affinity mask: a # a爲十進制的10=2+8 注:在哪一個CPU上運行,那一位就賦爲1 。
理解運行隊列,利用率,上下文切換對怎樣CPU 性能最優化之間的關係,早期說起到性能是相對於基準線數據的,在一些系統中,一般預期所達到的性能包括:
Run Queues 每一個處理器應該運行隊列不超過13 個線程.
例如: 一個雙核處理器應該運行隊列不要超過6 個
注:有兩個特殊的進程永遠在運行隊列中待着:當前進程和空進程idle。ssh