环境

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)逻辑相关推荐

  1. ceph bluestore源码分析:非对齐写逻辑

    文章目录 环境 原理说明 总结 环境 ceph:12.2.1 场景:ec 2+1 部署cephfs,执行如右写模式:dd if=/dev/zero of=/xxx/cephfs bs=6K count ...

  2. ceph bluestore 源码分析:ceph-osd内存查看方式及控制源码分析

    文章目录 内存查看 内存控制 内存控制源码分析 通过gperftools接口获取osd进程实际内存 动态设置cache大小 动态调整cache比例 trim释放内存 本文通过对ceph-osd内存查看 ...

  3. ceph bluestore源码分析:admin_socket实时获取内存池数据

    环境: 版本:ceph 12.2.1 部署完cephfs 使用ceph-fuse挂载,并写入数据 关键参数: debug_mempool = true 将该参数置为true即可查看详细的blustor ...

  4. ceph bluestore源码分析:C++ 获取线程id

    阅读ceph源码过程中需要明确当前操作是由哪个线程发出,此时需要根据线程id来确认线程名称 C++获取线程id是通过系统调用来直接获取 函数描述 头文件:<sys/syscall.h> 函 ...

  5. Android UIL图片加载缓存源码分析-内存缓存

    本篇文章我们来分析一下著名图片加载库Android-Universal-Image-Loader的图片缓存源码. 源码环境 版本:V1.9.5 GitHub链接地址:https://github.co ...

  6. java disruptor压测_Java并发框架Disruptor实现原理与源码分析(二) 缓存行填充与CAS操作...

    ##缓存行填充 关于缓存行填充在我个人的印象里面第一次看到是在Java的java.util.concurrent包中,因为当时很好奇其用法背后的逻辑,所以查了很多资料才明白到底是怎么回事*(也许事实上 ...

  7. 我的世界java刷怪数量_我的世界Minecraft源码分析(1):刷怪逻辑

    这个系列通过对我的世界Minecraft源码进行拆分讲解,让大家可以清除的了解一款游戏是怎么一步步被实现出来的,下面就介绍Minecraft源码第一篇内容,关于刷怪逻辑. 生成循环 生物大致划分为四种 ...

  8. SugarCRM源码分析之缓存

    本篇分析下SugarCRM的缓存,缓存文件主要存放在./include/SugarCache里,实例化主要是SugarCache::instance()方法来实现. // ./include/Suga ...

  9. ecshop源码分析——静态缓存static_c…

    http://guozhiwei.javaeye.com/blog/673291 http://www.phpall.cn static_caches缓存文件 存放在ecshop/temp/stati ...

最新文章

  1. java 数字的位数_Java判断数字位数的方法总结
  2. 使用cf curl查看SAP云平台上的应用各项明细
  3. php自动转换和强制转换,Java数据类型转换(自动转换和强制转换)
  4. java缓存技术_java缓存技术
  5. 第五章 计算机故障诊断与排除
  6. 吴军《智能时代》序言汉译英练习
  7. Android学习之为按钮添加事件监听器的两种方法
  8. OC 实现的几个排序算法
  9. CListCtrl行高问题最终解决方法
  10. 蓝桥杯2016年第七届JavaC组国赛第一题-平方末尾
  11. 30.yii2 --- 全文检索简介
  12. Scala之flatMap操作
  13. 恭祝大家2019新年吉祥顺利!
  14. VBA新手教程:抽卡模拟实战(3)
  15. 泰迪杯数据挖掘挑战赛—数据预处理(二)
  16. 协议--SIP/SDP
  17. ps怎么加底部阴影_ps物体底部阴影怎么做阴影有立体感
  18. MineCraft mod开发环境搭建
  19. 你知道h5游戏是什么吗,怎么制作一款h5案例?
  20. 【读书笔记】《中央帝国的财政密码》

热门文章

  1. Swift 中 insetBy(dx: CGFloat, dy: CGFloat) - CGRect 用法详解
  2. python基础:python扩展包的安装方式
  3. 奇妙的算法之LCS妙解
  4. Servlet开发入门
  5. 3种方式理解旋转变换
  6. 算法设计与分析第2章 递归与分治策略
  7. mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)
  8. 镁光ssd管理工具 linux,在 SSD 上使用 Btrfs 文件系统的相关优化
  9. centos 下安装mysql,linux(Centos7)下安装mysql8.0.18的教程图解
  10. 超算学院计算机系吧,上海交通大学计算机科学与工程系(CSE)