日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

看看Linux是怎么統(tǒng)計iowait比率的?

Linux愛好者 ? 來源:Linux內(nèi)核那些事 ? 2023-04-27 09:28 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

我們對系統(tǒng)性能進(jìn)行優(yōu)化時,一般會使用top命令來查看系統(tǒng)負(fù)載和系統(tǒng)中各個進(jìn)程的運(yùn)行情況,從而找出影響系統(tǒng)性能的因素。如下圖所示:

f050fede-e47b-11ed-ab56-dac502259ad0.png

top

top命令會輸出很多系統(tǒng)相關(guān)的信息,如:系統(tǒng)負(fù)載、系統(tǒng)中的進(jìn)程數(shù)、CPU使用率和內(nèi)存使用率等,這些信息對排查系統(tǒng)性能問題起著至關(guān)重要的作用。

本文主要介紹top命令中的iowait指標(biāo)(如上圖中紅色方框所示)的含義和作用。

什么是iowait

什么是iowait?我們來看看 Linux 的解釋:

Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

中文翻譯的意思就是:CPU 在等待磁盤 I/O 請求完成時,處于空閑狀態(tài)的時間百分比(此時正在運(yùn)行著idle進(jìn)程)。

可以看出,如果系統(tǒng)處于iowait狀態(tài),那么必須滿足以下兩個條件:

系統(tǒng)中存在等待 I/O 請求完成的進(jìn)程。

系統(tǒng)當(dāng)前正處于空閑狀態(tài),也就是說沒有可運(yùn)行的進(jìn)程。

iowait統(tǒng)計原理

既然我們知道了iowait的含義,那么接下來看看 Linux 是怎么統(tǒng)計iowait的比率的。

Linux 會把iowait占用的時間輸出到/proc/stat文件中,我們可以通過一下命令來獲取到iowait占用的時間:

cat/proc/stat

命令輸出如下圖所示:

f098ae5a-e47b-11ed-ab56-dac502259ad0.png

stat

紅色方框中的數(shù)據(jù)就是iowait占用的時間。

我們可以每隔一段時間讀取一次/proc/stat文件,然后把兩次獲取到的iowait時間進(jìn)行相減,得到的結(jié)果是這段時間內(nèi),CPU處于iowait狀態(tài)的時間。接著再將其除以總時間,得到iowait占用總時間的比率。

現(xiàn)在我們來看看/proc/stat文件是怎樣獲取iowait的時間的。

在內(nèi)核中,每個 CPU 都有一個cpu_usage_stat結(jié)構(gòu),主要用于統(tǒng)計 CPU 一些信息,其定義如下:

structcpu_usage_stat{
cputime64_tuser;
cputime64_tnice;
cputime64_tsystem;
cputime64_tsoftirq;
cputime64_tirq;
cputime64_tidle;
cputime64_tiowait;
cputime64_tsteal;
cputime64_tguest;
cputime64_tguest_nice;
};

cpu_usage_stat結(jié)構(gòu)的iowait字段記錄了 CPU 處于iowait狀態(tài)的時間。

所以要獲取系統(tǒng)處于iowait狀態(tài)的總時間,只需要將所有 CPU 的iowait時間相加即可,代碼如下(位于源文件fs/proc/stat.c):

staticintshow_stat(structseq_file*p,void*v)
{
u64iowait;
...
//1.遍歷系統(tǒng)中的所有CPU
for_each_possible_cpu(i){
...
//2.獲取CPU對應(yīng)的iowait時間,并相加
iowait=cputime64_add(iowait,kstat_cpu(i).cpustat.iowait);
...
}
...
return0;
}

show_stat()函數(shù)首先會遍歷所有 CPU,然后讀取其iowait時間,并且將它們相加。

增加iowait時間

從上面的分析可知,每個 CPU 都有一個用于統(tǒng)計iowait時間的計數(shù)器,那么什么時候會增加這個計數(shù)器呢?

答案是:系統(tǒng)時鐘中斷。

在系統(tǒng)時鐘中斷中,會調(diào)用account_process_tick()函數(shù)來更新 CPU 的時間,代碼如下:

voidaccount_process_tick(structtask_struct*p,intuser_tick)
{
cputime_tone_jiffy_scaled=cputime_to_scaled(cputime_one_jiffy);
structrq*rq=this_rq();

//1.如果當(dāng)前進(jìn)程處于用戶態(tài),那么增加用戶態(tài)的CPU時間
if(user_tick){
account_user_time(p,cputime_one_jiffy,one_jiffy_scaled);
}
//2.如果前進(jìn)程處于內(nèi)核態(tài),并且不是idle進(jìn)程,那么增加內(nèi)核態(tài)CPU時間
elseif((p!=rq->idle)||(irq_count()!=HARDIRQ_OFFSET)){
account_system_time(p,HARDIRQ_OFFSET,cputime_one_jiffy,
one_jiffy_scaled);
}
//3.如果當(dāng)前進(jìn)程是idle進(jìn)程,那么調(diào)用account_idle_time()函數(shù)進(jìn)行處理
else{
account_idle_time(cputime_one_jiffy);
}
}

