在 linux 中,使用者態程序的「祖先」,都是 pid 號為 1 的 init 程序。
現在主流的 linux 發行版中,init 都是 systemd 程序;而其他的使用者態程序,會通過 systemd 來進行管理。
linux 中的各種程序,除了使用者態程序外,還有大量的核心態執行緒。那麼,核心態執行緒又是誰來管理的呢?
實際上,linux 在啟動過程中,有三個特殊的程序,也就是 pid 號最小的三個程序。
0 號程序為 idle 程序,這也是系統建立的第乙個程序,它在初始化 1 號和 2 號程序後,演變為空閒任務。當 cpu 上沒有其他任務執行時,就會執行它(swapper->空閒任務,當系統中沒有任務時,perf追蹤可以看到其使用率為99%)。
1 號程序為 init 程序,通常是 systemd 程序,在使用者態執行,用來管理其他使用者態程序。
2 號程序為 kthreadd 程序,在核心態執行,用來管理核心執行緒。
常用的核心執行緒:
kswapd0:根據頁低閾值(min_free_bytes)的配置,定期**記憶體
ksoftirqd:處理軟中斷的核心執行緒,每個cpu都有乙個,當看到此執行緒對cpu使用率較高時,意味著系統在進行大理的軟中斷操作,效能會有問題
kworker:用於執行核心工作佇列,分為繫結 cpu (名稱格式為 kworker/cpu86330)和未繫結 cpu(名稱格式為 kworker/upool86330)兩類。
migration:在負載均衡過程中,把程序遷移到 cpu 上。每個 cpu 都有乙個 migration 核心執行緒。
jdb2/sda1-8:jbd 是 journaling block device 的縮寫,用來為檔案系統提供日誌功能,以保證資料的完整性;名稱中的 sda1-8,表示磁碟分割槽名稱和裝置號。每個使用了 ext4 檔案系統的磁碟分割槽,都會有乙個 jbd2 核心執行緒。
pdflush:用於將記憶體中的髒頁(被修改過,但還未寫入磁碟的檔案頁)寫入磁碟(已經在 3.10 中合併入了 kworker 中)。
? 注:當核心執行緒使用cpu較高時,可以使用perf對其進行追蹤分析
Linux核心執行緒記錄
在 linux 中,使用者態程序的 祖先 都是 pid 號為 1 的 init 程序。現在主流的 linux 發行版中,init 都是 systemd 程序 而其他的使用者態程序,會通過 systemd 來進行管理。linux 中的各種程序,除了使用者態程序外,還有大量的核心態執行緒。那麼,核心態執...
Linux核心執行緒
核心執行緒是直接由核心來啟動的程序,通常也稱為守護程序,用於執行下列任務 記憶體頁很少使用時,換出。管理延時的動作。實現檔案系統的事務日誌。週期性的將修改的記憶體頁與頁 塊裝置同步。其它。核心執行緒按照工作方式可以分為兩種型別 執行緒啟動後一直在等待,直到核心請求執行緒執行某一特定操作。執行緒啟動後...
linux建立執行緒 建立Linux核心執行緒
執行緒 thread 是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。乙個執行緒指的是程序中乙個單一順序的控制流,乙個程序中可以併發多個執行緒,每個執行緒並行執行不同的任務。很多時候會需要在後台執行一些任務,比如做乙個需要實時監控某個模組狀態的debug功能,這種任...