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

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

談?wù)凩inux內(nèi)核的實(shí)時(shí)性優(yōu)化

2022-11-08 22:08 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

1.實(shí)時(shí)系統(tǒng)的概念

1.1什么是實(shí)時(shí)操作系統(tǒng)

什么是實(shí)時(shí)操作系統(tǒng)?接觸過嵌入式的小伙伴可能會(huì)知道,實(shí)時(shí)操作系統(tǒng)是指在嵌入式領(lǐng)域廣泛應(yīng)用的各類RTOS(Real Time Operating System)。其中最具代表性的有國(guó)外的μC/OS-III、FreeRTOS、Vxworks等,國(guó)內(nèi)的代表有RT-Thread和LiteOS。


在這些眾多的RTOS系統(tǒng)里面既有開源的也有商業(yè)的,同時(shí)還有一些是行業(yè)專用的,比如enea公司推出的OSE系統(tǒng)就是通信行業(yè)早期的基站設(shè)備應(yīng)用比較廣泛的系統(tǒng)。無論是開源或是商業(yè),這類系統(tǒng)都有一個(gè)最顯著的特點(diǎn),就是它們都具有很高的實(shí)時(shí)性。也是因?yàn)檫@個(gè)特點(diǎn),它們都被集中應(yīng)用在了嵌入式領(lǐng)域,特別是工控領(lǐng)域,例如工業(yè)制造控制、導(dǎo)彈飛機(jī)導(dǎo)航、電力設(shè)備監(jiān)控等。歷史上有很多著名的航空航天設(shè)備都使用到了實(shí)時(shí)的操作系統(tǒng)。比如登陸火星的鳳凰號(hào)、好奇號(hào)火星探測(cè)器,它們所采用的操作系統(tǒng)就是美國(guó)WindRiver公司推出的Vxworks。那什么是系統(tǒng)的實(shí)時(shí)性呢?Linux系統(tǒng)在嵌入式領(lǐng)域也有大量使用,那Linux系統(tǒng)支不支持實(shí)時(shí)性呢?

1.2 Linux實(shí)時(shí)性、軟實(shí)時(shí)和硬實(shí)時(shí)

