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...

Ceph配置参数(二)

Ceph配置参数(一) 6、KEYVALUESTORE CONFIG REFERENCE http://ceph.com/docs/master/rados/configuration/keyv...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Ceph配置参数(三)

Ceph配置参数(一) Ceph配置参数(二) 8、MONITOR CONFIG REFERENCE http://ceph.com/docs/master/rados/co...

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

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

Linux 内核的文件 Cache 管理机制介绍

1.操作系统和文件 Cache 管理 操作系统是计算机上最重要的系统软件,它负责管理各种物理资源,并向应用程序提供各种抽象接口以便其使用这些物理资源。从应用程序的角度看,操作系统提供了一个统一的虚拟...

小伙伴们的ceph源码分析三——monitor消息处理流程

笔者在读代码初期非常想理清楚的就是ceph这么个系统在服务端与客户端是怎么响应与发起请求的。 本人主要负责monitor部分,而且追了一会cephx认证的代码,所以拿这块举例,后续osd部分主要是对同...

ceph存储 Google perftools工具内存检测以及性能分析

一. 安装与简介      从主页http://code.google.com/p/google-perftools/downloads/list下载源码包,解压后使用命令序列./configu...

ceph存储 快速传输大数据(tar+lz4+pv)

如果用传统SCP远程拷贝,速度是比较慢的。现在采用lz4压缩传输。LZ4是一个非常快的无损压缩算法,压缩速度在单核300MB/S,可扩展支持多核CPU。它还具有一个非常快速的解码器,速度单核可达到和超...

如何学习开源项目及Ceph的浅析

学习各种开源项目,已经成为很多朋友不可回避的工作内容了。笔者本人也是如此。在接触并学习了若干个开源项目之后,笔者试图对自己工作过程中的若干体会加以总结,以期对一些希望借鉴的朋友有所裨益。

ceph cluster添加/删除mon节点(ceph-deploy)

操作环境 Centos 6.6 x86_64 Ceph 0.87 ceph-deploy 1.59 操作步骤 添加mon节点       ceph monitor的个数是2n+1(n>=0...
  • bobpen
  • bobpen
  • 2014-11-14 09:37
  • 4124
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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