日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)

發布時間:2023/12/3 linux 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

決定何時、如何選擇一個新進程運行的這組規則叫做:調度策略(scheduling policy)。

Linux的調度是基于分時技術(time sharing):多個進程以“時間多路復用”方式運行,因為CPU的時間唄分成“片”(slice),給每個可運行進程分配一片。如果當前運行進程的時間片或時限(quantum)到期時,該進程還沒有運行完畢,進程切換就會發生。

調度策略也是根據進程的優先級對它們進行分類。在Linux中,進程優先級是動態的:在較長時間內沒有運行的進程,會動態提升它們的優先級;相反地,對于在CPU上運行較長時間的進程,會降低它們的優先級來懲罰它們。

所以,實現調度的工具是調度器(scheduler),調度的對象是進程(process),調度的方法是調度策略(包括調度算法)。

二、CPU調度器

這里主要講了cpu調度器的工作內容和目的:

多個task會共享CPU資源

那如何進行任務切換選擇呢?

當前運行的task中止

當前運行的task sleep(wait event)

新task創建,或者sleep的task喚醒了

當前運行的task的時間片用完

那調度器的目標是什么?

公平調度各個task

基于task的優先級來分配時間片

task的respnse時間短

高throughput(task執行成功)

在多個cpu間,負載均衡

低功耗

調度器代碼運行開銷低

調度器會和工作在一些框架、服務器、PC、嵌入式/手機中。

三、O(1)調度器

在2.6.23(2007)以前,Linux調度器使用的是O(1)調度器:

調度器分140個優先級等級:0-99是RT task,100-139是User task

每個cpu的runqueue有2個數組:Active,Expaired

每個數組都有140個entry,對應每個優先級

每個entry是一條FIFO隊列結構的鏈表

140位的bitmap用來檢測每個優先級list

時間片會根據task的優先級進行分配

運行時間expaire的task會從Active數組移動到Expaired數組

當Active數組為空時,就交換2個數組。即,將Expaired數組變為Active;Active(此時為空)變為Expaired

task的入rq和出rq,以及next task的選擇都是在固定時間內完成

最后在O(1)調度器已經被CFS替代。

四、當前調度器架構

在kernel 2.6.23(2007)后,由Ingo Molnar引入

在調度的class中,還存在調度policy

不同的調度class,高優先級的,越早執行

task可以在cpu、調度policy、調度class間進行遷移

4.1? 調度class

由struce sched_class結構體實現:

structsched_class {const struct sched_class *next;void (*enqueue_task) (struct rq *rq, struct task_struct *p, intflags);void (*dequeue_task) (struct rq *rq, struct task_struct *p, intflags);

...struct task_struct * (*pick_next_task) (struct rq *rq, struct task_struct *prev, struct rq_flags *rf);

...

};

內核中一共有5中調度class,優先級從高到低:STOP > DL > RT > CFS > IDLE,他們通過鏈表實現,并鏈接起來的。

4.2? 主調度函數Schedule()

內核中進程調度,最主要的實現是Schedule()函數。它完成如下工作:

選取下一個runnable的task,并將task放在cpu上運行

按class優先級搜索task來運行,最先從STOP class開始

輪詢搜索:for_each_class()

實現方式:pick_next_task():

again:

for_each_class(class) {

p= class->pick_next_task(rq, prev, rf);if(p) {if (unlikely(p ==RETRY_TASK))gotoagain;returnp;

}

}/*The idle class should always have a runnable task:*/BUG();

4.3? 調度class與policy

在不同的調度class下,可能會有不同的調度policy實現:

● Stop

○ No policy

● Deadline

○ SCHED_DEADLINE

● Real Time

○ SCHED_FIFO

○ SCHED_RR

● Fair

○ SCHED_NORMAL

○ SCHED_BATCH

○ SCHED_IDLE

● Idle

○ No policy

不同的class代表不同的調度優先級;不同的policy同樣也意味著不同的調度方式。

4.4? 調度class:STOP

STOP類型的class有如下特點:

是最高優先級的class(但是這個class不開放給系統user使用的)

只能在smp系統上可用(stop_machine()在單核處理器下不可用)------括號內的具體沒怎么理解

可以搶占所有task,并任何事件都不能搶占它

實現方式是:停止運行的其他所有task,而在cpu上運行一個特定的函數

沒有調度policy

屬于stop class的per cpu內核線程:migration/N ------“N”為cpu core number

在以下情況下使用:task遷移、CPU hotplug、RCU、ftrace、cloclevents等

4.5? 調度class:Deadline(DL)

Deadline類型的class有如下特點:

在kernel 3.14(2013),由Dario Faggioli & Juri Lelli引入

在系統中,屬于可以使用的最高優先級的class

調度policy為SCHED_DEADLINE

由紅黑樹結構實現(自平衡樹)

在以下情況下使用:周期性的實時task,例如:視頻編解碼

4.6? 調度Real-time(RT)

Real-time類型的class有如下特點:

符合POSIX標準要求

task優先級范圍:0-99

優先級在kernel和userspace中相反:0在kernel中,代表最高優先級;而在userspace中代表最低優先級

相同優先級下的調度policy:

SCHED_FIFO

SCHED_RR,默認時間片長度為100ms

由鏈表實現

在以下情況下使用:latency敏感的task,例如:IRQ threads

4.7? 調度CFS(Completely Fair Scheduler)

CFS類型的class有如下特點:

由Ingo Molnar引入

調度policy:

SCHED_NORMAL:普通task

SCHED_BATCH:批處理 task(batch task,非交互型)

SCHED_IDLE:低優先級task

由紅黑樹結構實現

跟蹤task的虛擬運行時間(vruntime,task擁有的運行時間)

虛擬運行時間(vruntime)最短的task,最優先運行

task的優先級作為權重,會影響虛擬運行時間的計算(vruntime)

權重越大,虛擬運行時間(vruntime)計算時的增量就越小

task的優先級計算:120+nice值(nice范圍:-20 ~ +19)

用于所有其他類型的task,例如:shell

4.7? 調度Idle

Idle類型的class有如下特點:

最低優先級的調度class

沒有調度policy

屬于idle class的per cpu內核線程(idle):swapper/N ------“N”為cpu core number

idle線程僅會在沒有其他task的情況下,在cpu上運行

idle線程可以讓cpu進入低功耗狀態

五、Runqueue

每個CPU都由一個struct rq的實例

每個”rq“包含了DL、RT、CFS的runqueue

Runnable的task會被壓入上面提到的那些runqueue中

在struct rq中由很多其他的信息和狀態

structrq {

...structcfs_rq cfs;structrt_rq rt;structdl_rq dl;

...

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。