實(shí)時(shí)性指的是一個(gè)操作系統(tǒng)能夠在規(guī)定的時(shí)間點(diǎn)內(nèi)完成指定的任務(wù)操作,一旦超過這個(gè)時(shí)間點(diǎn)會(huì)對(duì)整個(gè)系統(tǒng)帶來不可估量的后果。與此相對(duì)的是一般操作系統(tǒng),它更注重用戶體驗(yàn),系統(tǒng)偶爾卡頓不會(huì)給用戶帶來災(zāi)難性后果。實(shí)時(shí)性反映了一個(gè)系統(tǒng)行為控制的精準(zhǔn)能力,具體體現(xiàn)在定時(shí)器的精準(zhǔn)度高,中斷響應(yīng)及時(shí)以及系統(tǒng)的行為固定且可預(yù)估等。Linux系統(tǒng)最初是按照分時(shí)系統(tǒng)設(shè)計(jì)并推出的,再加上在歷史版本中使用的調(diào)度算法目的是公平的分配和使用各種系統(tǒng)資源,保證CPU被各個(gè)進(jìn)程公平的使用,所以早期并不支持實(shí)時(shí)性。但是在后來的2.6版本開始,加入了內(nèi)核搶占的功能,使它的實(shí)時(shí)性得到了提升,在某種程度上具備了軟實(shí)時(shí)的能力。軟實(shí)時(shí)指的是系統(tǒng)對(duì)于時(shí)限要求并不是十分的嚴(yán)格,在一些情況下允許系統(tǒng)超限完成。舉個(gè)例子,我們?cè)赑C機(jī)上使用鼠標(biāo)操作,偶爾會(huì)出現(xiàn)卡頓延遲,這種情況除了讓我們抓狂影響使用體驗(yàn)之外并不會(huì)給我們帶來嚴(yán)重的影響,大家平時(shí)在使用電腦時(shí)遇到鼠標(biāo)圖標(biāo)轉(zhuǎn)圈圈同時(shí)界面不響應(yīng)操作就是一個(gè)例子。再比如視頻信號(hào)采集,偶爾丟失幾個(gè)數(shù)據(jù)幀,并不會(huì)對(duì)視頻最后的播放帶來嚴(yán)重的畫面缺失。但是硬實(shí)時(shí)就不一樣,它對(duì)操作系統(tǒng)的行為有著嚴(yán)格的時(shí)限要求,超出時(shí)限往往會(huì)帶來災(zāi)難性后果。比如在我們?nèi)粘I钪惺褂玫钠嚩寂鋫淞税踩珰饽遥囋诎l(fā)生激烈碰撞時(shí)可能會(huì)在0.2s內(nèi)停下,那就要求氣囊在0.02s內(nèi)充氣完畢并彈出,超出這個(gè)時(shí)間乘客可能就會(huì)面臨生命危險(xiǎn)。再比如導(dǎo)彈防御系統(tǒng),當(dāng)敵方導(dǎo)彈來襲時(shí)攔截系統(tǒng)必須做出100%的精準(zhǔn)反應(yīng)并計(jì)算出彈道軌跡進(jìn)行攔截,稍有延遲就會(huì)造成攔截失敗,這種后果是不可接受的。這就是硬實(shí)時(shí)系統(tǒng)和軟實(shí)時(shí)系統(tǒng)的區(qū)別。但是由于Linux系統(tǒng)內(nèi)核過于龐大且模塊眾多,內(nèi)核中仍然有不少影響實(shí)時(shí)性的因素,比如使用大量自旋鎖、中斷禁止、時(shí)鐘粒度等,使其距離 us 級(jí)別的控制精度還有很大的距離。 但是也不能因此認(rèn)定Linux系統(tǒng)今后就不能用于實(shí)時(shí)控制領(lǐng)域。

其實(shí)Linux內(nèi)核一路發(fā)展過來,在歷史的版本主線中仍然有很多技術(shù)公司或者大牛為了提升Linux系統(tǒng)的實(shí)時(shí)性而努力著,他們或是在某個(gè)版本上發(fā)布實(shí)時(shí)補(bǔ)丁,或是對(duì)內(nèi)核進(jìn)行一定程度上的改造,具體的代表有RTLinux、RTAI(Real-Time Application Interface)和Xenomai等。RTLinux全稱叫做AReal-Time Linux,它由美國(guó)新墨西哥礦業(yè)及科技學(xué)院的V. Yodaiken開發(fā)。RTLinux采用了雙內(nèi)核的做法,可以說是開創(chuàng)了雙內(nèi)核法的先河。簡(jiǎn)單理解就是系統(tǒng)中存在兩個(gè)內(nèi)核,實(shí)時(shí)核和非實(shí)時(shí)核。底層硬件資源和實(shí)時(shí)的內(nèi)核打交道繞開非實(shí)時(shí)核,來自硬件的中斷源由實(shí)時(shí)核全面接管,把非實(shí)時(shí)的Linux內(nèi)核當(dāng)成實(shí)時(shí)核上的一個(gè)低優(yōu)先級(jí)的進(jìn)程來運(yùn)行,通過這種方式確保實(shí)時(shí)核上的中斷和任務(wù)得到優(yōu)先響應(yīng),提升了實(shí)時(shí)性。Xenomai也借鑒了RTLinux的雙內(nèi)核做法,內(nèi)部也有實(shí)時(shí)核和非實(shí)時(shí)核。但不同的是Xenomai在底層硬件和兩個(gè)內(nèi)核之間還加了一層硬件抽象層ADEOS(Adoptive Domain Environment for Operating System),實(shí)時(shí)核和非實(shí)時(shí)核作為硬件抽象層的兩個(gè)域而存在,Xenomai內(nèi)核屬于實(shí)時(shí)域,Linux內(nèi)核屬于非實(shí)時(shí)域。ADEOS在系統(tǒng)的關(guān)鍵路徑中對(duì)中斷進(jìn)行攔截,優(yōu)先響應(yīng)Xenomai實(shí)時(shí)域的中斷,當(dāng)沒有實(shí)時(shí)任務(wù)和中斷需要處理的時(shí)候才會(huì)輪到Linux內(nèi)核執(zhí)行。兩者對(duì)比如下。