我們主要關(guān)注當(dāng)前進(jìn)程是idle進(jìn)程的情況,這是內(nèi)核會調(diào)用account_idle_time()函數(shù)進(jìn)行處理,其代碼如下:

voidaccount_idle_time(cputime_tcputime)
{
structcpu_usage_stat*cpustat=&kstat_this_cpu.cpustat;
cputime64_tcputime64=cputime_to_cputime64(cputime);
structrq*rq=this_rq();

//1.如果當(dāng)前有進(jìn)程在等待IO請求的話,那么增加iowait的時間
if(atomic_read(&rq->nr_iowait)>0){
cpustat->iowait=cputime64_add(cpustat->iowait,cputime64);
}
//2.否則增加idle的時間
else{
cpustat->idle=cputime64_add(cpustat->idle,cputime64);
}
}

account_idle_time()函數(shù)的邏輯比較簡單,主要分以下兩種情況進(jìn)行處理:

如果當(dāng)前有進(jìn)程在等待 I/O 請求的話,那么增加iowait的時間。

如果當(dāng)前沒有進(jìn)程在等待 I/O 請求的話,那么增加idle的時間。

所以,從上面的分析可知,要增加iowait的時間需要滿足以下兩個條件:

當(dāng)前進(jìn)程是idle進(jìn)程,也就是說 CPU 處于空閑狀態(tài)。

有進(jìn)程在等待 I/O 請求完成。

進(jìn)一步說,當(dāng) CPU 處于iowait狀態(tài)時,說明 CPU 處于空閑狀態(tài),并且系統(tǒng)中有進(jìn)程因為等待 I/O 請求而阻塞,也說明了 CPU 的利用率不夠充分。

這時,我們可以使用異步 I/O(如iouring)來優(yōu)化程序,使得進(jìn)程不會被 I/O 請求阻塞。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11339

    瀏覽量

    226028
  • LINUX內(nèi)核
    +關(guān)注

    關(guān)注

    1

    文章

    321

    瀏覽量

    23309
  • 時鐘中斷
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    8042

