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

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

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

探究slab在內(nèi)核內(nèi)存管理和用戶態(tài)Memcached的雙重存在

B4Pb_gh_6fde77c ? 來源:Linux閱碼場 ? 作者: 宋寶華 ? 2021-08-13 14:55 ? 次閱讀

很多基礎(chǔ)的概念,將跨越軟件的層次而存在。比如slab,對于內(nèi)核人員,我們都知道slab是buddy之上的一層。

因為buddy作為Linux內(nèi)核最底層的內(nèi)存管理器,它分配1頁,2頁,4頁,2^n頁,但是作為內(nèi)核的堆用戶本身,經(jīng)常只是調(diào)用kmalloc()申請一個小內(nèi)存,或者調(diào)用kmem_cache_alloc()申請一個數(shù)據(jù)結(jié)構(gòu),2^n頁給它,會形成大量碎片浪費(fèi)。所以slab找buddy要了2^n頁后,內(nèi)部切割為同樣size的object,再給kmalloc和kmem_cache_alloc()拿走。

697d87de-fbba-11eb-9bcf-12bb97331649.png

它的邏輯如下:

6991d324-fbba-11eb-9bcf-12bb97331649.png

這樣一種軟件本質(zhì)意義上的需求,不會因為只是內(nèi)核就需要。比如同樣的slab算法,也被著名的用戶態(tài)軟件Memcached需要著。