由于版權(quán)、技術(shù)專利等因素,RTLinux已經(jīng)不再更新。而Xenomai因?yàn)樽⒅赝卣剐裕梢浦残院涂删S護(hù)性,對(duì)開發(fā)者相對(duì)友好,目前還在不斷推出補(bǔ)丁,并且在社區(qū)活躍度很高,在工控領(lǐng)域也有不少成功應(yīng)用的案例。這些基于Linux系統(tǒng)去改造從而提升實(shí)時(shí)性的系統(tǒng)的出現(xiàn),使得Linux系統(tǒng)在發(fā)展過程中在實(shí)時(shí)性的研究上熱度不減。甚至有不少人從Linux系統(tǒng)實(shí)時(shí)性研究入手,深入去學(xué)習(xí)Linux內(nèi)核的調(diào)度機(jī)制、中斷機(jī)制、定時(shí)器機(jī)制等,逐漸發(fā)展成自己的興趣和愛好。從我們作為普通技術(shù)族的實(shí)力來說,可能不具備像國(guó)外的公司或者一些技術(shù)組織大改并發(fā)布實(shí)時(shí)Linux的能力。而想要提升系統(tǒng)實(shí)時(shí)性,有的是出于自身工作的需要,有的則是帶著個(gè)人的興趣愛好去鉆研,那么如果想提升Linux內(nèi)核的實(shí)時(shí)性,我們?cè)撛趺醋瞿兀?/p>


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


2.Linux實(shí)時(shí)性優(yōu)化

2.1 實(shí)時(shí)性優(yōu)化和時(shí)鐘精度

知其然并知其所以然,知道影響實(shí)時(shí)性的因素才能很好的優(yōu)化改造它。目前影響 Linux 內(nèi)核實(shí)時(shí)性因素主要有時(shí)鐘精度、系統(tǒng)中斷、進(jìn)程調(diào)度算法和內(nèi)核可搶占性等。 每一塊都可以深入研究并做出相應(yīng)的優(yōu)化。首先是時(shí)鐘精度,時(shí)鐘就像是一個(gè)系統(tǒng)的脈搏,系統(tǒng)進(jìn)程的調(diào)度切換是按照時(shí)鐘節(jié)拍來進(jìn)行的。目前Linux內(nèi)核支持幾種不同的系統(tǒng)節(jié)拍,可以在用戶編譯內(nèi)核時(shí)配置。假設(shè)當(dāng)前的系統(tǒng)節(jié)拍是100Hz,那么系統(tǒng)的時(shí)鐘粒度就是10ms,如果提升到1000Hz,那么時(shí)鐘粒度就是1ms,精度提升了10倍。


上面這張圖是CentOS7.6發(fā)行版系統(tǒng)默認(rèn)的系統(tǒng)節(jié)拍設(shè)置。時(shí)鐘精度的提升最直接的影響就是系統(tǒng)中的調(diào)度動(dòng)作加快了,進(jìn)程的響應(yīng)也更為及時(shí),但隨著而來的是時(shí)鐘中斷頻率的加快,這也加大了系統(tǒng)的開銷和壓力,因?yàn)闀?huì)頻繁的響應(yīng)系統(tǒng)的時(shí)鐘中斷。在某些CPU消耗型的進(jìn)程上會(huì)由于系統(tǒng)頻繁的進(jìn)行進(jìn)程切換而導(dǎo)致CPU資源浪費(fèi),CPU的時(shí)間會(huì)浪費(fèi)在進(jìn)程切換上,因?yàn)閺倪M(jìn)程切換到實(shí)際被調(diào)度執(zhí)行之間有一個(gè)時(shí)間差,叫做進(jìn)程切換開銷,所以好和壞我們還是需要根據(jù)自己的系統(tǒng)表現(xiàn)來看待。

