在linux中,程序的狀態有2種:
可執行的:如果程序是可執行的,那就意味著它要和其它也是可執行的程序競爭cpu時間。
阻塞的:正在等待乙個事件的完成,阻塞程序可能在等待的是從i/o裝置來的資料,或者是系統呼叫的結果。
乙個可執行的程序不一定會使用cpu,但是當linux排程器決定下乙個要執行的程序時,它會從可執行的程序佇列種挑選。如果程序是可執行的,同時又在等待使用處理器,這些程序就構成了執行佇列。執行的佇列越長,處於等待狀態的程序就越多。效能工具通常會給出可執行的程序個數和等待i/o的阻塞程序個數。
處理器一次只能執行乙個程序或執行緒。雖然有些處理器(比如超執行緒處理器)實際上可以同時執行多個程序,但是linux會把他們看作多個單執行緒處理器。如果要製造出給定單處理器同時執行多個任務的假象,linux核心就要不斷地在不同程序間切換。這種不同程序間的切換叫做上下文切換。
**上下文切換的開銷是非常大的。**因為當其發生時,cpu要儲存舊程序的大量資訊,包括程序正在執行的指令,分配給程序的記憶體,程序開啟的檔案等。這些上下文切換涉及大量資訊的移動,因此儘量減少上下文切換的次數是個好主意。
要避免上下文切換,重要的一點是了解他們如何發生的。首先,上下文切換可以是**核心排程的結果。**為了保證公平地給每個程序分配處理器時間,核心周期性地中斷正在執行的程序,在適當的情況下,核心排程器會決定開始另乙個程序,而不是讓當前程序繼續執行。每次這種週期性中斷或定時發生時,系統都可能進行上下文切換。每秒定時中斷的次數與架構和核心版本有關。
乙個檢測中斷頻率的簡單方法是用/proc/interrupts 檔案,它可以確定已知時長內發生的中斷次數。
[root@node1 ~]@ cat /proc/interrupts |
grep timer;
sleep 10;
cat /proc/interrupts |
grep timer
0: 115 io-apic-edge timer
loc: 276061 local timer interrupts
0: 115 io-apic-edge timer
loc: 276243 local timer interrupts
此外,處理器還周期性地從硬體裝置接受中斷。當裝置有事件需要核心處理時,它通常就會觸發這些中斷。比如,如果磁碟控制器剛剛完成從驅動器取資料塊的操作,並準備好提供給核心,那麼磁碟控制器就會觸發乙個中斷。這些中斷處理程式在系統種具有很高的執行優先順序,並且通常執行速度也很快。有時,中斷處理程式有工作要做,但是又不愮高優先順序,因此它可以啟動「下半部」,也就是所謂的軟中斷處理程式。如果有很多中斷,核心會花大量的時間服務這些中斷。檢視/proc/interrupts檔案可以顯示哪些cpu上觸發了哪些中斷。
在任何給定的時間內,cpu可以執行以下七件事情中的乙個:
cpu可以是空閒的,這意味著處理器實際上沒有任何工作,並且等待有任務可以執行。
cpu可以執行使用者**,即指定的「使用者」時間
cpu可以執行linux核心中的應用程式**,這就是「系統」時間;
cpu可以執行「比較友好」的或者優先順序被設定為低於一般程序的使用者**。
cpu可以處於iowait狀態:即系統正在等待i/o(如磁碟或網路)完成。
cpu可以處於irq狀態,即它正在用高優先順序**執行處理硬體中斷。
cpu可以處於softirq模式,即系統正在執行同樣由中斷觸發的核心**,只不過其執行於較低優先順序。
大多數效能工具將這些數值表示為佔cpu總時間的百分比。這些時間的範圍從0%到100%,但全部三項加起來等於100%。
如果系統在應該工作的時候花費了大量的時間處於iowait狀態,那它可能等待來自裝置的i/o。導致速度變慢的原因是磁碟、網絡卡或其它裝置。
Linux系統效能分析
b linux中需要監控的資源主要有 cpu 主存 記憶體 硬碟空間 i o時間 網路時間 應用程式等。b b 影響系統效能的主要因素有 b table 因素 說明 使用者態cpu cpu在使用者態執行使用者程式所花費的時間,包括庫呼叫,但是不包括核心花費的時間。核心態cpu cpu在核心態執行系統...
系統效能分析
當系統變慢時候,我們首先關注的可能是cpu的指標,有時候發現cpu使用率一點都不高,但是系統還是卡,這時可能就需要關心另外乙個影響效能的東西 磁碟的io效能。通過top命令中的 wa可以獲取系統當前的io狀態,如果該值居高不小,那磁碟的io可能就有問題了。另外可以通過iotop命令來詳細了解什麼程式...
系統效能分析
系統的整體效能取決於各種資源的平衡,類似木桶理論,某種資源的耗盡會嚴重阻礙系統的效能。linux中需要監控的資源主要有 cpu 主存 記憶體 硬碟空間 i o時間 網路時間 應用程式等。統效能的主要因素有 因素 說明使用者態cpu cpu在使用者態執行使用者程式所花費的時間,包括庫呼叫,但是不包括核...