futex基礎問答
作者:OPPO內核團隊 發布于:2022-10-9 7:20 分類:內核同步機制
futex是Fast Userspace muTEX的縮寫,該機制是由Rusty Russell、Hubertus Franke和Mathew Kirkwood在2.5.7版本的內核中引入,雖然名字中有互斥鎖(mutex)的含義,但實際它是一種用于用戶空間應用程序的通用同步工具(基于futex可以在userspace實現互斥鎖、讀寫鎖、condition variable等同步機制)。標簽: futex
如何使能500個virtio_blk設備
作者:安慶 發布于:2022-8-12 16:12 分類:Linux內核分析
一例virtio_blk設備中斷占用分析背景:這個是在客戶的centos8.4的環境上復現的,dpu是目前很多云服務器上的網卡標配了,在云豹的dpu產品測試中,dpu實現的virtio_blk設備在申請中斷時報錯,在排查這個錯誤的過程中,覺得某些部分還比較有趣,故記錄之。本身涉及的背景知識有:irq,msi,irq_domain,affinity,virtio_blk,irqbalance。下面列一下我們是怎么排查并解決這個問題的。
Linux內核同步機制之(九):Queued spinlock
作者:OPPO內核團隊 發布于:2022-6-29 6:33 分類:內核同步機制
本站之前已經有了一篇關于spinlock的文檔,在之前的文章中有對自旋鎖進行簡單的介紹,同時給出了API匯整和應用場景。不過該文章中的自旋鎖描述是基于比較老的內核版本,那時候的自旋鎖還是ticket base鎖,而目前最新內核中的自旋鎖已經進化成queued spinlock,因此需要一篇新的自旋鎖文檔來跟上時代。此外,本文將不再描述基本的API和應用場景,主要的篇幅將集中在具體的自旋鎖實現上。順便說一句,同時準備一份linux5.10源碼是打開本文的正確方式。
由于自旋鎖可以在各種上下文中使用,因此本文中的thread是執行線索的意思,表示進程上下文、hardirq上下文、softirq上下文等多種執行線索,而不是調度器中線程的意思。
Linux內核同步機制之(八):mutex
作者:OPPO內核團隊 發布于:2022-5-10 5:55 分類:內核同步機制
在linux內核中,互斥量(mutex,即mutual exclusion)是一種保證串行化的睡眠鎖機制。和spinlock的語義類似,都是允許一個執行線索進入臨界區,不同的是當無法獲得鎖的時候,spinlock原地自旋,而mutex則是選擇掛起當前線程,進入阻塞狀態。本文代碼來自Linux 5.10.61,文章中的代碼片段有刪減,閱讀本文時可以參考源代碼。標簽: mutex
schedutil governor情景分析
作者:OPPO內核團隊 發布于:2022-4-26 6:29 分類:進程管理
這是一篇分析schedutil governor(后文稱之sugov)代碼邏輯的文章。通過詳細的代碼級別的分析,希望能夠幫助讀者理解sugov的代碼精妙之處。本文主要分四個章節:第一章簡單重復了sugov相關的軟件結構和基本算法,讓讀者對整個sugov在系統所處的位置和基本的邏輯控制有所了解。第二章對sugov使用的數據結構給出了詳細的解釋。第三章對sugov和cpufreq core的基本數據流和控制流進行分析。第四章描述了sugov本身的調頻邏輯。
本文出現的內核代碼來自Linux5.10.61,為了減少篇幅,我們會引用縮減版本的代碼(僅包含主要邏輯),如果有興趣,讀者可以配合原始代碼閱讀本文。
PELT算法淺析
作者:OPPO內核團隊 發布于:2022-4-7 7:09 分類:進程管理
Linux是一個通用操作系統的內核,她的目標是星辰大海,上到網絡服務器,下至嵌入式設備都能運行良好。做一款好的linux進程調度器是一項非常具有挑戰性的任務,因為設計約束太多了:
---它必須是公平的
---快速響應
---系統的throughput要高
---功耗要小
3.8版本之前的內核CFS調度器在計算CPU load的時候采用的是跟蹤每個運行隊列上的負載(per-rq load tracking)。這種粗略的負載跟蹤算法顯然無法為調度算法提供足夠的支撐。為了完美的滿足上面的所有需求,Linux調度器在3.8版中引入了PELT(Per-entity load tracking)算法。本文將為您分析PELT的設計概念和具體的實現。
本文出現的內核代碼來自Linux5.10.61,如果有興趣,讀者可以配合代碼閱讀本文。
標簽: PELT
load_balance函數代碼詳解
作者:OPPO內核團隊 發布于:2022-2-16 7:29 分類:進程管理
我們描述CFS任務負載均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration兩個典型的負載均衡場景,第三篇是負載均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。在負載均衡情景分析文檔最后,我們給出了結論:tick balancing、nohz idle balancing、new idle balancing都是萬法歸宗,匯聚到load_balance函數來完成具體的負載均衡工作。本文就是第三篇負載均衡情景分析的附加篇,重點給大家展示load_balance函數的精妙。
本文出現的內核代碼來自Linux5.10.61,為了減少篇幅,我們對引用的代碼進行了刪減(例如去掉了NUMA的代碼,畢竟手機平臺上我們暫時不關注這個特性),如果有興趣,讀者可以配合完整的源代碼代碼閱讀本文。
標簽: load_balance
CPU 多核指令 —— WFE 原理
作者:heaven 發布于:2022-2-11 1:34 分類:ARMv8A Arch
今天我想分享一個跟多核鎖原理相關的東西,由于我搞 arm 居多,所以目前只研究了 arm 架構下的 WFE 指令,分享出來,如果有表述不精準或者錯誤的地方還請大家指出,非常感謝。研究這個原因也是只是想搞清楚所以然和來龍去脈,以后寫代碼可以更游刃有余。CFS任務放置代碼詳解
作者:OPPO內核團隊 發布于:2021-12-31 7:00 分類:進程管理
我們描述CFS任務負載均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement的邏輯過程,第三篇是負載均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。之前已經有一篇關于task placement的文檔發表在本站,為了更精細的講解代碼邏輯,我們這次增加了代碼分析部分。本文作為第二篇任務放置的附篇,深入講解task placement的代碼流程。
本文出現的內核代碼來自Linux5.10.61,為了減少篇幅,我們對引用的代碼進行了刪減(例如去掉了NUMA的代碼,畢竟手機平臺上我們暫時不關注這個特性),如果有興趣,讀者可以配合完整的源代碼代碼閱讀本文。
CFS任務的負載均衡(load balance)
作者:OPPO內核團隊 發布于:2021-11-22 20:49 分類:進程管理
我們描述CFS任務負載均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration兩個典型的負載均衡場景。本文是第三篇,主要是分析各種負載均衡的觸發和具體的均衡邏輯過程。
本文出現的內核代碼來自Linux5.10.61,為了減少篇幅,我們盡量刪除不相關代碼,如果有興趣,讀者可以配合代碼閱讀本文。
功能
最新評論
文章分類
隨機文章
文章存檔
- 2022年10月(1)
- 2022年8月(1)
- 2022年6月(1)
- 2022年5月(1)
- 2022年4月(2)
- 2022年2月(2)
- 2021年12月(1)
- 2021年11月(5)
- 2021年7月(1)
- 2021年6月(1)
- 2021年5月(3)
- 2020年3月(3)
- 2020年2月(2)
- 2020年1月(3)
- 2019年12月(3)
- 2019年5月(4)
- 2019年3月(1)
- 2019年1月(3)
- 2018年12月(2)
- 2018年11月(1)
- 2018年10月(2)
- 2018年8月(1)
- 2018年6月(1)
- 2018年5月(1)
- 2018年4月(7)
- 2018年2月(4)
- 2018年1月(5)
- 2017年12月(2)
- 2017年11月(2)
- 2017年10月(1)
- 2017年9月(5)
- 2017年8月(4)
- 2017年7月(4)
- 2017年6月(3)
- 2017年5月(3)
- 2017年4月(1)
- 2017年3月(8)
- 2017年2月(6)
- 2017年1月(5)
- 2016年12月(6)
- 2016年11月(11)
- 2016年10月(9)
- 2016年9月(6)
- 2016年8月(9)
- 2016年7月(5)
- 2016年6月(8)
- 2016年5月(8)
- 2016年4月(7)
- 2016年3月(5)
- 2016年2月(5)
- 2016年1月(6)
- 2015年12月(6)
- 2015年11月(9)
- 2015年10月(9)
- 2015年9月(4)
- 2015年8月(3)
- 2015年7月(7)
- 2015年6月(3)
- 2015年5月(6)
- 2015年4月(9)
- 2015年3月(9)
- 2015年2月(6)
- 2015年1月(6)
- 2014年12月(17)
- 2014年11月(8)
- 2014年10月(9)
- 2014年9月(7)
- 2014年8月(12)
- 2014年7月(6)
- 2014年6月(6)
- 2014年5月(9)
- 2014年4月(9)
- 2014年3月(7)
- 2014年2月(3)
- 2014年1月(4)