上下文保存 中断_Linux性能优化(CPU篇)(5)——CPU的上下文切换有几种类型?什么是进程上下文切换?...
上一篇中講了stress用來模擬常見壓力測試的選項:
RobotCode俱樂部:《Linux性能優化實戰》之CPU性能篇(四)?zhuanlan.zhihu.com這一篇的主題是:CPU上下文切換 之 進程上下文切換。
那么什么是 CPU上下文切換。簡而言之,就是一個進程放棄對CPU的占用,讓出其使用權,給其進程使用,此間發生的對當前進程的執行狀態與現場保護,從而可以加載新的進程,這個過程就是CPU上下文切換。
那么CPU的上下文切換可以分為幾種類型?
根據場景不同,可以分為3種類型:
那么這幾種切換,哪種對CPU的平均負載影響最大?首先需要明白這幾種切換時,CPU都干了些什么事。
進程上下文切換
Linux按照特權等級,把進程的運行空間分為內核空間與用戶空間。內核空間具有最高權限,可以直接訪問所有資源;用戶空間只能訪問受限資源,要想訪問其他不能直接訪問的資源需要通過系統調用的方式陷入內核中,此時相當于內核代替其執行一些資源的訪問。(這里有個問題,普通進程通過系統調用就能訪問之前自己對受限的資源,那 普通進程和 內核 好像沒有區別了?后面會寫這個疑問)
這里要引入的問題是 一次系統調用 引起幾次CPU上下文切換?
在系統調用前,為了執行內核態的代碼,需要先將用戶態的 運行環境保存起來,CPU調入內核態代碼,此時發生一次CPU上下文切換。之后,系統調用執行完后,又要返回到用戶態,此時又要此前保存的用戶態運行環境重新調入CPU,再次執行,又發生了一次CPU上下文切換。
還有個問題,進程上下文切換 和 系統調用的上下文切換 是什么區別?
進程上下文切換,是指從一個進程切換到另一個進程運行,而系統調用過程中一直是同一個進程在運行,不會涉及虛擬內存等進程用戶態的資源。系統調用過程一般稱之為 特權模式切換,而不是CPU上下文切換,但是系統調用的過程中 CPU的上下文切換是無法避免的!
所以進程的上下文切換就比系統調用多了一步,保存當前進程的內核狀態和CPU寄存器之前,需要先把該進程的虛擬內存、棧等保存下來;而加載了下一進程的內核態后,還要刷新進程的虛擬內存和用戶棧。
Linux通過TLB管理虛擬內存到物理內存的映射關系,當虛擬內存更新后,TLB也需要刷新,內存訪問會隨之變慢,特別是在多處理器系統上,緩存是被多個處理器共享的,刷新緩存不僅會影響當前處理器的進程,也會影響共享緩存的其他處理器的進程。
那么什么時候會發生進程上下文切換?
這一篇先碼這么多,下一篇討論 線程上下文切換。
歡迎訂閱倪老師課程,有更多真實案例分享總結
以上是生活随笔為你收集整理的上下文保存 中断_Linux性能优化(CPU篇)(5)——CPU的上下文切换有几种类型?什么是进程上下文切换?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《博德之门 3》拿下金摇杆 7 个奖项后
- 下一篇: 研究:格陵兰冰川的融化速度比 20 年前