调节bluestore_rocksdb参数,fio来测试ceph随机写的性能,指望进行优化。
在 上一篇文章中测试了在ceph环境下,经过gdbprof分析4k-randwrite的性能,能够看出rocksdb线程耗用资源较多,由于ceph的底层就是基于rocksdb进行存储的,所以尝试着去调节ceph中导出的rocksdb参数,来达到一个调优效果。
$ceph osd tree
$ceph -svim
接下来对参数进行说明:
"bluestore_rocksdb_options": "compression=kNoCompression,max_write_buffer_number=4,min_write_buffer_number_to_merge=1,recycle_log_file_num=4,write_buffer_size=268435456,writable_file_max_buffer_size=0,compaction_readahead_size=2097152"Compression=kNoCompression
:表示数据不进行压缩。对每一个SST文件,数据块和索引块都会被单独压缩,默认是Snappywrite_buffer_size=268435456(2^28)
:memtable的最大size,若是超过这个值,RocksDB会将其变成immutable memtable,并使用另外一个新的memtable。插入数据时RocksDB首先会将其放到memtable里,因此写入很快,当一个memtable full以后,RocksDB会将该memtable变成immutable,用另外一个新的memtable来存储新的写入,immutable的memtable就被等待flush到level0max_write_buffer_number=4
:最大的memtable个数。若是active memtable都full了,而且active memtable+immutable memtable个数超过max_write_buffer_number,则RocksDB会中止写入,一般缘由是写入太快而flush不及时形成的。min_write_buffer_number_to_merge=1
:在flush到level0以前,最少须要被merge的memtable个数,如min_write_buffer_number_to_merge =2,那么至少当有两个immutable的memtable时,RocksDB才会将这两个immutable memTable先merge,再flush到level0。Merge 的好处是,譬如在一个key在不一样的memtable里都有修改,能够merge造成一次修改。min_write_buffer_number_to_merge太大会影响读取性能,由于Get会遍历全部的memtable来看该key是否存在。compaction_readahead_size=2097152(2^21)
:预读大小,在进行compression时,执行更大的数据读取,writable_file_max_buffer_size=0
:可写文件的最大写缓存缓存
首先分为服务端机器server_host和客户端机器client_host
修改server_host的/etc/ceph/ceph.conf中bluestore rocksdb项
$vim /etc/ceph/ceph.conf
添加如下参数配置app
[osd] bluestore rocksdb options = compression=kNoCompression,max_write_buffer_number=8,min_write_buffer_number_to_merge=4,recycle_log_file_num=4,write_buffer_size=356870912,writable_file_max_buffer_size=0,compaction_readahead_size=8388608 [osd.0] [osd.1] [osd.2]
wq保存退出性能
systemctl restart ceph-osd@0.service
systemctl restart ceph-osd@1.service
systemctl restart ceph-osd@2.service注
:osd一个一个的重启,不要快速重启三个,等一个osd重启并运行正常后(可用$ceph osd tree查看),再重启第二个,否则集群容易挂掉测试
ceph daemon osd.0 config show | grep bluestore_rocksdb
ceph daemon osd.1 config show | grep bluestore_rocksdb
ceph daemon osd.2 config show | grep bluestore_rocksdb优化
(1)先建立image再进行4k-randwrite操做spa
**$rbd create --pool ymg --image img01 --size 40G**
(2)填充image线程
**$fio -direct=1 -iodepth=256 -ioengine=rbd -pool=ymg -rbdname=img01 -rw=write -bs=1M -size=40G -ramp_time=5 -group_reporting -name=full-fill**
(3)randwrite命令rest
**$fio -direct=1 -iodepth=256 -ioengine=rbd -pool=ymg -rbdname=img01 -rw=randwrite -bs=4K -runtime=300 -numjobs=1 -ramp_time=5 -group_reporting -name=parameter1**
compression=kNoCompression
max_write_buffer_number=4
min_write_buffer_number_to_merge=1
recycle_log_file_num=4
write_buffer_size=268435456
writable_file_max_buffer_size=0
compaction_readahead_size=2097152
时间段:16:57:04~17:02:04
结果以下code