日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

ceph bluestore 源码分析:刷缓存(trim)逻辑

發布時間:2023/11/27 生活经验 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ceph bluestore 源码分析:刷缓存(trim)逻辑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境

ceph版本:12.2.1
部署模式:ec 2+1
osd: 3個 且資源池已經有數據
執行命令:ceph daemon osd.0 flush_store_cache 進行刷緩存。即將dump_mempools內存池管理的bluestore cache中的無用數據進行釋放

主要參數:

bluestore_cache_trim_interval = 0.2 #bluestore cache trim的時間間隔
bluestore_cache_trim_max_skip_pinned # trim cache的時候,如果遇見item是pin的,計數+1,計數超過此值后,停止做trim。默認為64
bluestore_cache_type = 2q #blustore cache類型,默認是2q
bluestore_2q_cache_kin_ratio = 0.5 #2q cache中真正存儲新的緩存頁面的鏈表 Ain 所占用整個cache空間的比例
bluestore_2q_cache_kout_ratio = 0.5 # 2q cache中存儲被正常淘汰的緩存頁面的鏈表 Alout 所占用整個cache的空間比例
debug_bluestore = 20/20 #設置bluestore的debug日志級別
debug_bdev = 20/20 #設置bdev的debug日志級別

刷緩存源碼分析

刷緩存方式主要有兩種,兩種基本邏輯沒有什么區別

  1. osd內部bstore_mempool線程自己每隔一時間調用trim
  2. OSD 子線程 admin_socket接收到終端用戶 flush_store_cache信號調用trim函數

第一種方式

第二種方式

基本源碼調用邏輯很簡單,以我們執行ceph daemon osd.0 flush_store_cache命令的源碼調用函數棧如下:

/usr/bin/ceph-osd(BlueStore::SharedBlob::put()+0x2c) 
/usr/bin/ceph-osd(BlueStore::Extent::~Extent()+0xd1) 
/usr/bin/ceph-osd(BlueStore::Onode::put()+0x96) //回收onode磁盤空間,調用extent的析構函數,sharedblob的析構函數
/usr/bin/ceph-osd(BlueStore::TwoQCache::_trim(unsigned 
/usr/bin/ceph-osd(BlueStore::Cache::trim_all()+0x30) 
/usr/bin/ceph-osd(BlueStore::flush_cache()+0x7c) //調用flush_cache函數執行trim
/usr/bin/ceph-osd(OSD::asok_command(std::basic_string<char,  //admin_socket線程處理命令

刪除onde的時候即Onode::-put函數,先將onode從當前onode_map中刪除,再析構掉onode對象

remove掉sharedblob磁盤數據結構。remove過程中同樣需要將sharedblob先從sharedblob_set中移除,由remove函數執行,然后再釋放sharedblob空間

這里介紹幾個bluestore常駐內存的數據結構:

  • Cache基類
  • 在管理用戶數據的onode和lcollection之間有一個結構 OnodeSpace

    這里可以看到一個每個bluestore可以包含多個cache。因為不同PG之間的客戶端請求可以并發處理,為了提升性能,每個OS相應得會設置多個PG工作隊列,bluetore 中的Cache實例個數與之對應
  • 在真正用戶數據blob和cache之間的數據結構BufferSpace
  • BufferSpace的管理的基本單元Buffer,每個Buffer負責管理blob中的一段數據
  • TwoQCache類

    可以看到TwoQCache維護四個隊列。所有的OnodeBuffer最終都加入Cache,進行全局熱度識別和應用淘汰策略。在BlueStore中的2Q實現,這兩類數據分別應用了不同的淘汰策略:針對管理用戶數據的單元Onode采用LRU,針對用戶數據單元buffer使用2Q算法。

總結

以上是生活随笔為你收集整理的ceph bluestore 源码分析:刷缓存(trim)逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。