Memcached是一種分布式內(nèi)存對象緩存系統(tǒng),用于動態(tài)Web等應(yīng)用以減輕數(shù)據(jù)庫的負(fù)載。它在內(nèi)存中緩存數(shù)據(jù)和對象,使用key-value對形式存儲。它的網(wǎng)站首頁(https://memcached.org/)顯示了它的基本用法邏輯:

Memcached的原理也類似內(nèi)核態(tài)page cache的原理:

69a6c658-fbba-11eb-9bcf-12bb97331649.jpg

比如你查詢一個數(shù)據(jù)庫,可以先看看Memcached里面有沒有命中,命中就直接從Memcached的內(nèi)存里面拿到值了,沒有的時候才需要去查數(shù)據(jù)庫。查到后,可以把結(jié)果放入Memcached,這樣下次再訪問同樣數(shù)據(jù),不再需要進(jìn)行數(shù)據(jù)庫的查詢動作。

Memcached也同樣采用slab分配算法來組織數(shù)據(jù)的存放,里面可以組織不同大小的chunks:

正如Linux內(nèi)核的每一種不同slab里面的object的大小不一樣。

我們安裝1個Memcached:

$ sudo apt-get install memcached

然后啟動起來,你馬上看到memcached打印說自己創(chuàng)建了各種不同chunk size的slab:

69d4799a-fbba-11eb-9bcf-12bb97331649.png

當(dāng)然,還有更多的相似性,比如Memcached里面的對象,也是LRU算法替換。所以LRU這種,也是一種本質(zhì)上的事情。

編輯:jq

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

    關(guān)注

    2

    文章

    1253

    瀏覽量

    69056
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207908
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3712

    瀏覽量

    64023
  • 管理器
    +關(guān)注

    關(guān)注

    0

    文章

    239

    瀏覽量

    18434

原文標(biāo)題:宋寶華:slab在內(nèi)核內(nèi)存管理和用戶態(tài)Memcached的雙重存在

文章出處:【微信號:gh_6fde77c41971,微信公眾號:FPGA干貨】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    內(nèi)存管理的硬件結(jié)構(gòu)

    常見的內(nèi)存分配函數(shù)有malloc,mmap等,但大家有沒有想過,這些函數(shù)在內(nèi)核中是怎么實(shí)現(xiàn)的?換句話說,Linux內(nèi)核內(nèi)存管理是怎么實(shí)現(xiàn)的
    的頭像 發(fā)表于 09-04 14:28 ?102次閱讀
    <b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>的硬件結(jié)構(gòu)

    Memcached介紹和詳解

    Memcached易于理解和維護(hù),同時也保證了其高性能。 2. 高性能:Memcached采用基于Slab Allocator的內(nèi)存管理機(jī)制
    發(fā)表于 07-17 15:58

    ESP-IDF內(nèi)核中的內(nèi)存管理如何驗證?

    請教一下,ESP-IDF 內(nèi)核中的內(nèi)存管理如何驗證
    發(fā)表于 06-19 06:30

    Linux內(nèi)核內(nèi)存管理slab分配器

    本文在行文的過程中,會多次提到cache或緩存的概念。如果沒有特殊在前面添加硬件的限定詞,就說明cache指的是slab分配器使用的軟件緩存的意思。如果添加了硬件限定詞,則指的是處理器的硬件緩存,比如L1-DCache、L1-ICache之類的。
    的頭像 發(fā)表于 02-22 09:25 ?928次閱讀
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>之<b class='flag-5'>slab</b>分配器

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)

    數(shù)組和鏈表在內(nèi)存中的區(qū)別 數(shù)組和鏈表的優(yōu)缺點(diǎn)? 數(shù)組和鏈表是常見的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲數(shù)據(jù)。它們在內(nèi)存中的存儲方式以及優(yōu)缺點(diǎn)方面存在一些顯著的差異。本文將詳細(xì)探討這些差異以及它們的優(yōu)缺點(diǎn)。 1.
    的頭像 發(fā)表于 02-21 11:30 ?645次閱讀

    Linux內(nèi)核內(nèi)存管理之ZONE內(nèi)存分配器

    內(nèi)核中使用ZONE分配器滿足內(nèi)存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內(nèi)存大小請求。
    的頭像 發(fā)表于 02-21 09:29 ?745次閱讀

    Linux內(nèi)核內(nèi)存管理架構(gòu)解析

    內(nèi)存管理子系統(tǒng)可能是linux內(nèi)核中最為復(fù)雜的一個子系統(tǒng),其支持的功能需求眾多,如頁面映射、頁面分配、頁面回收、頁面交換、冷熱頁面、緊急頁面、頁面碎片管理、頁面緩存、頁面統(tǒng)計等,而且對
    的頭像 發(fā)表于 01-04 09:24 ?554次閱讀
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>架構(gòu)解析

    內(nèi)核中的電源管理

    之前介紹的電源管理機(jī)制基本都是在Linux中實(shí)現(xiàn)的,可以看到很復(fù)雜,各種框架,明明一個操作非要轉(zhuǎn)來轉(zhuǎn)去,而且在內(nèi)核里面實(shí)現(xiàn),跟內(nèi)核的各種框架又糾纏不清,什么consumer、Framework、provider框架亂亂的。
    的頭像 發(fā)表于 11-29 09:33 ?705次閱讀
    微<b class='flag-5'>內(nèi)核</b>中的電源<b class='flag-5'>管理</b>

    Linux內(nèi)核slab性能優(yōu)化的核心思想

    今天分享一篇內(nèi)存性能優(yōu)化的文章,文章用了大量精美的圖深入淺出地分析了Linux內(nèi)核slab性能優(yōu)化的核心思想,slab是Linux內(nèi)核小對象
    的頭像 發(fā)表于 11-13 11:45 ?490次閱讀
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>slab</b>性能優(yōu)化的核心思想

    Linux內(nèi)核內(nèi)存規(guī)整總結(jié)

    1.前言 伙伴系統(tǒng)作為內(nèi)核最基礎(chǔ)的物理頁內(nèi)存分配器,具有高效、實(shí)現(xiàn)邏輯簡介等優(yōu)點(diǎn),其原理頁也盡可能降低內(nèi)存外部碎片產(chǎn)生,但依然無法杜絕碎片問題。外部碎片帶來的最大影響就是內(nèi)存足夠,但是
    的頭像 發(fā)表于 11-11 11:17 ?1148次閱讀
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>內(nèi)存</b>規(guī)整總結(jié)

    Linux 內(nèi)存管理總結(jié)

    一、Linux內(nèi)存管理概述 Linux內(nèi)存管理是指對系統(tǒng)內(nèi)存的分配、釋放、映射、管理、交換、壓縮
    的頭像 發(fā)表于 11-10 14:58 ?431次閱讀
    Linux <b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b>總結(jié)

    內(nèi)存內(nèi)核中發(fā)生頁面遷移的典型場景

    頁面遷移(page migrate)最早是為 NUMA 系統(tǒng)提供一種將進(jìn)程頁面遷移到指定內(nèi)存節(jié)點(diǎn)的能力用來提升訪問性能。后來在內(nèi)核中廣泛被使用,如內(nèi)存規(guī)整、CMA、內(nèi)存hotplug等
    的頭像 發(fā)表于 11-08 12:28 ?473次閱讀
    <b class='flag-5'>內(nèi)存</b><b class='flag-5'>內(nèi)核</b>中發(fā)生頁面遷移的典型場景

    簡述Linux內(nèi)核slab性能優(yōu)化的核心思想

    Linux 內(nèi)核slab 來自一種很簡單的思想,即事先準(zhǔn)備好一些會頻繁分配、釋放的數(shù)據(jù)結(jié)構(gòu)。然而標(biāo)準(zhǔn)的 slab 實(shí)現(xiàn)太復(fù)雜且維護(hù)開銷巨大,因此便分化出了更加小巧的 slub,因此本文討論的就是 slub,后面所有提到
    發(fā)表于 11-07 09:56 ?340次閱讀
    簡述Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>slab</b>性能優(yōu)化的核心思想

    內(nèi)存布局圖角度看內(nèi)存管理

    我們知道Linux是分為兩種狀態(tài) 用戶態(tài)內(nèi)核態(tài),Linux內(nèi)核需要跑在硬件平臺上,硬件平臺也有自己的狀態(tài)。這里還是ARM,ARM有其中處理
    的頭像 發(fā)表于 10-30 17:50 ?405次閱讀

    RT-Thread Smart qemu-virt64-riscv用戶態(tài)userapps的編譯與運(yùn)行

    rt-smart 上,為了實(shí)現(xiàn)用戶態(tài)內(nèi)核態(tài)的分離,使用了【系統(tǒng)調(diào)用】,這個系統(tǒng)調(diào)用可以認(rèn)為是個 sdk
    的頭像 發(fā)表于 10-08 15:33 ?799次閱讀
    RT-Thread Smart qemu-virt64-riscv<b class='flag-5'>用戶</b><b class='flag-5'>態(tài)</b>userapps的編譯與運(yùn)行