Linux kernel 性能優化(二)CPU 術語

CPU的使用很大程度上是依賴於什麼資源試圖使用它。內核有個調度器是用來調度兩種資源:線程(單線程或多線程)和中斷。調度器給予不同的資源不同的優先級。以下是從高到低的優先級排列:
• 硬件中斷 --
這些請求是系統硬件產生。比如說,磁盤可能會在IO傳輸結束後產生一箇中斷信號或者一個NIC可能會在收到一個數據包後產生一箇中斷。
•軟中斷 --
這些內核軟件中斷是用來維護內核。比如內核時鐘滴答的讀取是一個軟中斷。它用來確保一個進程沒有超過處理器所分配給改進程的時間。

•實時線程 --

實時線程比內核本身有更高的優先級。一個實時進程可能會佔用一個CPU並且搶佔內核。

•內核線程 --
所有的內核線程都在這個優先級上被處理。
•用戶線程 --
這個空間更經常被認爲是“userland"。所有個軟件應用都在用戶空間上運行。這個空間是在內核調度策略中最低優先級的。

爲了搞清楚內核如何管理這些不同的資源,一些概念需要被介紹。以下會介紹上下文切換,運行隊列,以及使用率。

2.1 上下文切換
大部分的現代處理器都是隻能一次運行一個線程。n-way 超線程處理器擁有同時跑n個線程的能力。然而Linux內核視雙核處理器上的每一個處理器核爲一個獨立的處理器。一個標準的Linux內核可以同時運行50 ~ 50,000個進程。由於只有一個CPU,內核需要調度和平衡這些處理器線程。每個線程有個使用CPU的時間片。一旦一個線程運行超過了時間片或者被更高優先級(譬如硬件中斷)的資源搶佔,這個線程就會在更高優先級的線程使用CPU的時候被放進一個隊列。這個進程切換過程被稱做上下文切換。
每一次內核進行上下文切換時,資源被用來將進程從CPU寄存器上移動到一個隊列中。一個系統中的上下文切換越多,內核就需要花費更多在管理進程調度上。

2.2 運行隊列
每個CPU都維護一個進程運行隊列,理想中,調度器應該持續得運行閉關你且執行線程。進程要不就在休眠狀態(被阻塞和等待IO)或者就是可運行狀態。如果CPU子系統被高度佔用,有可能內核調度器就無法跟上系統的需求。結果就是,可運行進程開始不斷地填入雲習慣你對列,運行隊列越長,需要花費的執行時間就越長。一個流行的術語”負載“就是用來描述運行隊列的狀態。系統負載是當前執行的進程和運行隊列中的進程的累加。如果兩個進程正在一個雙核系統上執行並且有四個在運行隊列中,那麼負載就是六。

2.3 CPU使用率
CPU使用率是用來定義CPU的使用百分比。這是一個重要的衡量系統的依據。大部分性能監控工具會將CPU使用率歸類爲以下幾個目錄:
•用戶時間 -- 在用戶空間上執行進程的時間比例
•系統時間 -- 在執行內核進程以及中斷的時間比例、
•IO等待 -- CPU空閒,但是是因爲線程被阻塞在等待IO請求結束。
• 空閒 -- CPU完全空閒的狀態

2.4 時間片Time Slicing
時間片是代表一個進程在被搶佔之前可以使用的時間。調度策略必須給出一個默認的時間片,並不簡單。時間片如果設置成太長就會導致系統的交互性能變差;系統就不再會感覺到這些應用是同時被執行的。如果時間片太短,那麼大量的時間都會被用來花費在上下文切換。而且,I/O消耗和處理器消耗的衝突目標就更加明顯;I/O 消耗處理器不再需要長時間片,然而處理器消耗型進程卻渴望時間片。

2.5 優先級 Priorities
一個通常的調度算法是基於優先級的調度。這個概念是將進程根據他們的價值和需要的處理器時間來排序。高優先級的進程將會比低優先級的進程先運行,相同優先級的進程將被循環調度。在包括Linux的一些系統上,高優先級的進程將會得到較長的時間片。內核和用戶空間都會設置進程優先級來影響系統的進程調度行爲。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章