色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

朱輝:Linux Kernel iowait 時間的代碼原理以及內核拓展文章介紹

Linux閱碼場 ? 2018-01-05 10:09 ? 次閱讀

作者簡介

朱輝,做過幾年模擬器,做過幾年GDB,在小米電視做過幾年Linux內核優化,主要圍繞MM。

現在在HyperHQ當軟件工程師

之前在我熱愛的公眾號Linuxer看到The precise meaning of I/O wait time in Linux 這篇文章,感覺寫的不錯,就是沒有落實到源碼上感覺稍微有點晦澀,于是自己讀了一下代碼。

當task發生iowait的時候,內核對他們的處理方法是將task切換出去,讓可運行的task先運行,而在切換出去前,會將其in_iowait設置為1,再次被喚醒的時候in_iowait被設置為原值。相關函數io_schedule,io_schedule_timeout,mutex_lock_io,mutex_lock_io_nested。

例如:

朱輝:Linux Kernel iowait 時間的代碼原理以及內核拓展文章介紹

由此可見in_iowait表明了這個task是否在iowait。

另外要注意的是,這幾個切換函數除了mutex_lock_io,mutex_lock_io_nested會設置task運行狀態為TASK_UNINTERRUPTIBLE外,內核在調用io_schedule,io_schedule_timeout前都會設置task運行狀態TASK_UNINTERRUPTIBLE。

在進程切換函數__schedule在切換task的時候,如果被切換出的task的in_iowait為真,則會對這個CPU的運行隊列rq結構中的nr_iowait加1。

因為前面對task已經被設置為TASK_UNINTERRUPTIBLE,則task需要被喚醒,對nr_iowait的減少操作也是在task喚醒函數來做的。

由此可見nr_iowait可以表明某CPU上是否有task在iowait,以及數量。

因為處于iowait的task是TASK_UNINTERRUPTIBLE狀態,其并不在就緒隊列中,所以其也沒有被CPU負載均衡到其他CPU的可能,所以nr_iowait也不需要處理負載均衡問題。

當累加系統idle時間的時候,如果CPU的nr_iowait為真,也就是當前這個cpu有task在等待iowait,則記錄為iowait時間。

在打開NO_HZ的內核中,相關代碼在update_ts_time_stats。

朱輝:Linux Kernel iowait 時間的代碼原理以及內核拓展文章介紹

而沒打開的則在 account_idle_time。

朱輝:Linux Kernel iowait 時間的代碼原理以及內核拓展文章介紹

當相關/proc/stat接口被訪問時,get_iowait_time就會訪問這個時間并返回。

綜上所述,iowait時間就是CPU idle時間,但是這時候CPU上不是完全沒TASK需要運行,而是休眠的task中有一個或者若干個是iowait的task。

當然idle和iowait的時候CPU上還有idle task。

最后推薦一篇阿里內核組的文章作為擴展閱讀Kernel Documents/new iowait calculation

比較有意思是這里:

+ wait_event_interruptible_hrtimeout(ctx->wait,

+ aio_read_events(ctx, min_nr, nr, event, &ret), until);

無論超時值until是什么值,都會調用wait_event_interruptible_hrtimeout,雖然是hrtimer實時性已經很高,但是在用來實際處理wait的宏__wait_event_hrtimeout可以看到hrtimer初始化使用的是:

hrtimer_start_range_ns(&__t.timer, timeout,

current->timer_slack_ns,

HRTIMER_MODE_REL);

其中第三個參數current->timer_slack_ns是傳遞給hrtimer的觸發范圍,因為hrtimer實時性高,但是頻繁觸發系統顯然受不了,所以每次hrtimer觸發都會將時間范圍內的timer都處理掉(見__hrtimer_run_queues)。所以timeout+current->timer_slack_ns才是設置的hrtimer的最后觸發時間,current->timer_slack_ns的默認值是50000,也就是代表50000納秒。也就是這個時鐘最久會在50000納秒后觸發,當然也可能被之前的hrtimer觸發。

