最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

一篇講解實(shí)時(shí)調(diào)度類及SMP!

2022-09-02 17:52 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

實(shí)時(shí)調(diào)度類源碼分析

Linux 實(shí)時(shí)進(jìn)程與普通進(jìn)程的根本不同之處,系統(tǒng)中有一個(gè)實(shí)時(shí)進(jìn)程且可運(yùn)行,調(diào)度器總是會(huì)選擇它,除非另有一個(gè)優(yōu)先級(jí)更高的實(shí)時(shí)進(jìn)程。 SCHED_FIFO:沒(méi)有時(shí)間片,在調(diào)度器被選擇之后,可以運(yùn)行任意長(zhǎng)時(shí)間; SCHED_RR:有時(shí)間片,其值在進(jìn)程運(yùn)行時(shí)會(huì)減少。

實(shí)時(shí)調(diào)度實(shí)體sched_rt_entity數(shù)據(jù)結(jié)構(gòu)及操作

進(jìn)程的插入、選擇、刪除三種基本操作。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺(jué)得比較好的學(xué)習(xí)書(shū)籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書(shū)、實(shí)戰(zhàn)項(xiàng)目及代碼)??

對(duì)稱多處理器SMP

多處理器系統(tǒng)的工作方式分為非對(duì)稱多處理(asym-metrical mulit-processing)和對(duì)稱多處理(symmetrical mulit-processing,SMP)兩種。 在對(duì)稱多處理器系統(tǒng)中,所有處理器的地位都是相同的,所有的資源,特別是存儲(chǔ)器、中斷及I/O空間,都具有相同的可訪問(wèn)性,消除結(jié)構(gòu)上的障礙。 多處理器系統(tǒng)上,內(nèi)核必須考慮幾個(gè)額外的問(wèn)題,以確保良好的調(diào)度。

  • CPU負(fù)荷必須盡可能公平地在所有的處理器上共享。

  • 進(jìn)程與系統(tǒng)中某些處理器的親合性(affinity)必須是可設(shè)置的。

  • 內(nèi)核必須能夠?qū)⑦M(jìn)程從一個(gè)CPU遷移到另一個(gè)。 linux SMP調(diào)度就是將進(jìn)程安排/遷移到合適的CPU中去,保持各CPU負(fù)載均衡的過(guò)程。

SMP優(yōu)點(diǎn)

  • 增加吞吐時(shí)的一種劃算方法;

  • 由于操作系統(tǒng)由所有處理器共享,它們提供了一個(gè)單獨(dú)的系統(tǒng)映像(容易管理);

  • 對(duì)一個(gè)單獨(dú)的問(wèn)題應(yīng)用多處理器(并行編程);

  • 負(fù)載均衡由操作系統(tǒng)實(shí)現(xiàn);

  • 單處理器(UP)編程模型可用于一個(gè)SMP中;

  • 對(duì)于共享數(shù)據(jù)來(lái)說(shuō),可伸縮;

  • 所有數(shù)據(jù)可由所有處理器尋址,并且由硬件監(jiān)視邏輯保持連續(xù)性;

  • 由于通信經(jīng)由全局共享內(nèi)存執(zhí)行,在處理器之間通信不必使用消息傳送庫(kù);

SMP局限性

  • 由于告訴緩存相關(guān)性、鎖定機(jī)制、共享對(duì)象和其它問(wèn)題,可伸縮性受限制;

  • 需要新技術(shù)來(lái)利用多處理器,例如:線程編程和設(shè)備驅(qū)動(dòng)程序編程等。

CPU域初始化

Linux內(nèi)核中有一個(gè)數(shù)據(jù)結(jié)構(gòu)struct sched_domain_topology_level用來(lái)描述CPU的層次關(guān)系。 內(nèi)核對(duì)CPU的管理是通過(guò)bitmap來(lái)管理,并且定義possible、present、online、active這4種狀態(tài)。

SMP負(fù)載均衡

SMP負(fù)載均衡機(jī)制從注冊(cè)軟中斷開(kāi)始,每次系統(tǒng)處理調(diào)度tick時(shí)會(huì)檢查當(dāng)前是否需要處 理SMP負(fù)載均衡。

