//path/to/socket指向某个osd的admin socket文件
#> ceph --admin-daemon {path/to/socket} config show | grep rbd
下面对其中的某些配置参数进行详细说明:

rbd cache: 是否使能缓存,默认情况下开启。
rbd cache size:最大的缓存大小,默认32MB
rbd cache max dirty:缓存中脏数据的最大值,用来控制回写,不能超过rbd cache size,默认24MB
rbd cache target dirty:开始执行回写的脏数据大小,不能超过rbd cache max dirty,默认16MB
rbd cache max dirty age: 缓存中单个脏数据的最大缓存时间,避免因为未达到回写要求脏数据长时间存在缓存中,默认1s
点评:开启Cache能显著提升顺序io的读写性能,缓存越大性能越好;如果容许一定的数据丢失,建议开启。
rbd cache max dirty object:最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分,每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能。
点评:在ceph-0.94.1中该值较小,建议按照ceph-0.94.4版本中的计算公式增大该值,如下:

obj = MIN(2000, MAX(10, cct->_conf->rbd_cache_size / 100 / sizeof(ObjectCacher::Object)));

我配置的时候取 sizeof(ObjectCacher::Object) = 128, 128是我基于代码估算的Object对象大小
rbd cache writethrough until flush:默认为true,该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写;设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
点评:如果您的Linux客户机使用的是2.6.32之前的内核建议设置为true,否则可以直接关闭。
rbd cache block writes upfront:是否开启同步io,默认false,开启后librbd要收到Ceph OSD的应答才返回。
点评: 开启后,性能最差,但是最安全。
rbd readahead trigger requests: 触发预读的连续请求数,默认为10
rbd readahead max bytes: 一次预读请求的最大io大小,默认512KB,为0则表示关闭预读
rbd readahead disable after bytes: 预读缓存的最大数据量,默认为50MB,超过阀值后,librbd会关闭预读功能,由Guest OS处理预读(防止重复缓存);如果为0,则表示不限制缓存。
点评:如果是顺序读io为主,建议开启
objecter inflight ops: 客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
objecter inflight op bytes:客户端流控,允许的最大未发送脏数据,超过阀值会堵塞应用io,为0表示不受限
点评:提供了简单的客户端流控功能,防止网络拥塞;在宿主网络成为瓶颈的情况下,rbd cache中可能充斥着大量处于发送状态的io,这又会反过来影响io性能。没有特殊需要的话,不需要修改该值;当然如果带宽足够的话,可以根据需要调高该值
rbd ssd cache: 是否开启磁盘缓存,默认开启
rbd ssd cache size:缓存的最大大小,默认10G
rbd ssd cache max dirty:缓存中脏数据的最大值,用来控制回写,不能超过rbd ssd cache size,默认7.5G
rbd ssd cache target dirty:开始执行回写的脏数据大小,不能超过rbd cache max dirty,默认5G
rbd ssd chunk order:缓存文件分片大小,默认64KB = 2^16
rbd ssd cache path:缓存文件所在的路径
点评:这是盛大游戏G云自己开发的带掉电保护的rbd cache,前面四个参数与前述rbd cache *含义相似,rdb ssd chunk size定义缓存文件的分片大小,是缓存文件的最小分配/回收单位,分片大小直接影响缓存文件的使用效率;在运行过程中librbd也会基于io大小动态计算分片大小,并在合适的时候应用到缓存文件.
上面就是盛大游戏G云在使用Ceph rbd过程中,在客户端所做优化的一些经验,如有错误还请多多批评指正,也欢迎各位补充。继续来看看OSD的调优

OSD配置优化

Ceph OSD端包含了众多配置参数,所有的配置参数定义在src/common/config_opts.h文件中,当然也可以通过命令查看集群的当前配置参数:

#> ceph --admin-daemon {path/to/socket} config show
由于能力有限,下面仅分析常见的几个配置参数:

