读写测试用例
用例分析
随机写:随机写CPU平均占用率为8%,但是会产生大量的IO操作,主要来源于HBase的三个流程:写HLog、MemStore flush和Compaction。其中,写HLog会产生大量的小IO请求。由于IO操作频繁且以小包形式传输,因此该用例对IO性能较为敏感。通过启用网卡的LRO(Large Receive Offload)功能,可以有效提升写性能。
随机读:随机读用例整体CPU资源利用很低,整体的IO也是在用例初始时进行HFile的读取到BlockCache中,之后数据会有大量的缓存命中。由于网络中存在的较多小包,因此主要使能了网卡LRO功能,对网络小包进行聚合。
顺序扫描:顺序扫描用例CPU资源利用也很低,整体的IO也是在用例初始时进行HFile的读取到BlockCache中,之后的数据都是从BlockCache中进行读取。该用例和随机读用例的流程是相同的,只是在读取KeyValue时会顺序的读取一段连续的KeyValue区域。因此,在这种模式下,网络包聚合效果不明显。
Slow sync调优
问题描述
HBase在高并发put场景(随机写用例),由于同步写WAL机制导致随机写性能很差,日志中打印sync时延很高。
问题分析
由于同步写WAL机制,必须保证数据落盘才能保证可靠性,所以导致在写流程中写WAL时延很高,严重影响性能。
解决方法
硬盘组单盘创建RAID 0,然后配置RAID控制卡Cache策略为RAWBC,使用RAID控制卡的Cache做回写,而不是Write Through透写,可以极大提高随机写性能。
RAID组Cache策略配置:
RWBC -> Read Ahead + Write Back + Cached IO
网卡参数调优
在HBase读写测试场景,测试的记录条的大小为1KB,因此使能网卡LRO功能和调大网卡ring buffer。将网络中的小包进行聚合,提高网络性能。