RCU配置指导说明
?? ?Kernel configuration parameters for RCU
?? ??? ?[Posted January 21, 2019 by jake]
This sidebar is part of Paul McKenney's 2019 update to the RCU API.
內核配置參數
RCU的Kconfig選項和內核引導參數可以被認為是RCU API的一部分。尤其是從一些為專用設備或工作負載構建內核的角度來看。
本節總結了與RCU相關的Kconfig選項和更常用的內核引導參數,但是請注意,許多Kconfig選項要求設置CONFIG RCU EXPERT Kconfig選項。
第一組Kconfig參數控制RCU實現本身的底層行為,并在內核/ RCU /Kconfig中定義。
? ? CONFIG_PREEMPT = n和CONFIG_SMP = y意味著選擇了CONFIG_TREE_RCU配置,因此選擇非搶占式樹型RCU的實現,比較適合SMP服務器級別的構建。?
?? ?它可以容納大量的cpu,但尺度足夠但大多數內存受限系統。CONFIG_TREE_RCU提供了以下boot cmdline啟動參數:
?? ??? ?rcutree.blimit= 在一個批處理中,設置最大數目RCU回調,默認為10回調。這一限制并不適用于卸載cpu。
?? ??? ?rcutree.qhimark= 設置閾值的排隊RCU rcutree之外的回調。blimit =將被忽略。這個默認為10000回調。
?? ??? ?rcutree.qlowmark= 設置閾值的排隊RCU rcutree下面的回調。blimit =將再次生效。這個默認為100回調。
?? ??? ?rcutree.jiffies_till_first_fqs= 設置jiffies的數量等之間的寬限期初始化和第一force-quiescent-state掃描檢查對閑置的cpu(在其他事物之中)。
?? ??? ?默認的值取決于赫茲和系統上的cpu數量。默認情況下,所有系統等待至少一個瞬間,有一個額外的瞬間赫茲大于250,赫茲大于500額外的瞬間,一個額外的瞬間為每個256 cpu系統。
?? ??? ?這個值可能是手動設置為零,并將其用于專業系統往往有閑置的CPU,需要快速的寬限期,燃燒不介意一點額外的CPU在寬限期初始化。
?? ?
?? ?CONFIG_PREEMPT = y意味著選擇了CONFIG_PREEMPT_RCU配置,因此選擇搶占的樹型RCU實現適合實時和低延遲SMP構建。?
?? ?它還可以容納大量的cpu,和尺度足夠但大多數內存受限系統。CONFIG_TREE_RCU配置的cmdline參數也適用于CONFIG_TREE_PREEMPT_RCU。
?? ?CONFIG_PREEMPT = n和CONFIG_SMP = n意味著選擇了CONFIG_TINY_RCU配置,選擇非搶占式單處理器()RCU實現,適合非實時構建。
?? ?它的實現是當前RCU子系統中占用內存最小的。
?? ?
第二組Kconfig參數控制RCU的能效特性,他們定義在init/Kconfig中。
?? ?CONFIG_RCU_FAST_NO_HZ = y RCU的能源效率提高的次數減少RCU醒來空閑的cpu。 這種方法的缺點是,它增加RCU寬限期有所延遲。
?? ??? ?rcutree.rcu_idle_gp_delay= 指定一個jffess數值,用于表示一個空閑cpu在下一次檢查RCU state前,應該保持idle的時間。默認值是4個jiffies。
?? ??? ?rcutree.rcu_idle_lazy_gp_delay= 指定一個jffess數值,適用于lazy回調。用于表示一個空閑cpu在下一次檢查RCU state前,應該保持idle的時間。默認值是4個jiffies
?? ??? ?(一個“lazy”回調是RCU什么都不做,除了釋放內存)。默認值是6秒,或6 *赫茲jiffies
?? ?CONFIG_RCU_NOCB_CPU = y <<意外地改善RCU能源效率>>[PDF文檔]通過消除喚醒由于RCU回調處理。然而,它是旨在實時使用,所以在下一節。
?? ?srcutree.exp_holdoff= 控制第一的auto-expediting SRCU寬限期后開始一段空閑時間,默認為25微秒。?
?? ?如果它已經不再自去年SRCU寬限期結束(相同的srcu_struct結構),新SRCU寬限期將加快。請注意,這個內核啟動參數的單位是納秒。
請注意,這些特性不屬于CONFIG_TINY_RCU,職位描述強調小內存占用的能源效率。
?? ?
第三組Kconfig參數控制RCU的實時特性,也在init/Kconfig定義。
?? ?CONFIG_RCU_NOCB_CPU = y允許從選定的cpu卸載回調處理,“NOCB”代表“不回調”。可以指定cpu將在啟動時,可以幾個其他的事情:
?? ??? ?rcu_nocbs= 可用于指定將在啟動時的cpu。例如,rcu_nocbs=1-3,7會導致cpu 1,2,3,7他們回調被卸載到rcuo kthreads線程去執行。?
?? ??? ?卸載cpu的設置在運行時不能改變。然而,迄今為止的經驗表明,當至少一個CPU需要卸載,卸載是很好。
?? ??? ?因此,尚未有一個強烈的需要運行時更改的集合將cpu。當然,如果你有一個工作負載,需要卸載cpu的設置在運行時改變,請讓我知道。
?? ??? ?
?? ?rcu_nocb_poll 也就減少了需要從卸載cpu執行喚醒操作。避免了rcuo kthreads線程顯式的喚醒。另一方面
?? ?另一方面,這意味著所有的rcuo kthreads必須調查,這可能不是你想要的電池系統。(耗電)
?? ?
?? ?rcutree.rcu_nocb_leader_stride= 設置的數量NOCB kthread團體,它默認的cpu數量的平方根。 大的數值可以減少喚醒per-cpu rcuc kthreads,
?? ?但是會增加同樣的開銷到每個group的leader。
?? ?
?? ?CONFIG_NO_HZ_FULL 會使得RCU信任用戶空間執行,作為一個擴展的靜止狀態,有點類似于RCU dyntick-idle cpu的處理。(類似于NO_HZ處理)
?? ?
?? ?CONFIG_RCU_BOOST=y 使RCU優先級提高。 這可能被視為一個調試選項,但它是一個主要適用于實時內核,包括實時部分也是如此。
?? ?這個Kconfig參數會導致阻塞RCU讀者priority-boosted為了避免無限期prolongment當前RCU寬限期。 以下Kconfig和引導參數控制提高過程:
?? ?
?? ?CONFIG_RCU_BOOST_DELAY 指定RCU將允許一個寬限期多長時間被推遲開始前RCU優先級提高。默認值是300毫秒,在實踐中似乎工作得很好。
?? ?
?? ?rcutree.kthread_prio= 指定實時優先級提高,和默認優先級,最不重要的實時優先級。你應該設置這個優先級大于最高優先級線程實時中央處理器受限。
?? ?默認的優先級是適合普通情況下沒有cpu線程運行在實時優先級。
第四組Kconfig參數也可以指定優化的數據結構布局CONFIG_TREE_RCU CONFIG_TREE_PREEMPT_RCU:
?
?
https://lwn.net/Articles/777214/
https://unix.stackexchange.com/questions/80063/understanding-rcu-when-configuring-the-linux-kernel
bing搜索CONFIG_RCU_EXPERT
https://www4.bing.com/search?q=CONFIG_RCU_EXPERT&qs=n&form=QBLHCN&sp=-1&pq=config_rcu_expert&sc=0-17&sk=&cvid=759C0E35E7174E678539E3FC8884CEB6
總結
- 上一篇: root权限的获取
- 下一篇: 幻月大陆辅助多开挂机攻略