Revision History
Version | Date | Author | Description |
1.0 | 2011/5/26 | dengwu@taobao.com | 初稿 |
1.1 | 2011/6/23 | dengwu@taobao.com | 添加CPU分析 |
1.2 | 2012/2/20 | dengwu@taobao.com | 添加MEM,IO分析 |
1.3 | 2012/2/23 | dengwu@taobao.com | 更新工作原理 |
1.4 | 2012/2/25 | dengwu@taobao.com | 添加中斷分析 |
1.5 | 2012/2/28 | dengwu@taobao.com | 添加網絡分析 |
性能測試的過程就是找到系統瓶頸的過程。
性能測試(包括分析和調優)的過程就是在操作系統的各個子系統之間取得平衡的過程。
操作系統的各個子系統包括:
CPU
Memory
IO
Network
他們之間高度依賴,互相影響。比如:
1. 頻繁的磁盤讀寫會增加對內存的使用
2. 大量的網絡吞吐,一定意味著非??捎^的CPU利用率
可用內存的減少可能增加大量的swapping,從而使系統負載上升甚至崩潰
2 應用程序類型
性能測試之前,你首先需要判斷你的應用程序是屬于那種類型的,這可以幫助你判斷哪個子系統可能會成為瓶頸。
通??煞譃槿缦聝煞N:
CPU bound – 這類程序,cpu往往會處于很高的負載,當系統壓力上升時,相對于磁盤和內存,往往CPU會首先到達瓶頸。Web server,mail server以及大部分服務類程序都屬于這一類。
I/O bound – 這類程序,往往會頻繁的訪問磁盤,從而發送大量的IO請求。IO類應用程序往往利用cpu發送IO請求之后,便進入sleep狀態,從而造成很高的IOWAIT。數據庫類程序,cache服務器往往屬于這種類型。
3 CPU
3.1 性能瓶頸
3.1.1 運算性能瓶頸
作為計算機的計算單元,其運算能力方面,可能出現如下瓶頸:
1. 用戶態進程CPU占用率很高
2. 系統態(內核態)CPU占用率很高
測試CPU的運算性能,通常是通過計算圓周率來測試CPU的浮點運算能力和穩定性。據說Pentium CPU的一個運算bug就是通過計算圓周率來發現的。圓周率的計算方法,通常是計算小數點后104萬位,通過比較運算時間來評測CPU的運算能力。
常用工具:
SUPER PI(π)
Wprime 與SuperPI不同的是,可以支持多核CPU的運算速度測試
FritzChess 一款國際象棋測試軟件,測試每秒鐘可運算的步數
突破CPU的運算瓶頸,一般只能靠花錢。比如提高時鐘頻率,提高L1,L2 cache容量或不斷追求新一代的CPU架構:
Core -> Nehalem(E55x,如r710,dsc1100) -> Westmere –> Sandy Bridge
3.1.2 調度性能瓶頸
CPU除了負責計算之外,另一個非常重要的功能就是調度。在調度方面,CPU可能會出現如下性能瓶頸:
Load平均值超過了系統可承受的程度
IOWait占比過高,導致Load上升或是引入新的磁盤瓶頸
Context Switch過高,導致CPU就像個搬運工一樣,頻繁在寄存器(CPU Register)和運行隊列(run queue)之間奔波
硬中斷CPU占比接近于100%
軟中斷CPU占比接近于100%
超線程
超線程芯片可以使得當前線程在訪問內存的間隙,處理器可以使用它的機器周期去執行另外一個線程。一個超線程的物理CPU可以被kernel看做是兩個獨立的CPU。
3.2 典型監控參數
3.2.1 參數含義
Load
Load是指CPU所有內核正在處理的任務加上處于等待隊列中的進程數之和。
處于等待隊列(run queue)中的進程包括TASK_RUNNING 和 TASK_UNINTERRUPTIBLE兩種狀態的任務:
? 處于可運行狀態的進程
? 等待不可中斷任務的進程
在一個雙核的系統中,如果兩個進程正在執行,有四個進程處于run quque當中,那么load就是6
Nice%
用戶進程空間內,通過調用nice或setpriority系統調用改變過優先級的進程的CPU占用率
Iowait%
CPU等待IO操作的時間
Idle%
CPU空閑時間
Intr/s
原文轉自:http://www.anti-gravitydesign.com