原文標(biāo)題:系統(tǒng)性能分析之|iowait是什么?

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用吉時利DMM的比率功能測量功率

    在TSP腳本和低電阻電流傳感電阻器的幫助下,我們實現(xiàn)了一個有趣的應(yīng)用,即使用DMM6500這樣的數(shù)字萬用表,通過比率功能測量功率。腳本基于的原理是,比率功能在一個讀數(shù)中同時存儲傳感和輸入電壓的電壓測量數(shù)據(jù),然后顯示輸入電壓與傳感電壓的比值。
    發(fā)表于 08-01 11:54 ?975次閱讀
    使用吉時利DMM的<b class='flag-5'>比率</b>功能測量功率

    如何在Linux使用iostat命令

    IO等待或者`iowait`,`wait`,`wa`,`%iowait`,或者`wait%`通??梢酝ㄟ^Linux系統(tǒng)監(jiān)控工具查看。例如命令行工具top、sar、atop等。
    的頭像 發(fā)表于 01-04 17:17 ?2541次閱讀

    統(tǒng)計工具箱函數(shù)匯總

    對matlab中的統(tǒng)計工具箱函數(shù)都有所介紹,比較詳細(xì),大家可以看看
    發(fā)表于 11-15 10:07

    linux統(tǒng)計文件個數(shù)

    這篇文章主要介紹了Linux統(tǒng)計當(dāng)前文件夾下的文件個數(shù)、目錄個數(shù),本文使用ls命令配合管理、grep命令實現(xiàn)統(tǒng)計需求,需要的朋友可以參考下
    發(fā)表于 07-24 08:40

    比率法電阻測量電路圖

    比率法電阻測量電路圖
    發(fā)表于 04-08 09:03 ?1184次閱讀

    一體化速印機(jī)的縮小比率/放大比率

    一體化速印機(jī)的縮小比率/放大比率    一體化速印機(jī)的縮小比率      &
    發(fā)表于 12-31 09:59 ?1600次閱讀

    用于比率計算的除法運(yùn)算電路

    用于比率計算的除法運(yùn)算電路 電路的功能 本電路是用X除輸入信號Z
    發(fā)表于 05-08 15:29 ?2063次閱讀
    用于<b class='flag-5'>比率</b>計算的除法運(yùn)算電路

    絕對輸出iMEMS陀螺儀與比率ADC的配合使用

    iMEMS陀螺儀常常與許多集成在微控制器中的低成本比率ADC配合使用。本應(yīng)用筆記將簡要介紹如何實現(xiàn)陀螺儀的絕對(不隨電源電壓變化而變化)輸出與比率ADC的連接。
    發(fā)表于 02-02 17:26 ?21次下載

    算法大全_數(shù)據(jù)的統(tǒng)計描述和分析

    算法大全第10章_數(shù)據(jù)的統(tǒng)計描述和分析,有需要的下來看看。
    發(fā)表于 01-14 17:47 ?0次下載

    RTD比率式溫度測量應(yīng)用

    比率式測量中使用RTD有一定優(yōu)勢,因為它能消除激勵電流源的精度和漂移等誤差源。下面是4線RTD比率式測量的典型電路。4線式配置的優(yōu)勢是可消除由引腳電阻產(chǎn)生的誤差。
    發(fā)表于 03-23 15:56 ?4568次閱讀
    RTD<b class='flag-5'>比率</b>式溫度測量應(yīng)用

    小差比率制動系數(shù)校驗的優(yōu)化

    針對傳統(tǒng)小差比率制動系數(shù)校驗方法存在校驗結(jié)果可能不準(zhǔn)確的問題,從固定相位調(diào)節(jié)幅值校驗方法出發(fā),得到了其簡化的等價模型,并根據(jù)校驗需滿足的條件,提出了一種小差比率制動系數(shù)校驗新方法。該方法能保證校驗
    發(fā)表于 03-16 11:21 ?0次下載
    小差<b class='flag-5'>比率</b>制動系數(shù)校驗的優(yōu)化

    加密貨幣交易中采用的夏普比率是什么

    夏普比率(Sharpe Ratio),又被稱為夏普指數(shù) --- 基金績效評價標(biāo)準(zhǔn)化指標(biāo)。夏普比率在現(xiàn)代投資理論的研究表明,風(fēng)險的大小在決定組合的表現(xiàn)上具有基礎(chǔ)性的作用。風(fēng)險調(diào)整后的收益率就是一個可以同時對收益與風(fēng)險加以考慮的綜合指標(biāo),以期能夠排除風(fēng)險因素對績效評估的不利影
    發(fā)表于 08-29 10:33 ?1625次閱讀

    比特幣的庫存與流動比率分析

    庫存與流動比率(STF)較大的商品比庫存與流動比率較小的商品更受青睞,因為它們被認(rèn)為更稀缺。黃金的比例最高,為62。這意味著,以目前的生產(chǎn)水平,需要62年才能生產(chǎn)出目前的黃金總供應(yīng)量。
    發(fā)表于 12-06 11:26 ?1954次閱讀

    帶大家看看Linux內(nèi)核如何調(diào)度進(jìn)程的

    部分,打開調(diào)度器的黑匣子,來看看Linux內(nèi)核如何調(diào)度進(jìn)程的。實際上,進(jìn)程調(diào)度器主要做兩件事:選擇下一個進(jìn)程,然后進(jìn)行上下文切換。 而何時調(diào)用主調(diào)度器調(diào)度進(jìn)程那是調(diào)度時機(jī)所關(guān)注的問題,而調(diào)度時機(jī)在之前的內(nèi)核搶占文章已經(jīng)做了詳細(xì)講解,在此不在贅述,而本文關(guān)注的調(diào)度時機(jī)是真正
    的頭像 發(fā)表于 07-26 15:14 ?2777次閱讀

    深入探究Linux系統(tǒng)噪音統(tǒng)計(osnoise tracer)

    Linux系統(tǒng)中作為一個普通線程是非常苦逼的。不僅NMI 、硬中斷、軟中斷可以打斷它,甚至其它普通線程也可以來打斷干擾到它的運(yùn)行。 如果沒有這些打斷事件,一個普通線程執(zhí)行while循環(huán),可以
    的頭像 發(fā)表于 09-18 10:53 ?2440次閱讀
    深入探究<b class='flag-5'>Linux</b>系統(tǒng)噪音<b class='flag-5'>統(tǒng)計</b>(osnoise tracer)
    万盛区| 济源市| 廉江市| 抚松县| 邢台县| 同仁县| 昭通市| 梁山县| 滨海县| 临猗县| 博乐市| 潍坊市| 义乌市| 黄骅市| 南城县| 忻州市| 古蔺县| 香港| 铜梁县| 阜新市| 黔江区| 涿州市| 双鸭山市| 三亚市| 奉新县| 中山市| 清新县| 宜昌市| 左贡县| 区。| 措美县| 沅江市| 墨玉县| 正安县| 聊城市| 开鲁县| 垫江县| 大同县| 三门峡市| 元江| 分宜县|