<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:給kernel的swap添加一個抽象層!

          共 2400字,需瀏覽 5分鐘

           ·

          2024-06-12 13:21

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

          A new swap abstraction layer for the kernel

          By Jonathan Corbet
          May 23, 2024
          LSFMM+BPF
          Gemini-1.5-flash translation
          https://lwn.net/Articles/974587/

          交換(swapping)在本質(zhì)上可能是一種內(nèi)存管理技術(shù),但其實現(xiàn)也涉及內(nèi)核的文件系統(tǒng)和存儲層。因此,在 2024 年 Linux 存儲、文件系統(tǒng)、內(nèi)存管理和 BPF 峰會(2024 Linux Storage, Filesystem, Memory-Management and BPF Summit)上,由 Chris Li 主持的關(guān)于內(nèi)核交換抽象層的會議由這三個領(lǐng)域共同舉辦也就不足為奇了。Li 對改進(jìn)子系統(tǒng)有一些雄心勃勃的想法,但要實現(xiàn)可行的方案可能并不容易。

          Li 開始介紹了當(dāng)前內(nèi)核維護(hù)的交換功能的狀態(tài)開始,以了解新實現(xiàn)需要保留哪些內(nèi)容。這里的關(guān)鍵數(shù)據(jù)是交換偏移量(swap offset),即交換文件中可以找到有關(guān)已換出頁面的其他信息的存儲位置。內(nèi)核中的其他信息都是可選的。他說,這種信息的散布是靈活的,但也可能是痛苦的根源。

          當(dāng)前的交換設(shè)計在內(nèi)存效率方面很高,但很復(fù)雜。可以通過使用更多內(nèi)存來改進(jìn)它,這實際上相當(dāng)于為了獲得更好的結(jié)果而走向更糟的結(jié)果。David Hildenbrand 表示,交換層所需的所有資源都是預(yù)先分配的,因為在系統(tǒng)需要交換時嘗試分配內(nèi)存很容易失敗。這種預(yù)分配是為什么非常需要讓開銷最小化的原因;如果能找到減少預(yù)分配的方法,這些開銷就不那么令人擔(dān)憂了。在不使用交換時消耗更少的內(nèi)存會很好,但當(dāng)需要交換時必須分配內(nèi)存就不好了。

          Li 同意系統(tǒng)通常情況下不會進(jìn)行交換;在這種情況下,那些預(yù)分配的內(nèi)存都完全被浪費了。另一方面,當(dāng)發(fā)生大量交換時,交換層中產(chǎn)生的內(nèi)存高消耗也會造成損害。

          他最初提議為每個 交換項(swap entry) 添加一個字節(jié);這用于保存一些標(biāo)志。完整的交換映射(full swap map,用于跟蹤交換設(shè)備中空間的使用情況)不會預(yù)先分配,而是根據(jù)需要進(jìn)行擴(kuò)展。但是,添加單個字節(jié)的問題是,它會將一個 4 字節(jié)項變?yōu)?5 字節(jié),這將導(dǎo)致對齊問題。因此,它應(yīng)該增加 4 個字節(jié),這將允許添加指針。但是,如果添加了 8 個字節(jié),就可能做更多的事情了,包括來動態(tài)分配交換項結(jié)構(gòu)。它的 size 可以變化,正如 已針對內(nèi)存描述符提出的那樣。復(fù)合交換項可以共享此描述符,最終,這些好處將會讓這 8 個額外字節(jié)的成本變得很值得。

          他說,對直接交換(directly swapping)多尺寸透明巨頁 (mTHP) 的支持已添加到 mm-unstable 樹中。將 64KB mTHP 交換到 zram 設(shè)備可以顯著提高壓縮率,并節(jié)省將單頁交換出去時所需的近三分之二的 CPU 時間。但與往常一樣,存在代碼,主要表現(xiàn)為后端碎片化的增加。隨著時間的推移,分配 mTHP 塊的能力會下降,以至于即使在不到一半的交換空間使用的情況下,在 5 個小時后也會變得無法使用。

          他說,問題在于交換集群(swap cluster)的處理方式。集群 size 設(shè)置為等于完整的 THP size(通常為 2MB)。任何單頁分配都將從每個 CPU 列表上的第一個集群中獲取,導(dǎo)致一個部分為空的集群,該集群不能用于交換即使是 mTHP 大小塊(小于完整的 THP 大小);他不確定為什么。顯然需要一個更好的分配器。短期內(nèi),他的計劃是記錄半空的交換集群,并從中分配 mTHP 大小塊。長期計劃是為交換項創(chuàng)建一個伙伴分配器。

          但他表示,更好的分配器還不夠。由于交換層不控制交換項的生命周期,因此碎片化仍然會發(fā)生。惡意用戶可以選擇性地釋放內(nèi)存,導(dǎo)致盡管有大量交換空間可用但沒有一個可以分配。解決此問題的方法是非連續(xù)交換項,由復(fù)合交換結(jié)構(gòu)管理。頭部項將包含結(jié)構(gòu)的順序,對于簡單情況來說就足夠了。更復(fù)雜的情況將通過放棄交換空間的對齊要求來處理,并允許它不連續(xù)。

          Li 指出,這將是一個侵入性的更改。Matthew Wilcox 同意,并警告 Li 說他正在給自己創(chuàng)造“一個痛苦的世界”。Wilcox 說,這個計劃是重新發(fā)明文件系統(tǒng),內(nèi)存管理開發(fā)人員試圖設(shè)計文件系統(tǒng)的悲慘結(jié)果是眾所周知的。他建議 Li 找到一個文件系統(tǒng)開發(fā)人員合作,如果確實需要沿著這條道路走下去的話。

          Jan Kara 表示,現(xiàn)有的文件系統(tǒng)設(shè)計不適合此任務(wù),因為它們不是為了最小化內(nèi)存開銷而編寫的。但他表示,管理這種復(fù)雜性將有其成本。他建議,一個更容易的解決方案可能是設(shè)置一個最小尺寸,用在交換出去的數(shù)據(jù),以此來減少碎片化。他說,大量匿名內(nèi)存往往不會被使用,因此應(yīng)該可以將它們以更大的塊交換出去,從而減少開銷和碎片化。

          在會議結(jié)束時,Hildenbrand 表示,這個計劃引入了太多復(fù)雜性。相反,他說,交換進(jìn)和交換出的粒度應(yīng)該相互解耦。如果交換空間碎片化是一個問題,那么在交換出去之前,應(yīng)將 folio 拆分。folio 可以在交換進(jìn)來時重新組裝。Li 回答說,他當(dāng)前的設(shè)計允許部分向內(nèi)交換(inward swapping);不必將整個 folio 都換入進(jìn)來。

          和往常一樣,下一步將是等待出現(xiàn)實現(xiàn)這些想法的補丁。

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

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

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



          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧美变态性爱一区二区三区 | 国产骚逼精品视频 | 逼逼免费视频 | 欧美三级片免费网站 | 人善交精品一区二区三区 |