Ceph 参数性能调优

原创 2015年11月18日 14:53:16

Ceph 参数性能调优

网络的各种Ceph参数的优化比较多,有些有效果,有些在某些场景下不但达不到预期的效果,反而有相反的效果。很多参数如果不了解其意义,面对不同的应用场景就显得无所适从,所以有必要简单的了解一下相关的原理。

Ceph的基本原理

Ceph数据写流程


图1: OSD 写请求的流程

如图1 所示:
    • msg模块接受到读写请求,通过ms_fast_dispatch函数等处理,添加道OSD的op_sharedwq
    • 在op_sharedwq的请求通过线程池的一系列复杂的处理,最后调用FileJournal的submit_entry函数同时添加到FileJournal的writeq队列里和completions队列里。
    • FileJournal的write_thread线程以aio的形式写日志数据到磁盘、、
    • FileJournal的write_finish_thread以线程检查IO请求是否完成
    • Finisher的线程把请求添加到FileStore的op_wq队列里
    • FileStore调用write系统调用,把对象的数据写入XFS文件系统里,其先写入系统的PageCache里,当内容不足时,也有可能直接刷磁盘。然后向上层返回ack应答写成功。
    • 当Journal日志空间不足,或者sync_thread定期回收日志的空间。 调用syncfs函数把page_cache里的数据刷到数据盘上,确保对象数据落盘,然后清空相应的日志空间。

Ceph读数据流程


Ceph参数优化

Ceph的调优的参数比较多,但是大致可以分为三类:一类是Throttle相关的参数,第二类是线程相关的参数, 第三类是缓存相关的参数

Throttle相关的参数


osd_max_write_size

一次写操作的最大的size,也就是fio测试的到时候一次写的blocksize,同时也是日志的最小SIZE,也就是说日志的大小至少大于一次写操作的大小。

osd_client_message_size_cap & osd_client_message_cap


这两个参数是在MSG层做的限制。如图1所示的OSD的最顶层

限制OSD在网络层接受client的请求的msg的总的大小和数量,默认值为500M,100
osd_client_message_cap的值要往大调。可以通过ceph daemon osd.0 perf dump 命令查看相对应的两个Throttle的统计信息。如果该限制起作用,就他调到相应的参数。

throttle-osd_client_bytes
throttle-osd_client_messages

filestore_queue_max_ops & filestore_queue_max_bytes

filesotre 的op_wq里对应的限制

filestore_queue_max_ops = 25000 (默认值为 50)

filestore_queue_max_bytes = 1048576000 (默认值 100M)


filestore_queue_committing_max_ops 和filestore_queue_committing_max_bytes这两个参数对可以checkpoint的文件系统如Btrfs,ZFS有用,对于XFS没有作用。

journal_max_write_entries & journal_max_write_bytes

如图1所示,这两个参数控制日志的write_thread线程,一次写入磁盘的最大条数和字节数,默认值分别为100和10M,这个必须调高
journal_max_write_bytes = 1073714824
journal_max_write_entries = 10000

journal_queue_max_ops & journal_queue_max_bytes

如图1所示的FileJournal的writeq的限制。这是一个Throttle,默认值为300和32M,这个可以往大调。
journal_queue_max_ops = 50000
journal_queue_max_bytes = 10485760000

线程相关的参数

osd_op_threads

OSD的线程池 osd_tp, 其主要处理peering_wq的请求,线程数量 osd_op_threads,因其不再读写的关键路径上,其一般不做调整。

osd_op_num_threads_per_shard * osd_op_num_shards

线程池osd_op_tp 处理op_shardedwq 队列里的请求。如图1所示,它是主要的OSD的处理线程池,其数量为:osd_op_num_threads_per_shard * osd_op_num_shards,默认值分别为5,2, 总共10个线程,可以往大调整,测试发现它对性能影响不是特别大。

osd_disk_threads

disktp 对于的处理的任务:snap_trim_wq, scrub_wq, rep_scrub_wq,remove_wq, 线程池的数量 osd_disk_threads,默认值为1,它不在读写的关键路径上,对性能影响不大。

filestore_op_threads

filestore_op_threads,这个参数设置FileStore的op_wq线程池数量。默认值为2 ,测试时设置为8,对性能影响不大。一般不做调整。

缓存相关参数

osd_map_cache_size

osdmap 查看历史的osdmap的数据

osd_pg_object_context_cache_count (default 64)
filestore_fd_cache_shard (default 16)
filestore_fd_cache_size ( default 128)
filestore_omap_header_cache_size (default 1024)