osd op threads:处理peering等请求的线程数
osd disk threads:处理snap trim,replica trim及scrub等的线程数
filestore op threads:io线程数
点评:相对来说线程数越多,并发度越高,性能越好;然如果线程太多,频繁的线程切换也会影响性能;所以在设置线程数时,需要全面考虑节点CPU性能,OSD个数以及存储介质性质等。通常前两个参数设置一个较小的值,而最后一个参数设置一个较大的值,以加快io处理速度。在发生peering等异常时可以动态的调整相关的值。
filestore op thread timeout:io线程超时告警时间
filestore op thread suicide timeout:io线程自杀时间,当一个线程长时间没有响应,Ceph会终止该线程,并导致OSD进程退出
点评: 如果io线程出现超时,应结合相关工具/命令分析(如:ceph osd perf),是否OSD所在的磁盘存在瓶颈,或者介质故障等
ms dispatch throttle bytes:Messenger流控,控制DispatcherQueue队列深度,0表示不受限
点评:Messenger处在OSD的最前端,其性能直接影响io处理速度。在Hammer版本中,io请求添加到OSD::op_shardedwq才会返回,其他一些请求会直接添加到DispatchQueue中;为避免Messenger成为瓶颈,可以将该值设大点
osd_op_num_shards:默认为5,OSD::op_shardedwq中存储io的队列个数
osd_op_num_threads_per_shard: 默认为2,为OSD::op_shardedwq中每个队列分配的io分发线程数
点评:作用于OSD::op_shardedwq的总线程数为:osd_op_num_shards*osd_op_num_threads_per_shard, 默认为10;io请求经由Messenger进入,添加到OSD::op_shardedwq后,由上述分发线程发送给后端的filestore处理。视前端网络(如:10Gbps)和后端介质性能(如:SSD),可考虑调高该值。
filestore_queue_max_ops:控制filestore中队列的深度,最大未完成io数
filestore_queue_max_bytes:控制filestore中队列的深度,最大未完成io数据量
filestore_queue_commiting_max_ops:如果OSD后端的文件系统支持检查点,则filestore_queue_max_ops+filestore_queue_commiting_max_ops作为filestore中队列的最大深度,表示最大未完成io数
filestore_queue_commiting_max_bytes:如果OSD后端的文件系统支持检查点,则filestore_queue_max_bytes+filestore_queue_commiting_max_bytes作为filestore中队列的最大深度,表示最大未完成io数据量
点评: filestore收到前述分发线程递交的io后,其处理过程首先会受到filestore队列深度的影响;如果队列中未完成io超过设置阀值,请求将会堵塞。所以调高该值是不个很明智的选择。
journal_queue_max_ops: 控制FileJournal中队列的深度,最大未完成日志io数
journal_queue_max_bytes: 控制FileJournal中队列的深度,最大未完成日志io数据量
点评: filestore收到前述分发线程递交的io后,还会受到FileJournal队列的影响;如果队列中未完成io超过设置阀值,请求同样会堵塞;通常,调高该值是个不错的选择;另外,采用独立的日志盘, io性能也会有不少的提升
journal_max_write_entries: FileJournal一次异步日志io最大能处理的条目数
journal_max_write_bytes: FileJournal一次异步日志io最大能处理的数据量
点评: 这两个参数控制日志异步io每次能处理的最大io数,通常要根据日志文件所在磁盘的性能来设置一个合理值
filestore_wbthrottle_enable:默认为true,控制OSD后端文件系统刷新
filestore_wbthrottle_*_bytes_start_flusher:xfs/btrfs文件系统开始执行回刷的脏数据
filestore_wbthrottle_*_bytes_hard_limit: xfs/btrfs文件系统允许的最大脏数据,用来控制filestore的io操作
filestore_wbthrottle_*_ios_start_flusher:xfs/btrfs文件系统开始执行回刷的io请求数
filestore_wbthrottle_*_ios_hard_limit:xfs/btrfs文件系统允许的最大未完成io请求数,用来控制filestore的io操作
filestore_wbthrottle_*_inodes_start_flusher:xfs/btrfs文件系统开始执行回刷的对象数
filestore_wbthrottle_*_inodes_hard_limit:xfs/btrfs文件系统允许的最大脏对象,用来控制filestore的io操作
点评:*_start_flusher参数定义了刷新xfs/btrfs文件系统脏数据阀值,以将磁盘缓存更新到磁盘;*_hard_limit参数会影响filestore的io操作,堵塞filestore op thread线程。所以设置一个较大的值性能会有提升
filestore_fd_cache_size: 对象文件句柄缓存大小
filestore_fd_cache_shards: 对象文件句柄缓存分片个数
点评:缓存文件句柄能加快文件的访问速度,个人建议缓存所有的文件句柄,当然请记得调高系统的句柄限制,以免句柄耗尽
filestore_fiemap: 开启稀疏读写特性
点评: 开启该特性,有助于加快克隆和恢复速度
filestore_merge_threshold: pg子目录合并的最小文件数
filestore_split_multiple: pg子目录分裂乘数,默认为2
点评:这两个参数控制pg目录的合并与分裂,当目录下的文件数小于filestore_merge_threshold时,该目录的对象文件会被合并到父目录;如果目录的文件数大于filestore_merge_threshold*16*filestore_split_multiple,该目录会分裂成两个子目录。设置合理的值可以加快对象文件的索引速度
filestore_omap_header_cache_size: 扩展属性头缓存
点评: 缓存对象的扩展属性_Header对象,减少对后端leveldb数据库的访问,提升查找性能