負(fù)載均衡時(shí)機(jī)

  • 周期性調(diào)用進(jìn)程調(diào)度程序scheduler_tick()->trigger_load_balance()中,通過(guò)軟中斷觸發(fā)負(fù)載均衡。

  • 某個(gè)CPU上無(wú)可運(yùn)行進(jìn)程,__schedule()準(zhǔn)備調(diào)度idle進(jìn)程前,會(huì)嘗試從其它CPU上拉一批進(jìn)程過(guò)來(lái)。

兩路4核8核心CPU,CPU調(diào)度域邏輯關(guān)系





分層角度分析

所有CPU一共分成撒個(gè)層次:SMT、MC、NUMA,每層都包含所有CPU,但是劃分粒度不同。根據(jù)Cache和內(nèi)存的相關(guān)性劃分調(diào)度域,調(diào)度域內(nèi)的CPU又劃分一次調(diào)度組。越往下層調(diào)度域越小,越往上層調(diào)度域越大。進(jìn)程負(fù)載均衡會(huì)盡可以在底層調(diào)度域內(nèi)部解決,這樣Cache利用率最優(yōu)。 周期性負(fù)載均衡:CPU對(duì)應(yīng)的運(yùn)行隊(duì)列數(shù)據(jù)結(jié)構(gòu)記錄下一次周期性負(fù)載均衡時(shí)間,當(dāng)超過(guò)這個(gè)時(shí)間點(diǎn)后,將觸發(fā)SCHED_SOFIRQ軟中斷來(lái)進(jìn)行負(fù)載均衡。 用到SMP負(fù)載均衡模型的時(shí)機(jī) 內(nèi)核運(yùn)行中,還有部分情況需要用掉SMP負(fù)載均衡模型來(lái)確定最佳運(yùn)行CPU:

  • 進(jìn)程A喚醒進(jìn)程B時(shí),try_to_wake_up()中會(huì)考慮進(jìn)程B將在哪個(gè)CPU上運(yùn)行;

  • 進(jìn)程調(diào)用execve()系統(tǒng)調(diào)用時(shí);

  • fork出子進(jìn)程,子進(jìn)程第一次被調(diào)度運(yùn)行。

Linux運(yùn)行時(shí)調(diào)優(yōu):

Linux引入重要sysctls來(lái)在運(yùn)行時(shí)對(duì)調(diào)度程序進(jìn)行調(diào)優(yōu)(單位ns) sched_child_runs_first: child在fork之后進(jìn)行調(diào)度,為默認(rèn)設(shè)備。如果設(shè)置為0,則先調(diào)度parent。 sched_min_granularity_ns:針對(duì)CPU密集型任務(wù)執(zhí)行最低級(jí)別搶占粒度。 sched_latency_ns:針對(duì)CPU密集型任務(wù)進(jìn)行目標(biāo)搶占延遲。 sched_stat_granularity_ns:收集調(diào)度程序統(tǒng)計(jì)信息的粒度。

總結(jié)

本文主要介紹了實(shí)時(shí)調(diào)度類源碼分析,包括實(shí)時(shí)調(diào)度數(shù)據(jù)結(jié)構(gòu)及其相關(guān)操作(插入、選擇、刪除等);SMP的優(yōu)缺點(diǎn),負(fù)載均衡機(jī)制,CPU分層角度分析,linux運(yùn)行時(shí)調(diào)優(yōu)等相關(guān)參數(shù)介紹等。





一篇講解實(shí)時(shí)調(diào)度類及SMP!的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
连州市| 山西省| 香港 | 乌兰县| 陵川县| 来安县| 信宜市| 乐亭县| 新安县| 馆陶县| 那坡县| 嘉定区| 揭西县| 武山县| 新宁县| 措美县| 海阳市| 云安县| 苏州市| 承德市| 桃源县| 浦江县| 陇西县| 贵阳市| 彰武县| 双牌县| 疏附县| 潞城市| 五指山市| SHOW| 西林县| 公安县| 民勤县| 黑河市| 浦北县| 肃南| 石景山区| 萍乡市| 长垣县| 夏河县| 鄂尔多斯市|