所以在wait_event_interruptible_hrtimeout中,一旦ctx->wait未能就緒,即使設置超時時間為0,也很可能要調用一次schedule,這導致iowait時間相差很大,也還很大幅度傷害了性能。

而這個問題也被5f785de588735306ec4d7c875caf9d28481c8b21進行了修復,這段代碼改成了:

- wait_event_interruptible_hrtimeout(ctx->wait,

- aio_read_events(ctx, min_nr, nr, event, &ret), until);

+ if (until.tv64 == 0)

+ aio_read_events(ctx, min_nr, nr, event, &ret);

+ else

+ wait_event_interruptible_hrtimeout(ctx->wait,

+ aio_read_events(ctx, min_nr, nr, event, &ret),

+ until);

從而在until為0的時候,直接調用aio_read_events。應該就不會再有那么明顯的iowait問題了,另外也因此這個修復讓io_getevents的調用得到了超過百倍的性能提升。

當然這個iowait不夠精確的原因還是存在,一旦因為需要發生task切換,還是會有不夠精確的問題。

最后要吐槽一下aio的設計,都aio了還需要wait嗎?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內核
    +關注

    關注

    3

    文章

    1382

    瀏覽量

    40373
  • Linux
    +關注

    關注

    87

    文章

    11342

    瀏覽量

    210146
  • 代碼
    +關注

    關注

    30

    文章

    4823

    瀏覽量

    68897