2.2 中斷

其次是中斷。無論是RTOS還是Linux,硬件中斷在系統(tǒng)當(dāng)中的響應(yīng)優(yōu)先級(jí)永遠(yuǎn)是最高的。RTOS由于支持中斷優(yōu)先級(jí),在實(shí)際使用過程中可以根據(jù)產(chǎn)品的實(shí)際情況針對(duì)不同的外設(shè)場(chǎng)景設(shè)置不同的優(yōu)先級(jí),且高優(yōu)先級(jí)的中斷可以搶占低優(yōu)先級(jí)的中斷,使得RTOS的中斷響應(yīng)非常迅速。Linux系統(tǒng)中的中斷模塊遠(yuǎn)比RTOS系統(tǒng)復(fù)雜得多。通常,Linux系統(tǒng)在進(jìn)入一個(gè)中斷時(shí)候,會(huì)禁止本地CPU的中斷。在處理具體某一個(gè)中斷的時(shí)候,由于禁止了本地CPU中斷(NMI類型的中斷除外),當(dāng)有新的中斷到來的時(shí)候只好掛起,只有當(dāng)前的中斷處理完才打開本地中斷并響應(yīng)新的中斷。如果系統(tǒng)中存在大量不同類型的中斷,勢(shì)必會(huì)有一些中斷被延遲得不到及時(shí)響應(yīng),這種延遲現(xiàn)象在單核CPU上表現(xiàn)尤為明顯。針對(duì)這種情況,就要求我們?cè)诰帉憣?shí)際中斷處理函數(shù)的時(shí)候,盡量在中斷處理函數(shù)中不做復(fù)雜的操作,堅(jiān)守中斷處理函數(shù)“快進(jìn)快出”的原則。比如只讀取硬件寄存器等簡(jiǎn)單操作即可,剩下的數(shù)據(jù)處理的操作放到中斷下半部中去執(zhí)行,這就是所謂的 “ 中斷線程化 ” 。 傳統(tǒng)上的中斷下半部有軟中斷、tasklet、工作隊(duì)列,它們的優(yōu)先級(jí)也從高到低。軟中斷和tasklet工作在中斷上下文不允許休眠它的優(yōu)先級(jí)比工作隊(duì)列高,工作隊(duì)列工作在進(jìn)程上下文允許休眠但是優(yōu)先級(jí)最低,所以在實(shí)際編程開發(fā)中需要我們根據(jù)場(chǎng)景選擇性的使用。如果是多核CPU,那么可以根據(jù)實(shí)際的中斷情況把不同類型的中斷遷移綁定到不同的CPU上,避免不同中斷之間的干擾。下面以I.MX6DL硬件平臺(tái)為例子介紹中斷遷移的使用。首先,通過#cat /proc/interrupts指令查看系統(tǒng)的所有中斷,如下圖所示:


從上面圖中可以看出,當(dāng)前的硬件平臺(tái)一共有4顆CPU,其中IMX-uart和imx-i2c的中斷集中發(fā)生在CPU0和CPU3,從第一列可以知道它們的中斷號(hào)分別是58和69。接下來我們可以將IMX-uart中斷全部遷移到CPU1上,讓CPU0只響應(yīng)imx-i2c中斷。通過# echo "2" > /proc/irq/58/smp_affinity指令即可完成遷移。注意,這里的數(shù)字“2”表示CPU編號(hào),它是從1開始。遷移后IMX-uart中斷情況如下:


