清理缓存命令
echo 3 > /proc/sys/vm/drop_caches #清除缓存页,目录项和inodes
磁盘性能测试(dd)
测试磁盘写吞吐量
dd命令对磁盘进行标准写测试。记住添加oflag参数以绕过磁盘页面缓存。
dd if=/dev/zero of=/var/lib/ceph/osd/wc01 bs=1G count=1 oflag=direct
测试磁盘读吞吐量
dd命令对磁盘进行标准读测试。记住添加iflag参数以绕过磁盘页面缓存。
dd if=/var/lib/ceph/osd/wc01 of=/dev/null bs=2G count=1 iflag=direct
硬盘驱动器
存储驱动器受限于寻道时间、访问时间、读写时间、还有总吞吐量,这些物理局限性影响着Ceph整体系统性能,尤其在系统恢复期间。Ceph 允许你在每块硬盘驱动器上运行多个 OSD ,但这会导致资源竞争并降低总体吞吐量; Ceph 也允许把日志和对象数据存储在相同驱动器上,但这会增加记录写日志并回应客户端的延时,因为 Ceph 必须先写入日志才会回应确认了写动作。btrfs文件系统能同时写入日志数据和对象数据,xfs和ext4 却不能。但是不稳定不建议线上环境使用。
固态硬盘
一种提升性能的方法是使用固态硬盘(SSD)来降低随机访问时间和读延时,同时增加吞吐量。SSD和硬盘相比每GB成本通常要高10倍以上,但访问时间至少比硬盘快100倍。评估SSD时,顺序读写性能很重要。
可以在同一主机上运行多个OSD ,但要确保OSD硬盘总吞吐量 =< 客户端提供读写服务所需的网络带宽;还要考虑集群在每台主机上所存储的数据占总体的百分比,如果一台主机所占百分比太大而它挂了,就可能导致诸如超过full ratio的问题,此问题会使Ceph中止运作以防数据丢失。
性能:
1、数据双倍写入
Ceph本地存储接口(FileStore)为了支持事务,引入了日志(Journal)机制。所有的写入操作都需要先写入日志(XFS模式下),然后再写入本地文件系统。简单来说就是一份数据需要写两遍,日志+本地文件系统。这就造成了在大规模连续IO的情况下,实际上磁盘输出的吞吐量只有其物理性能的一半。
2、IO路径太长
一个IO需要经过多个模块才能完成,每个模块之间都涉及到队列和线程切换。
3、对高性能硬件支持有待改进
Ceph最开始是为HDD设计的,没有充分考虑全SSD,导致这些硬件的物理性能在Ceph中无法充分发挥出来,特别是延迟和IOPS。