Centos系統 上下文切換的檢查思路

2022-08-02 16:00:20 字數 1468 閱讀 2534

上下文切換,有時也稱做程序切換或任務切換,是指cpu從乙個程序或執行緒切換到另乙個程序或執行緒。

作業系統可以同時執行多個程序, 然而一顆cpu同時只能執行一項任務,作業系統利用時間片輪轉的方式,讓使用者感覺這些任務正在同時進行。 cpu給每個任務都服務一定的時間, 然後把當前任務的狀態儲存下來, 在載入下一任務的狀態後, 繼續服務下一任務。任務的狀態儲存及再載入, 這段過程就叫做上下文切換。

當乙個程序在執行時,cpu的所有暫存器中的值、程序的狀態以及堆疊中的內容被稱 為該程序的上下文。當核心需要切換到另乙個程序時,它需要儲存當前程序的 所有狀態,即儲存當前程序的上下文,以便在再次執行該程序時,能夠必得到切換時的狀態執行下去。在linux中,當前程序上下文均儲存在程序的任務資料結 構中。在發生中斷時,核心就在被中斷程序的上下文中,在核心態下執行中斷服務例程。但同時會保留所有需要用到的資源,以便中繼服務結束時能恢復被中斷程序 的執行。

間接消耗:多核的cache之間得共享資料,間接消耗對於程式的影響要看執行緒工作區運算元據的大小。

上下文切換通常是計算密集型的。也就是說,它需要相當可觀的處理器時間,在每秒幾十上百次的切換中,每次切換都需要納秒量級的時間。所以,上下文切換對系統來說意味著消耗大量的 cpu 時間,事實上,可能是作業系統中時間消耗最大的操作。

(1)確認cpu使用率

cpu是否處於空閒狀態。

從vmstat的輸出可以看到,io項的block_in和block_out是否頻繁,system項的每秒中斷數(in)和每秒的上下文切換(cs)是否頻繁。

從pidstat上可以看到,每個程序對應的cswch(自願上下文切換)和nvcswch(非自願上下文切換)是否頻繁。

cswch/s: 每秒任務主動(自願的)切換上下文的次數,當某一任務處於阻塞等待時,將主動讓出自己的cpu資源。

nvcswch/s: 每秒任務被動(不自願的)切換上下文的次數,cpu分配給某一任務的時間片已經用完,因此將強迫該程序讓出cpu的執行權。

(4)/proc/stat

/proc/stat包含了cpu的活動資訊,上下文切換就是其中一項,以ctxt開頭,它表示系統開機到目前為止的上下文切換總數。

cat /proc/stat | grep ctxt && sleep 30 && cat /proc/stat | grep ctxt

通過上面的命令,可以計算出每秒上下文切換次數=兩者差值/30

通過以上命令即可以定位那個程序上下文切換頻繁。

上下文切換

1 系統呼叫 一次系統呼叫其實是發生了兩次cpu上下文的切換 首先將使用者態的cpu暫存器中的指令儲存在系統核心中。為了執行核心態 需要將暫存器更新為核心態指令的位置,然後跳轉到核心空間去執行任務。當核心態的指令執行完成的時候,cpu暫存器將恢復儲存在系統核心中的上一次執行的使用者態,然後切換到使用...

上下文切換

上下文切換 有時也稱做程序切換或任務切換 是指 cpu 從乙個程序或執行緒切換到另乙個程序或執行緒。上下文切換與模式切換 上下文切換只能發生在核心態中。核心態是 cpu 的一種有特權的模式,在這種模式下只有核心執行並且可以訪問所有記憶體和其他系統資源。其他的程式,如應用程式,在最開始都是執行在使用者...

上下文切換

vmstat cs 每秒上下文切換次數 的疑惑 in 每秒cpu中斷次數 shell vmstat 1 procs memory swap io system cpu r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 0 45939...