ceph 参数说明<转>的更多相关文章

  1. ceph数据自动均衡程序

    声明:程序基于ceph0.94.x制作 前言: ceph数据自动均衡,为了解决新集群搭建完成和添加新的节点后,不同或者相同容量的磁盘上面pg的分布不均衡,导致集群使用率达不到理想的标准 调整前准备: ...

  2. SUSE CaaS Platform 4 - 使用 Ceph RBD 作为持久存储(动态)

    图1 架构图 图2 各存储插件对动态供给方式的支持状况 1.所有节点安装 # yum install ceph-common 复制 ceph.conf 到 worker 节点上 # scp admin ...

  3. 管理ceph缓存池

    目录 缓存池简介 缓存池原理 缓存池的工作模式 配置缓存池 1. 创建一个缓存池 2. 设置缓存层 3. 缓存层相关参数说明 4. 测试缓存池 删除缓存池 1. 删除read-only缓存池 2. 删 ...

  4. 006 管理Ceph的RBD块设备

    一, Ceph RBD的特性 支持完整和增量的快照 自动精简配置 写时复制克隆 动态调整大小 二.RBD基本应用 2.1 创建RBD池 [root@ceph2 ceph]# ceph osd pool ...

  5. 在kubernetes1.17.2上结合ceph部署efk

    简绍 应用程序和系统日志可以帮助我们了解集群内部的运行情况,日志对于我们调试问题和监视集群情况也是非常有用的.而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中.对于容器 ...

  6. ceph踩坑日记之rgw_dynamic_resharding

    1.背景说明 参考说明: https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/html/object_gatewa ...

  7. 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍  <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制 一.综述 SuperIO(SIO)定位 ...

  8. ceph hadoop spark 大数据处理

    http://docs.ceph.com/docs/giant/cephfs/hadoop/ https://indico.cern.ch/event/524549/contributions/218 ...

  9. 庆祝下,提交了第一个ceph pull request。实现了从0到1的突破

    庆祝一下!经过社区老司机的带路,昨天提交了第一个ceph pull request.实现了从0到1的突破,希望再接再厉提交更多代码到社区,为社区发展贡献一点自己力量. 提交的第一个被社区fix的bug ...

随机推荐

  1. CC++初学者编程教程(8) VS2013配置编程助手与QT

    1. 2. 配置编程助手 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26 ...

  2. 1.2 linear SVM 推导

    1.将公式中的distance具体化 将$w_0$单独抽出作为$b$,$w=(w_1,...,w_n),x=(x_1,...,x_n)$ 则分割平面为:$w^Tx+b=0$ A.证明w为法向量     ...

  3. usb键鼠标驱动分析

    一.鼠标 linux下的usb鼠标驱动在/drivers/hid/usbhid/usbmouse.c中实现 1.加载初始化过程 1.1模块入口 module_init(usb_mouse_init); ...

  4. Expect:100-Continue & HTTP 417 Expectation[转]

    Expect:100-Continue & HTTP 417 Expectation 背景:今天调试火车票查询的代码,发现一个奇怪的事情,如果使用公司本地的代理,那么一切正常,如果使用的是公司 ...

  5. 如何使用dynamic

    DataTable dt = new DataTable("TableOne"); dt.Columns.Add("ID", typeof(int));     ...

  6. [置顶] hdu2815 扩展Baby step,Giant step入门

    题意:求满足a^x=b(mod n)的最小的整数x. 分析:很多地方写到n是素数的时候可以用Baby step,Giant step, 其实研究过Baby step,Giant step算法以后,你会 ...

  7. JavaScript 字符串实用常用操作

    字符串截取1. substring()xString.substring(start,end)substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始 ...

  8. Nutch的发展历程

    Nutch的创始人是Doug Cutting,他同时也是Lucene.Hadoop和Avro开源项目的创始人 下面是Nutch的发展历程: 月由Doug Cutting发起,托管于Sourceforg ...

  9. Oracle EBS Concurrent Request:Gather Schema Statistics[Z]

    Oracle EBS 的Concurrent Request"Gather Schema Statistics"是一个和性能相关的Concurrent Program,它会对表,列 ...

  10. Lua与C++的交互

    这篇文章说的挺详细的:Lua与C++的交互