原文標題:朱輝(茶水): Linux Kernel iowait 時間的代碼原理

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何編譯Linux Kernel

    整個Linux內核編譯的過程非常簡單,但是內核編譯需要花費很長的時間。因為Linux內核
    發表于 06-07 16:26 ?1.1w次閱讀
    如何編譯<b class='flag-5'>Linux</b> <b class='flag-5'>Kernel</b>

    [分享資料]Linux Kernel Development Third Edition (Linux內核設計與實現)

    、進程調度、時間管理和定時器、系統調用接口、內存尋址、內存管理和頁緩存、VFS、內核同步以及調試技術等。同時《Linux內核設計與實現(原書
    發表于 09-12 00:17

    編譯你自己的Linux內核Kernel

    摘要:你馬上就會發現,你也可以獲得(get),配置(configure),編譯(compile)和安裝(install)屬于你自己的Linux內核Kernel)。目錄:引言安裝內核
    發表于 11-10 12:16

    介紹一下Linux內核編譯和更新的操作流程

    rk3399-firefly-linux.img -j4命令開始編譯內核。  內核編譯時間視電腦配置而定,內核
    發表于 06-21 09:58

    Linux內核代碼漫游

    Linux內核代碼漫游 本章試圖以順序的方式來解釋Linux代碼,以幫助讀者對源代碼的體系
    發表于 02-09 15:27 ?26次下載

    linux內核kernel-api

    linux內核kernel-api,不知道從哪兒找的了,但是你如果想要做內核編程,這是一部api函數詳盡的工具書!!!五星推薦
    發表于 10-30 17:16 ?19次下載

    怎樣去讀Linux內核代碼

    怎樣去讀Linux內核代碼
    發表于 10-25 10:15 ?13次下載
    怎樣去讀<b class='flag-5'>Linux</b><b class='flag-5'>內核</b>源<b class='flag-5'>代碼</b>

    linux kernel工作隊列及源碼解析

    1. 前言 工作隊列(workqueue)的Linux內核中的定義的用來處理不是很緊急事件的回調方式處理方法。 以下代碼linux內核版本
    發表于 10-27 10:19 ?0次下載

    嵌入式未來還是Linux的天下,并通過內核學習來闡述kernel的機理

    Kernel入門,要選本好的入門書籍,我從網上download一本《Linux內核設計與實現》。這本書簡單易讀,有OS基礎和Linux應用基礎的人一讀即懂,我現已閱過3章,感覺很不錯,
    的頭像 發表于 01-24 08:47 ?3777次閱讀

    Linux Kernel 5.2.2震撼發布!

    在首個維護版本更新之后,在kernel.org官網上已經將Linux Kernel 5.2分支標記為“Stable”,意味著已經準備好大規模部署了,所有GNU/Linux發行版本都應該
    的頭像 發表于 08-09 17:01 ?2895次閱讀

    快速理解什么是Linux內核以及Linux內核的內容

    01 前言 本文主要講解什么是Linux內核以及通過多張圖片展示Linux內核的作用與功能,以便于讀者能快速理解什么是
    的頭像 發表于 10-21 12:02 ?4322次閱讀
    快速理解什么是<b class='flag-5'>Linux</b><b class='flag-5'>內核</b><b class='flag-5'>以及</b><b class='flag-5'>Linux</b><b class='flag-5'>內核</b>的內容

    自由軟件媒體Linux Kernel 5.10華為代碼貢獻排名第一

    ?自由軟件媒體 LWN.netLinux Kernel 5.10 代碼貢獻,華為排名第一 在 Linux Kernel 5.10(下文簡稱“5.10 版本”)版本中,華為提交的補丁數量
    的頭像 發表于 01-15 14:05 ?2744次閱讀
    自由軟件媒體<b class='flag-5'>Linux</b> <b class='flag-5'>Kernel</b> 5.10華為<b class='flag-5'>代碼</b>貢獻排名第一

    Linux_Kernel_Developments內核開發

    Linux_Kernel_Developments內核開發詳細說明。
    發表于 04-07 14:27 ?37次下載
    <b class='flag-5'>Linux_Kernel</b>_Developments<b class='flag-5'>內核</b>開發

    Linux 6.1發布,微軟貢獻Linux內核代碼

    此外,公告中并沒有提及 Linux 6.1 是否是 LTS 版本。按照 Linux 內核維護者 Greg Kroah-Hartman 的說法,Linux
    的頭像 發表于 12-14 09:54 ?1269次閱讀

    Linux內核代碼的靜態檢查

    Linus在2004年開發了kernel代碼靜態檢查工具,可以檢查出kernel中潛在的風險代碼
    的頭像 發表于 06-05 14:50 ?1024次閱讀
    主站蜘蛛池模板: gay台湾无套男同志xnxⅹ | 乱码AV午夜噜噜噜噜 | 久久99re2在线视频精品 | 欧美多毛的大隂道 | 久久 这里只精品 免费 | 日本邪恶少女漫画大全 | 在教室轮流被澡高H林萌 | 97国产揄拍国产精品人妻 | 伊人精品久久久大香线蕉99 | 久久99免费视频 | 99这里有精品视频视频 | 神马电影我不卡4k手机在线观看 | 中国xxxxxz| 亚洲黄色在线观看 | 免费在线观看a视频 | 欧美午夜a级精美理论片 | 亚洲精品一区国产欧美 | 久久久国产精品免费A片蜜芽广 | 成人免费视频在 | 欧式午夜理伦三级在线观看 | 午夜日韩久久影院 | 日本久久免费大片 | 性夜夜春夜夜爽AA片A | 国产午夜精品AV一区二区麻豆 | 青柠高清在线观看完整版 | 成人毛片在线播放 | 久久精品一区二区三区资源网 | 亚洲色图另类小说 | 2020精品极品国产色在线 | 极品内射少妇精品无码视频 | 极品美女久久久久久久久久久 | YELLOW日本动漫高清免费 | 午夜福利试看120秒体验区 | 99精品国产免费久久久久久下载 | 天天干夜夜叭 | 久久99re2在线视频精品 | 诱受H嗯啊巨肉各种play | 欧美精品乱码99久久蜜桃 | 国产成人刺激视频在线观看 | 99热在线视频这里只精品 | 99久久精品费精品国产一区二 |