这几个参数都是这种和对象相关的缓存机制,分别为 object_context,fd,omap
的缓存,这几个参数对于顺序读写没有太大的影响。对于随机读写来说,可以调到一点。 测试时设置为1024和10240,对随机IO性能略有提升。


日志相关的参数

日志的同步参数

filestore_commit_timeout=30000
filestore _min_sync_interval = 5
filestore _max_sync_interval = 10

如图1所示的OSD的读写流程,sync_thread至少filestore _max_sync_interval秒的时间唤醒一次,在filestore _min_sync_interval内调用syncfs同步日志一次。如果日志比较大的话,可以设置的比较长一点。

WBThorttle参数

Ceph优化后的参数



[osd]

filestore_op_threads=4

filestore_journal_parallel=false

filestore_journal_writeahead=true

journal_dio = true

journal_aio = true

journal_force_aio = true

filestore_fiemap = true

filestore_wbthrottle_enable=false

filestore_fd_cache_size = 1024

filestore_omap_header_cache_size = 1024

osd_pg_object_context_cache_count= 1024

filestore_commit_timeout=30000

filestore _min_sync_interval = 5

filestore _max_sync_interval = 10

osd client message size cap = 2147483648

osd_client_message_cap = 5000

filestore_queue_max_ops = 25000

filestore_queue_max_bytes = 1048576000

journal_max_write_bytes = 1073714824

journal_max_write_entries = 10000

journal_queue_max_ops = 50000

journal_queue_max_bytes = 10485760000


[client]

rbd cache = true

rbd cache size = 268435456

rbd cache max dirty = 134217728

rbd cache max dirty age = 5
版权声明:本文为博主原创文章,未经博主允许不得转载。

Ceph性能优化 之 配置参数调优

该文同时发表在盛大游戏G云微信公众号,粘贴于此,方便各位查阅Ceph,相信很多IT朋友都听过。因为搭上了Openstack的顺风车,Ceph火了,而且越来越火。然而要用好Ceph却也不是件易事,在QQ...
  • lzw06061139
  • lzw06061139
  • 2016年05月05日 09:28
  • 12521

IDF16:解读Ceph百万IOPS测试及优化

http://chuansong.me/n/313092348043 在去年春季IDF(深圳)期间,我撰写过一篇《IDF15:Ceph性能测试浅析及优化》。由于我不是软件方面的专业人士,今天...
  • shashayangzhou
  • shashayangzhou
  • 2016年09月19日 23:36
  • 1629

Ceph性能优化总结(v0.94)

如需转载请标明作者,原文地址:http://xiaoquqi.github.io/blog/2015/06/28/ceph-performance-optimization-summary/最近一直在...
  • xiaoquqi
  • xiaoquqi
  • 2015年06月30日 23:02
  • 3996

分布式存储ceph系统性能不稳定因素

性能数据不稳定因素
  • cyh201201
  • cyh201201
  • 2016年07月04日 16:00
  • 1755

Ceph daemon osd perf dump 命令

Ceph 0.94.7http://docs.ceph.com/docs/master/dev/perf_counters/?highlight=perf%20dump Ceph 提供了许多非常的工...
  • c744402859
  • c744402859
  • 2016年11月18日 20:56
  • 1105

ceph的一些优化

最近一直在忙着搞Ceph存储的优化和测试,看了各种资料,但是好像没有一篇文章把其中的方法论交代清楚,所以呢想在这里进行一下总结,很多内容并不是我原创,只是做一个总结。如果其中有任何的问题,欢迎各位喷我...
  • cybertan
  • cybertan
  • 2016年04月12日 11:05
  • 3140

ceph优化参数

  • 2015年09月18日 10:57
  • 945B
  • 下载

Ceph配置参数分析

Ceph参数配置详解
  • for_tech
  • for_tech
  • 2017年05月15日 10:36
  • 1910

Ceph配置参数(三)

Ceph配置参数(一) Ceph配置参数(二) 8、MONITOR CONFIG REFERENCE http://ceph.com/docs/master/rados/co...
  • uj_mosquito
  • uj_mosquito
  • 2014年12月11日 19:25
  • 2060

Ceph配置参数(一)

1、POOL, PG AND CRUSH CONFIG REFERENCE http://docs.ceph.com/docs/master/rados/configuration/pool-pg-c...
  • uj_mosquito
  • uj_mosquito
  • 2014年12月09日 18:49
  • 4650
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ceph 参数性能调优
举报原因:
原因补充:

(最多只允许输入30个字)