注意
本文档适用于 Ceph 的开发版本。
什么是内存池?
内存池(mempool)是一种跟踪内存消耗的方法。内存池代表 C++ 类和容器的内存消耗,用于以低开销评估内存泄漏和内存使用情况的其他见解。每个内存池跟踪它所包含的字节数和项目数。内存池是静态声明的,用于在 BlueStore 中识别与内存相关的检查。
我们可以跟踪的一些常见内存池
bloom_filter: 跟踪缓存池中已有的对象,以确定池中正在访问哪些对象bluestore_alloc: 记录分配器完成的实际分配bluestore_inline_bl: 衡量内联缓冲区的编码长度bluestore_fsck: BlueStore 元数据的文件系统一致性检查;有助于在 OSD 修复期间进行跟踪和调试bluestore_txc: 记录已提交事务计数器bluestore_writing_deferred: 衡量延迟的小型写入,即首先写入 RocksDB WAL,然后刷新到磁盘bluestore_writing: 记录正在进行的写入缓冲区bluefs: 类似文件系统的接口;提供足够的功能,允许 RocksDB 存储其“文件”并与 BlueStore 共享相同的原始设备buffer_anon: 存储任意缓冲区数据buffer_meta: 与 buffer anon 缓冲区相关的所有元数据bluestore_cache_data: 用于写入和延迟写入的内存池bluestore_cache_onode: BlueStore 缓存中的对象节点(onode)元数据bluestore_cache_meta: 存储在 PREFIX_OBJ 下的键bluestore_cache_other: 目前记录map_t: 用于跟踪 SharedBlob 磁盘上的原始范围以及具有 blob 命名空间的内存中 Blobcoll_map: collections_mapcsum_data: 校验和数据
bluestore_cache_buffer: 记录缓冲区缓存分片bluestore_extent: 逻辑(以及物理)范围,指向 blob 的某个部分bluestore_blob: 与缓存缓冲区关联的内存中 blob 元数据bluestore_shared_blob: 内存中共享 blob 状态;存储对其所属集合的引用(包括缓存缓冲区)bluefs_file_reader: 记录 bluefs 文件读取器缓冲区bluefs_file_writer: 记录 bluefs 文件写入器缓冲区
检查内存池使用情况
查看这些内存池中 BlueStore 内存分配的命令
$ ceph daemon osd.NNN dump_mempools