吴忠躺衫网络科技有限公司

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

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

3天內不再提示

探究slab在內核內存管理和用戶態Memcached的雙重存在

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

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

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

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

它的邏輯如下:

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

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

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

Memcached的原理也類似內核態page cache的原理:

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

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

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

正如Linux內核的每一種不同slab里面的object的大小不一樣。

我們安裝1個Memcached:

$ sudo apt-get install memcached

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

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

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

編輯:jq

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

    關注

    2

    文章

    1269

    瀏覽量

    69730
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210389
  • 數據庫
    +關注

    關注

    7

    文章

    3846

    瀏覽量

    64685
  • 管理器
    +關注

    關注

    0

    文章

    248

    瀏覽量

    18613

原文標題:宋寶華:slab在內核內存管理和用戶態Memcached的雙重存在

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

收藏 人收藏

    評論

    相關推薦

    Redis緩存與Memcached的比較

    Redis和Memcached都是廣泛使用的內存數據存儲系統,它們主要用于提高應用程序的性能,通過減少對數據庫的直接訪問來加速數據檢索。以下是對Redis和Memcached的比較,涵蓋了它們的一些
    的頭像 發表于 12-18 09:33 ?241次閱讀

    虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用

    在現代計算機系統中,虛擬內存是一種重要的資源管理技術,它允許系統使用硬盤空間來擴展物理內存的容量。然而,當系統運行的程序和進程超出了物理內存和虛擬
    的頭像 發表于 12-04 09:49 ?278次閱讀

    Linux下如何管理虛擬內存 使用虛擬內存時的常見問題

    在Linux系統中,虛擬內存管理是操作系統內核的一個重要功能,負責管理物理內存和磁盤上的交換空間。以下是對Linux下如何
    的頭像 發表于 12-04 09:19 ?631次閱讀

    嵌入式工程師都在找的【Linux內核調試技術】建議收藏!

    printk()調用,可以直接將關心的信息打印到屏幕上,從而觀察程序的執行路徑和變量的變化情況。 printk()類似于用戶空間的printf(),但它在內核空間使用,并受到內核日志系統的
    發表于 11-28 15:37

    Windows管理內存的三種主要方式

    Windows操作系統提供了多種方式來管理內存,以確保系統資源的有效利用和性能的優化。以下是關于Windows管理內存的三種主要方式的詳細闡述,包括堆
    的頭像 發表于 10-12 17:09 ?1337次閱讀

    內存管理的硬件結構

    常見的內存分配函數有malloc,mmap等,但大家有沒有想過,這些函數在內核中是怎么實現的?換句話說,Linux內核內存管理是怎么實現的
    的頭像 發表于 09-04 14:28 ?396次閱讀
    <b class='flag-5'>內存</b><b class='flag-5'>管理</b>的硬件結構

    Memcached介紹和詳解

    Memcached易于理解和維護,同時也保證了其高性能。 2. 高性能:Memcached采用基于Slab Allocator的內存管理機制
    發表于 07-17 15:58

    ESP-IDF內核中的內存管理如何驗證?

    請教一下,ESP-IDF 內核中的內存管理如何驗證
    發表于 06-19 06:30

    linux內核常用調優參數

     1. vm.swappiness:該參數控制系統在內存不足時,內核將頁面交換到磁盤的程度。默認值為60,建議值為10-30。   2. vm.overcommit_memory:該參數控制系統是否允許超額分配內存。默認值
    的頭像 發表于 04-01 10:31 ?2102次閱讀

    什么是HBM3E內存?Rambus HBM3E/3內存控制器內核

    Rambus HBM3E/3 內存控制器內核針對高帶寬和低延遲進行了優化,以緊湊的外形和高能效的封裝為人工智能訓練提供了最大的性能和靈活性。
    發表于 03-20 14:12 ?2791次閱讀
    什么是HBM3E<b class='flag-5'>內存</b>?Rambus HBM3E/3<b class='flag-5'>內存</b>控制器<b class='flag-5'>內核</b>

    C語言內存泄漏問題原理

    內存泄漏問題只有在使用堆內存的時候才會出現,棧內存存在內存泄漏問題,因為棧內存會自動分配和釋放。C語言代碼中堆
    發表于 03-19 11:38 ?574次閱讀
    C語言<b class='flag-5'>內存</b>泄漏問題原理

    Linux內核內存管理內核非連續物理內存分配

    的主要優點是避免了外部碎片,而缺點是需要修改內核頁表。顯然,非連續內存區域的大小必須是4096的倍數。Linux使用非連續物理內存區的場景有幾種:(1)為swap區分配數據結構;(2)為模塊分配空間
    的頭像 發表于 02-23 09:44 ?1077次閱讀
    Linux<b class='flag-5'>內核</b><b class='flag-5'>內存</b><b class='flag-5'>管理</b>之<b class='flag-5'>內核</b>非連續物理<b class='flag-5'>內存</b>分配

    Linux內核內存管理slab分配器

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

    數組和鏈表在內存中的區別 數組和鏈表的優缺點

    數組和鏈表在內存中的區別 數組和鏈表的優缺點? 數組和鏈表是常見的數據結構,用于組織和存儲數據。它們在內存中的存儲方式以及優缺點方面存在一些顯著的差異。本文將詳細探討這些差異以及它們的優缺點。 1.
    的頭像 發表于 02-21 11:30 ?1136次閱讀

    Linux內核內存管理之ZONE內存分配器

    內核中使用ZONE分配器滿足內存分配請求。該分配器必須具有足夠的空閑頁幀,以便滿足各種內存大小請求。
    的頭像 發表于 02-21 09:29 ?949次閱讀
    bet365存| 免费百家乐游戏机| 大发888娱乐场下载最高| 百家乐官网电子路单下载| 马德里百家乐的玩法技巧和规则 | 百家乐大赌城| 百家乐官网赢家电子书| 路劲太阳城样板间| 伯爵百家乐官网的玩法技巧和规则 | 彭阳县| 百家乐筹码多少钱| 百家乐官网代理博彩正网| 免水百家乐的玩法技巧和规则| 百家乐官网讯特| 星空棋牌官方下载| 百家乐游戏规则玩法| A8百家乐官网娱乐城| 裕昌太阳城业主论坛| 百家乐官网博牌规| 神农架林区| 百家乐园有限公司| 赢家百家乐官网的玩法技巧和规则 | 百家乐官网游戏唯一官网站| 六合彩130| 博彩百家乐心得| 百家乐官网网上投注文章| 大发888游戏平台 送1688元礼金领取lrm| 做生意怎么看风水| 博马百家乐官网娱乐城| 大发888娱| 澳门百家乐心理| 棋牌百家乐官网怎么玩| 大发888游戏官方下载客户端 | 功夫百家乐官网的玩法技巧和规则| 双江| 百家乐是娱乐场| 百家乐网上赌博| 百家乐官网游戏规则介绍| 最好的棋牌游戏平台| 百家乐实时赌博| 百樂坊百家乐官网的玩法技巧和规则|