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
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CentOS中安装easy_install

 在安装Trac的时候首先要安装Babel,官方文档上Babel是通过easy_install安装的,在CentOS中安装easy_install的方法: yum installpython-...

ceph系统原理 细节 benchmark 不完全说明

ceph系统原理 细节 benchmark 不完全说明 转载请说明出处:  http://blog.csdn.net/XingKong_678/article/details/514739...

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

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

Ceph性能调优

Ceph性能调优总结

性能参数调优

  • 2014年02月14日 09:50
  • 2.54MB
  • 下载

Java虚拟机性能参数调优指导书

  • 2009年07月20日 10:35
  • 144KB
  • 下载

Spark性能优化:JVM参数调优

Spark性能优化:JVM参数调优 年轻代:主要是用来存放新生的对象。 老年代:主要存放应用程序中生命周期长的内存对象。 Spark中,垃圾回收调优的目标就是,只有真正长时间存活的对象,才能进入老年代...

Java虚拟机性能参数调优指导书

  • 2008年03月14日 23:26
  • 307KB
  • 下载

性能调优之性能参数指标

  • 2015年12月24日 15:54
  • 329KB
  • 下载

JVM性能参数调优实践

JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整个系统变得很慢,网站停滞时间能达10秒以上,这种情况如果没隔几分钟就来一次,自己都受不了。这种停滞在测试的时候看不出来,...
  • yyywyr
  • yyywyr
  • 2014年09月19日 11:26
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ceph 参数性能调优
举报原因:
原因补充:

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