Cpu調優
分時作業系統按照相等的時間片排程程序輪流運作,分時作業系統由排程程式自動計算程序的優先級,而不是由使用者控制程序的優先級。這樣的系統無法實時響應外部異步事件。分時系統主要應用于科學計算和一般實時性要求不高的場合。實時性系統主要應用于過程控制、資料采集、通信、多媒體資訊處理等對時間敏感的場合。一台中型機(或者小型機)帶着一大堆終端,然後輪流響應各終端的請求,就是一個典型的分時系統。
我們将CPU就類比為電話亭,每一個程序都是一個需要打電話的人。現在一共有4個電話亭(就好比我們的機器有4核),有10個人需要打電話。現在使用電話的規則是管理者會按照順序給每一個人輪流配置設定1分鐘的使用電話時間,如果使用者在1分鐘内使用完畢,那麼可以立刻将電話使用權返還給管理者,如果到了1分鐘電話使用者還沒有使用完畢,那麼需要重新排隊,等待再次配置設定使用。
實時作業系統能夠在限定的時間内執行完所規定的功能,并能在限定的時間内對外部的異步事件作出響應。實時系統主要用在工業控制或者訂票等方面,對響應速度要求非常高的場合從作業系統能否滿足實時性要求來區分,可把作業系統分成分時作業系統和實時作業系統。
# top
top - 22:14:02 up 22:06, 12 users, loadaverage: 1.00, 0.66, 0.30
系統平均負載: 1分鐘 5分鐘 15分鐘
系統平均負載被定義為在特定時間間隔内運作隊列中的平均程序數。如果一個程序滿足以下條件則其就會位于運作隊列中:
-它沒有在等待I/O操作的結果
-它沒有主動進入等待狀态(也就是沒有調用'wait')
-沒有被停止(例如:等待終止)
一般來說隻要每個CPU的目前活動程序數不大于3那麼系統的性能就是良好的,如果每個CPU的任務數大于5,那麼就表示這台機器的性能有嚴重問題。但具體要看應用,一般推薦與CPU核數相當,例:8核CPU,每個應用跑滿了50%,可以跑16個程序,但是也要考慮到突發量
程序優先級
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 18684 32381 0 75 0 - 1196 wait pts/4 00:00:00 bash
4 R 0 19442 18684 0 77 0 - 1115 - pts/4 00:00:00 ps
NI0 ------- PRI 80
檢視實時程序的優先級
# chrt -p 2
pid 2's current scheduling policy:SCHED_FIFO
pid 2's current scheduling priority: 99
檢視程序排程政策
# chrt -m
SCHED_OTHER min/max priority : 0/0 非實時程序
SCHED_FIFO min/max priority : 1/99 實時程序
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
程式以實時程序方式運作
# chrt --fifo 10 ./a.sh
程式的并發執行
程序和線程
程序:單線程程序(資料獨享,無競争問題,建立撤銷成本高)
線程:多線程程序(資料共享,寫競争問題,建立撤銷成本低)
單核與多核
單核區分I/O消耗還是CPU消耗
多核并發,可以綁定CPU執行
taskset 把任務綁定在指定CPU執行(CPU親和力)
# taskset -p 1
pid 1's current affinity mask: 1
# taskset -c 1 ./a.sh
檢視已經注冊的中斷
# cat /proc/interrupts
每秒中的中斷數kernel-xen250 kernel 1000
希望程序吞吐量高少
希望響應速度快多
可以編譯核心做調整
增大網絡響應,修改網卡中斷,交給多個核心處理
cat /proc/irq/num/smp_affinity
# cat /proc/irq/67/smp_affinity
00000001
CPU下線
# cat /sys/devices/system/cpu/cpu1/online
系統調優5賤客mpstat、vmstat、iostat netstat、sar (安裝sysstat)
# mpstat
Linux 2.6.18-194.el5 (localhost.localdomain)04/01/2012
12:59:14 AM CPU %user %nice %sys %iowait%irq %soft %steal %idle intr/s
12:59:14 AM all 2.47 0.11 1.89 0.45 0.080.07 0.00 94.93 1016.79
# mpstat -p ALL 1 10
安裝sysstat後會使用自動化任務收集系統資訊
# cat /etc/cron.d/sysstat
# run system activity accounting tool every10 minutes
*/10 * * * * root /usr/lib/sa/sa1 1 1
# generate a daily summary of processaccounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A
Gnuplot
# sar -f /var/log/sa/sa01 >/tmp/sar.log
# yum install gnuplot
# vim ./gnuplot.sh
#!/bin/bash
gnuplot << EOF
set xdata time
set timefmt "%H:%M:%S"
set terminal gif size 640,480
set output "/tmp/cpu.gif"
set title "CPU of STATUS"
set xlabel "TIME"
set ylabel "user、system、iowait"
set grid
plot "/tmp/sar.log" using 1:3title "user" with lines , "/tmp/sar.log" using 1:5 title"system" with lines , "/tmp/sar.log" using 1:4 title"iowait" with lines
EOF
# eog /tmp/cpu.gif
本文轉自潘闊 51CTO部落格,原文連結:http://blog.51cto.com/pankuo/1392497,如需轉載請自行聯系原作者