<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LWN:要提供更好的 OOM 調(diào)試工具!

          共 2607字,需瀏覽 6分鐘

           ·

          2022-05-22 17:47

          關(guān)注了就能看到更多這么棒的文章哦~

          Better tools for out-of-memory debugging

          By Jonathan Corbet
          May 11, 2022
          LSFMM
          DeepL assisted translation
          https://lwn.net/Articles/894546/

          Out-of-memory(OOM)的情況是用戶、系統(tǒng)管理員以及內(nèi)核開發(fā)人員都很怕面對(duì)的。通常人們只知道某處正在使用大量?jī)?nèi)存,而系統(tǒng)內(nèi)存已經(jīng)全用完了,但內(nèi)核幾乎沒(méi)有提供太多信息來(lái)幫助人們弄清內(nèi)存去哪里了。在 2022 年 Linux 存儲(chǔ)、文件系統(tǒng)、內(nèi)存管理和 BPF 峰會(huì)(LSFMM)的內(nèi)存管理會(huì)議上,Kent Overstreet 問(wèn)道,怎樣才能改善 OOM 報(bào)告出來(lái)的信息,并減少所有參與者的痛苦。

          他介紹到,當(dāng) OOM 問(wèn)題發(fā)生時(shí),內(nèi)核會(huì)向系統(tǒng)日志寫一份報(bào)告,但這些報(bào)告往往不包括由 slab allocator 管理的內(nèi)存的相關(guān)信息。有時(shí)候可能收集了數(shù)百份這種報(bào)告,但仍然未能確認(rèn)出問(wèn)題在哪里。通過(guò)他一直在研究的一個(gè)新的上報(bào)系統(tǒng)(在 LWN 中有簡(jiǎn)單介紹),這種報(bào)告中只包括分配內(nèi)存最多的十個(gè) slab,這往往就是對(duì)他最有用的信息了。對(duì)于調(diào)試 OOM 問(wèn)題來(lái)說(shuō),更重要的是關(guān)于內(nèi)核 shrinker 功能的信息,這些 shrinker 負(fù)責(zé)在其他地方需要內(nèi)存的時(shí)候從 cache 中回收內(nèi)存。報(bào)告中目前還沒(méi)有關(guān)于 shrinker 正在做什么的相關(guān)信息,但是 Overstreet 的新報(bào)告機(jī)制可以包括對(duì)每個(gè) shrinker 的請(qǐng)求,以及 shrinker 實(shí)際能夠釋放多少內(nèi)存。

          他說(shuō),這些信息很有用,但這只是一個(gè)開始。自 2006 年以來(lái),OOM 報(bào)告代碼一直沒(méi)有多少變化,而且已經(jīng)顯得老化過(guò)時(shí)了,有很大的改進(jìn)空間。在 OOM 報(bào)告方面做了很多工作的 Johannes Weiner 補(bǔ)充說(shuō),即使是 2006 年的工作其實(shí)也是 "大部分是重構(gòu)性質(zhì)的"。大家普遍認(rèn)為,開發(fā)人員需要更好的工具來(lái)解決這些內(nèi)存耗盡的情況。

          Overstreet 說(shuō),問(wèn)題的一部分是,以人類可讀的方式從內(nèi)核輸出信息并不容易。雖然有各種 "漂亮 print 機(jī)制" 可用,大部分是以特殊的 printk() format specifier 描述符的形式。但這些都隱藏在 printk() 代碼中,很難找到,漂亮的打印方式最好放在管理它們所打印的數(shù)據(jù)的代碼中。他說(shuō),有了正確的基礎(chǔ)設(shè)施,內(nèi)核可以有 "成千上萬(wàn)的 pretty printers",輸出會(huì)變得更好。

          關(guān)于具體如何改進(jìn) OOM 報(bào)告,他建議增加速率限制來(lái)作為第一步。比如說(shuō),一旦都已經(jīng)打印了十幾份報(bào)告,那后續(xù)的就不可能再有什么價(jià)值了。重新組織報(bào)告內(nèi)容,將內(nèi)核空間和用戶空間的內(nèi)存信息分開則會(huì)很有幫助。關(guān)于 page allocato 中的碎片情況的信息是必要的,如上所述,需要更多關(guān)于 shrinker 的信息。

          Weiner 說(shuō),過(guò)去的報(bào)告只打印最耗費(fèi)內(nèi)存的任務(wù),而不是所有的任務(wù),但由于某種原因,這個(gè)機(jī)制被刪除了。Michal Hocko 回答說(shuō),把最重要的任務(wù)挑出來(lái)打印出來(lái)并不容易,它需要對(duì) task list 加鎖,這個(gè)操作開銷很大。除此之外,關(guān)于系統(tǒng)狀態(tài)的部分信息可能會(huì)產(chǎn)生誤導(dǎo),使人很難得到完整了解;如果任務(wù)的數(shù)量讓系統(tǒng)不堪重負(fù)了,那么其實(shí)就不用關(guān)心那幾個(gè)最主要的內(nèi)存消耗者了。報(bào)告中應(yīng)該有什么內(nèi)容是需要取決于當(dāng)時(shí)的情況的。例如,如果一個(gè) GFP_NOWAIT 分配請(qǐng)求最終失敗了,那么可能就跟 shrinker (在這種情況下不會(huì)被調(diào)用)無(wú)關(guān)了。對(duì)于高 order 的內(nèi)存分配也是如此,在這種情況下,compaction 工作也會(huì)失敗,開發(fā)者需要知道原因。他說(shuō),現(xiàn)在報(bào)告中的內(nèi)容是一種妥協(xié),也就是只有那些通常情況下有用的信息。

          Overstreet 說(shuō),報(bào)告的內(nèi)容必定會(huì)是妥協(xié)的結(jié)果,但有可能創(chuàng)造出比內(nèi)核現(xiàn)在的更好的報(bào)告。Hocko 說(shuō),他平時(shí)必須處理大量的 OOM 報(bào)告,他的感覺是,報(bào)告中的數(shù)字實(shí)在太多了。他經(jīng)常想做的是檢查 slab allocator 所使用的內(nèi)存相對(duì)于 LRU list 上的內(nèi)存的比例。如果 LRU 內(nèi)存占主導(dǎo)地位,那么問(wèn)題幾乎肯定在用戶空間,報(bào)告中如果能明確指出這種情況,就會(huì)有所幫助。

          Weiner 建議先提供最有用的 summary 信息;其余的信息可以在之后進(jìn)行。這些報(bào)告中數(shù)據(jù)是否太多則不一定是個(gè)問(wèn)題,尤其是如果這個(gè)機(jī)制也有速率限制的話。Hocko 反駁說(shuō),雖然速率限制在理論上來(lái)說(shuō)是不錯(cuò)的,但實(shí)際上并不會(huì)奏效。問(wèn)題是 printk()會(huì)很慢,尤其是在使用 serial console 的時(shí)候。僅僅把報(bào)告中的所有信息打印出來(lái)就會(huì)使機(jī)器癱瘓,而且觸發(fā)速率控制會(huì)需要太長(zhǎng)時(shí)間。

          Ira Weiny 問(wèn)道,為什么內(nèi)存可以被分配出去而內(nèi)核卻不知道它去了哪里。問(wèn)題是,這里并沒(méi)有用于追蹤的基礎(chǔ)設(shè)施。Overstreet 說(shuō),他有一種機(jī)制,可以按調(diào)用地點(diǎn)來(lái)跟蹤內(nèi)存使用情況,效率很高,足以在生產(chǎn)系統(tǒng)中使用。它采用了 dynamic debugging 機(jī)制。pr_debug() 宏被修改為在調(diào)用位置創(chuàng)建一個(gè)靜態(tài)結(jié)構(gòu),放在它自己的 ELF 內(nèi)。然后,這個(gè)機(jī)制可以用來(lái)把 kmalloc()的調(diào)用 wrap 起來(lái),從而記住它們來(lái)自哪里。

          Hocko 問(wèn),現(xiàn)有的 tracing 機(jī)制不夠嗎?Overstreet 回答說(shuō),他希望有一個(gè)始終處于開啟狀態(tài)的東西,這樣他就可以在任何時(shí)候來(lái)查看分配數(shù)量。Paul McKenney 建議使用一個(gè) BPF 程序,在地圖上存儲(chǔ)調(diào)用位置的信息。不過(guò),Weiner 回答說(shuō),他曾經(jīng)試過(guò)一次,初看起來(lái)很容易,做起來(lái)要更棘手。有一些情況,例如在中斷處理程序中釋放內(nèi)存,就是很難處理的。

          會(huì)議結(jié)束時(shí)沒(méi)有得出什么確切的結(jié)論。Overstreet 最后說(shuō),他一直在內(nèi)核中 "發(fā)現(xiàn)一些實(shí)現(xiàn)得不太好東西",而且開發(fā)人員沒(méi)有以他們本來(lái)應(yīng)該做的方式來(lái)看待內(nèi)存分配。如果幸運(yùn)的話,將來(lái)會(huì)有更好的工具來(lái)改善這種狀況。

          全文完
          LWN 文章遵循 CC BY-SA 4.0 許可協(xié)議。

          歡迎分享、轉(zhuǎn)載及基于現(xiàn)有協(xié)議再創(chuàng)作~

          長(zhǎng)按下面二維碼關(guān)注,關(guān)注 LWN 深度文章以及開源社區(qū)的各種新近言論~



          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一性一乱一交一视爱豆传媒 | 殴欧美1区2区精品裸体照片 | 台湾午夜成人免费影院在线看 | 五月婷婷黄色片 | 青娱乐中文字幕 |