從前后兩張圖對(duì)比可以看出,中斷遷移前,IMX-uart在CPU3上的中斷次數(shù)為1824次,在CPU0上中斷次數(shù)為727次。中斷遷移后,CPU0和CPU3不再響應(yīng)IMX-uart中斷,CPU1上IMX-uart中斷次數(shù)由15次增加到了115次。我曾經(jīng)在一個(gè)雙核硬件平臺(tái)上遇到過串口和SPI同時(shí)需要響應(yīng)大量中斷,它們互相影響導(dǎo)致中斷響應(yīng)不及時(shí)而出現(xiàn)數(shù)據(jù)丟失和輸出不及時(shí)的情況,最終就是通過中斷綁核解決的。中斷綁核其實(shí)不能完全消除對(duì)實(shí)時(shí)性的影響,只能最大程度去降低中斷對(duì)進(jìn)程的影響,因?yàn)橄到y(tǒng)中NMI中斷和本地時(shí)鐘中斷無法遷移和禁止。除了中斷可以綁核,應(yīng)用層的進(jìn)程和線程也可以改變它們與CPU的親和性,比如遷移到中斷較少的核上,也能在一定程度上提升進(jìn)程的實(shí)時(shí)性。

2.3進(jìn)程調(diào)度算法

除了前面提到的時(shí)鐘和中斷外,還有一個(gè)影響實(shí)時(shí)性最大的因素就是操作系統(tǒng)的調(diào)度算法。Linux 系統(tǒng)目前默認(rèn)采用的是完全公平調(diào)度算法( CFS ),它按照各個(gè)進(jìn)程的權(quán)重來分配運(yùn)行時(shí)間,在默認(rèn)使用 CFS 的情況下,我們可以給有實(shí)時(shí)性需求的進(jìn)程分配更高的優(yōu)先級(jí)和權(quán)重,可以看做是通過賦予更高的優(yōu)先級(jí)來獲得更好的實(shí)時(shí)性。 Linux內(nèi)核目前支持多種調(diào)度類,每一種調(diào)度類都是同一類型調(diào)度策略的集合,目前支持的調(diào)度類有:stop、deadline、realtime、CFS、idle。通常情況下進(jìn)程都可選以上的幾種調(diào)度類,他們的優(yōu)先級(jí)依次由高到底排序,其中deadline調(diào)度類可選的調(diào)度策略有SCHED_DEADLINE,realtime調(diào)度類可選的調(diào)度策略有SCHED_FIFO和SCHED_RR,CFS可選的調(diào)度類有SCHED_NORMAI、SCHED_BATCH和SCHED_IDLE。在實(shí)際開發(fā)過程中,如果對(duì)時(shí)間有嚴(yán)格要求的實(shí)時(shí)進(jìn)程可以選擇deadline調(diào)度類,其他情況可以參考使用對(duì)應(yīng)的調(diào)度策略,改變調(diào)度策略,是最直接的一種優(yōu)化方式。其中deadline調(diào)度類的使用參考如下:


2.4 內(nèi)核其他限制

除了內(nèi)核本身的調(diào)度算法的原因,Linux內(nèi)核的調(diào)度模塊當(dāng)中還有其他限制因素。比如為了防止某個(gè)進(jìn)程或某一個(gè)進(jìn)程組長(zhǎng)時(shí)間的占用 CPU 時(shí)間, Linux 內(nèi)核引入了一個(gè) “ 運(yùn)行帶寬 ” 的概念 ,也就是說某一個(gè)進(jìn)程或進(jìn)程組使用 CPU 的總時(shí)間不能超過這個(gè) “ 帶寬 ” 閾值,默認(rèn)值是 0.95s 。


