簡析 Linux 的 CPU 時間( 三 )

daemon線程

  • daemon線程被喚醒后會運行do_softirq()處理軟中斷
    • 檢查 irq_stat 是否存發生軟中斷事件
    • 調用 softirq_vec 中對應的軟中斷服務程序
    • 再次檢查 irq_stat,如果發現新的軟中斷,就會喚醒ksoftrqd線程來處理
  • ksoftrqd 機制我們知道 CPU 執行的優先級為:硬中斷 > 軟中斷 > 普通進程 。這意味著:
    • 一個軟中斷不會去搶占另一個軟中斷,只有硬件中斷才可以搶占軟中斷
    • 如果軟中斷太過頻繁,用戶進程可能永遠無法獲得 CPU 時間
    為了保證公平性,內核為每個 CPU 都配置一個ksoftrqd線程 。如果所有的軟中斷在短時間內無法被處理完,內核就會喚醒ksoftrqd處理剩余的軟中斷 。以下面這張圖為例:
    簡析 Linux 的 CPU 時間

    文章插圖
    • 網卡數據就緒,通過硬中斷通知 CPU 進行處理
    • 硬中斷服務程序調用raise_softirq()觸發軟中斷 , 喚醒daemon
    • 硬中斷服務程序退出后,daemon被喚醒開始處理軟中斷
    • 遍歷過一遍向量表后 , daemon發現仍有未處理的軟中斷,喚醒ksoftrqd
    • ksoftrqd獲得 CPU 時間片后,繼續處理未完成的軟中斷
    由于 ksoftrqd 其實是一個 nice 值為 0 的普通線程,會進入 cfs_rq 參與調度 , 可以和普通進程公平地使用 CPU 。
    但如果 ksoftrirqd 長時間得不到 CPU,就會致使軟中斷的延遲變得很大,因此 ksoftirqd 的實時性是很難得到保障 。
    典型問題是 ping 延遲:如果 ping 包無法在軟中斷里得到處理,就會被 ksoftirqd 處理,導致 ping 延遲變得很大 。
    中斷的影響硬中斷的優先級很高,但是需要的 CPU 時間極少 。當出現大量硬中斷時,可能會引起較多的 CPU 用戶態與內核態的切換,但是interrupt time不會顯著上升 。
    此外 , 由于部分內核代碼是不可重入的(例如,修改寄存器),其執行過程不能打斷 。因此這些代碼的執行過程中 , 會屏蔽掉硬中斷 。
    關中斷的操作在內核里隨處可見,這反過來會給硬中斷帶來一些影響 。比如 , 進程關中斷時間太長會導致網絡報文無法及時處理,進而引起業務性能抖動 。
    而軟中斷的執行時間如果太長,就會給用戶線程帶來延遲,如果 softirq time 很大則很可能意味著用戶線程會受到影響 。
    網絡 IO 頻繁的應用機器的 softirq time 通常會比較高,可能存在網絡連接數過多,或者網絡流量過大的情況,
    ksoftirqd 的優先級與用戶線程是一致的,因此,如果軟中斷處理函數是在 ksoftirqd 里執行的,那它可能會有一些延遲 。
    時間竊取在 GNU top命令中 , steal time定義為 “虛擬機管理進程 hypervisor 從 VM 竊取的時間” 。該概念是Xen,KVM , VMware 等社區或者廠商推廣到Linux社區的 。
    當系統管理進程和 VM 嘗試占用同一物理 CPU 核 pCPU 時,會導致 VM 的虛擬 CPU vCPU 可用的處理器時間減少,從而造成 VM 性能下降 。
    中虛擬化環境中,可能發生時間竊取的一些情況:
    • 多個高負載 VM 的 vCPU 的運行在同個 pCPU 上(公有云的 CPU 超賣)
    • VM 的 vCPU與線程綁定在了某個特定的 pCPU 上,導致虛擬主機 vhost 進程處理 I/O 時從這些 vCPU上竊取時間
    • 虛擬機監控程序進程(例如監視,日志記錄和I/O進程)與 VM 爭搶 pCPU
    參考資料https://www.cnblogs.com/Anker/p/3269106.htmlhttps://zhuanlan.zhihu.com/p/69554144https://blog.csdn.net/helloanthea/article/details/28877221https://blog.csdn.net/lenomirei/article/details/79274073https://www.jianshu.com/p/673c9e4817a8https://opensource.com/article/20/1/cpu-steal-timehttps://www.cnblogs.com/menkeyi/p/6732020.htmlhttps://blog.csdn.net/zxh2075/article/details/78262568https://kb.cnblogs.com/page/207897/https://www.cnblogs.com/charlesblc/p/6255806.htmlhttp://www.wowotech.net/linux_kenrel/soft-irq.html

    推薦閱讀