實(shí)際開發(fā)過程中為了提高我們進(jìn)程的實(shí)時(shí)性,需要進(jìn)程長(zhǎng)時(shí)間地占用CPU資源,我們可以把這個(gè)“運(yùn)行帶寬”給禁止掉。實(shí)際上不同的產(chǎn)品和使用場(chǎng)景也會(huì)有著不同的優(yōu)化措施,如果設(shè)備的CPU核數(shù)比較多,我們可以從整體上去規(guī)劃系統(tǒng)對(duì)于CPU的使用,大量的使用中斷綁核和進(jìn)程、線程綁核達(dá)到對(duì)CPU的獨(dú)占使用。比如DPDK,它是Intel公司開發(fā)的一種高性能網(wǎng)絡(luò)加速組件。在Linux內(nèi)核中,傳統(tǒng)的網(wǎng)絡(luò)數(shù)據(jù)包的收發(fā)都是經(jīng)過網(wǎng)卡驅(qū)動(dòng)和內(nèi)核協(xié)議棧,網(wǎng)卡驅(qū)動(dòng)針對(duì)大數(shù)據(jù)包場(chǎng)景也做了大量的應(yīng)對(duì)措施,但是從本質(zhì)上來說,網(wǎng)絡(luò)包的收發(fā)在內(nèi)核中也還是依賴系統(tǒng)給我們實(shí)現(xiàn)好的軟中斷機(jī)制。 而DPDK則是使用輪詢代替了中斷,它繞過了Linux內(nèi)核的網(wǎng)絡(luò)模塊(驅(qū)動(dòng)和協(xié)議棧),不需要頻繁的進(jìn)行數(shù)據(jù)的拷貝,使得用戶空間可以直接看到硬件網(wǎng)卡的數(shù)據(jù),這大大減小了數(shù)據(jù)傳遞路程上的開銷。下面這張圖就是使用輪詢和DPDK獨(dú)占CPU的一個(gè)例子。


再比如,irqbalance,它用于中斷收集分配,會(huì)根據(jù)系統(tǒng)的負(fù)載情況自動(dòng)進(jìn)入性能模式和節(jié)能模式,會(huì)將中斷平均分配到不同的CPU上去處理,特殊情況下我們需要禁止這個(gè)功能。還有其他比如禁止軟鎖、虛擬內(nèi)存管理優(yōu)化等。從上面可以看出,實(shí)時(shí)性優(yōu)化的方法多種多樣,甚至使用使用輪詢代替了中斷。但是關(guān)鍵還是在于我們要了解Linux內(nèi)核模塊的一些運(yùn)行機(jī)制,和這些機(jī)制在實(shí)現(xiàn)上本身就存在的缺點(diǎn),只有這樣我們才能針對(duì)具體問題作出對(duì)應(yīng)的優(yōu)化措施。以上提到的這些方法只是從大的方向而且很淺顯去分析和介紹Linux內(nèi)核的實(shí)時(shí)性影響因素和對(duì)應(yīng)的優(yōu)化措施??偨Y(jié)起來有以下幾點(diǎn):

  1. 中斷優(yōu)先級(jí)高,要減少中斷對(duì)進(jìn)程的影響;

  2. 進(jìn)程之間有優(yōu)先級(jí)之分,要合理改變優(yōu)先級(jí);

  3. 內(nèi)核模塊的實(shí)現(xiàn)機(jī)制限制,在特殊情況下使用輪訓(xùn);

  4. 提升系統(tǒng)節(jié)拍,提升定時(shí)精度;

  5. 禁止irqbalance,防止進(jìn)入節(jié)能或休眠模式;


還有其他更為深入的細(xì)節(jié)我們沒有深入分析,比如Linux進(jìn)程切換耗時(shí),中斷響應(yīng)耗時(shí)、內(nèi)存分配開銷以及普通定時(shí)器精度和高精度定時(shí)器精度等,這些都是從細(xì)分的模塊方向去研究并優(yōu)化。進(jìn)程的切換涉及到主調(diào)度器和周期調(diào)度器,它們都不可避免地涉及到定時(shí)器,目前Linux內(nèi)核的高精度定時(shí)器也很難做到us級(jí)別,這也就決定了在調(diào)度的時(shí)間上也不是那么地準(zhǔn)確,再加上內(nèi)核中充斥著大量的自旋鎖,而自旋鎖的使用會(huì)關(guān)閉CPU的中斷進(jìn)而影響實(shí)時(shí)性,所以在開發(fā)過程中更加提高了對(duì)我們自身的水平要求。

3.總結(jié)

前面列舉的這些優(yōu)化措施實(shí)施起來很簡(jiǎn)單,但對(duì)于我們自身來說更要理解為什么要這么做。深入去分析Linux內(nèi)核的機(jī)制,實(shí)際的去閱讀內(nèi)核的模塊源碼,才會(huì)在實(shí)時(shí)性或者Linux內(nèi)核的學(xué)習(xí)道路上收獲更多。比如閱讀內(nèi)核源碼才會(huì)知道tasklet和workqueue的應(yīng)用場(chǎng)景的不同,盡管它們都是“中斷下半部”之一,但是它們?cè)趦?nèi)核當(dāng)中執(zhí)行的優(yōu)先級(jí)還是有很大區(qū)別。只有閱讀內(nèi)核源碼,才會(huì)知道tasklet和hrtimer也是基于軟中斷的,而且這個(gè)軟中斷也有優(yōu)先級(jí)之分。也只有閱讀內(nèi)核源碼,才會(huì)知道系統(tǒng)目前實(shí)現(xiàn)了多少種軟中斷,甚至我們自己也可以實(shí)現(xiàn)軟中斷獲得實(shí)時(shí)性的提升,盡管Linux內(nèi)核不建議我們這么做。除了閱讀內(nèi)核的源碼,掌握調(diào)試跟蹤內(nèi)核的工具也必不可少,比如 ftrace 、 trace-cmd 、 kernelshark 、 perf 等。 俗話說,工欲善其事必先利其器,熟練掌握這些工具的使用會(huì)讓我們優(yōu)化工作更高效。ftrace 是一個(gè)很強(qiáng)大的調(diào)試工具,除了常用的函數(shù)跟蹤器能讓我們輕松知道一個(gè)函數(shù)的執(zhí)行耗時(shí)之外,它強(qiáng)大的 event 機(jī)制,更是可以直接讓我們?cè)隍?qū)動(dòng)或者內(nèi)核中添加跟蹤點(diǎn),輸出內(nèi)核執(zhí)行過程中的各類數(shù)據(jù),讓我們輕松洞察內(nèi)核的執(zhí)行過程。 總之,實(shí)時(shí)性優(yōu)化是一條漫長(zhǎng)的道路,一路上也充滿了各種未知,鉆研越深越對(duì)它充滿好奇,也越覺得Linux內(nèi)核神奇。比如你可能會(huì)好奇在Linux內(nèi)核中一個(gè)進(jìn)程從被喚醒到真正去執(zhí)行這個(gè)過程花了多長(zhǎng)時(shí)間。又比如一個(gè)外部中斷,從它被觸發(fā)到真正走到用戶注冊(cè)的中斷處理函數(shù),這個(gè)過程又花了多長(zhǎng)時(shí)間。只有自己親自到設(shè)備上去調(diào)試,去嘗試弄明白這些問題了才會(huì)發(fā)現(xiàn)Linux內(nèi)核有趣的地方,也才會(huì)越走越充實(shí)。以上只是我自己在工作過程中積累的一點(diǎn)觀點(diǎn)看法,如果讀者面對(duì)Linux內(nèi)核不知道從何處入手的話,個(gè)人建議不妨從實(shí)時(shí)性優(yōu)化這個(gè)方向入手,逐漸深入。


原文作者:Linux閱碼場(chǎng)



談?wù)凩inux內(nèi)核的實(shí)時(shí)性優(yōu)化的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
顺昌县| 阿荣旗| 苗栗市| 措勤县| 通州区| 博兴县| 扶沟县| 当涂县| 霸州市| 大化| 集安市| 新河县| 彰化市| 闽清县| 商都县| 工布江达县| 锡林郭勒盟| 滨海县| 英超| 宁远县| 柳林县| 留坝县| 胶南市| 阿图什市| 游戏| 伊川县| 定兴县| 西充县| 陈巴尔虎旗| 镇巴县| 会宁县| 六盘水市| 象山县| 南溪县| 晋州市| 上饶市| 措美县| 达尔| 隆回县| 阜新| 柳江县|