实验目标

测试刷盘时间控制由设备级别改为序列级别对写入性能的影响


实验方法

将StorageGroupProcessor.insertTable方法中控制刷盘时间的粒度改为序列,使用benchmark进行写入性能测试


硬件配置

  • 系统:4.4.0-186-generic #216-Ubuntu
  • CPU:8核,Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
  • 内存:16G


实验场景

  • 存储组数:20
  • 客户端并发数:20
  • 总设备数:10000
  • 每个设备下的点数:100


理论分析

时间序列级别刷盘时间控制,每秒执行insertTablet大约10万次,每次进行400次hashmap访问,共执行4000万次hashmap访问,平均每个线程执行20万次hashmap访问

设备级别刷盘时间控制,每秒执行insertTablet大约10万次,每次进行2次hashmap访问,共执行20万次hashmap访问,平均每个线程执行1万次hashmap访问

综上可知,改为序列级别刷盘时间控制后,每秒每CPU多进行19万次hashmap访问,每次hashmap访问需要300条字节码左右,约1000条CPU指令,那么简单算会有0.19G时间片损耗(CISC上可能更多),在2.9GHZ CPU上,约占6.6%


实验结果

每 Tablet 100行数据


写入吞吐量(points / s)
设备级别刷盘时间控制15650216.31
序列级别刷盘时间控制14703294.14

性能损失:6.1 %

每 Tablet 10行数据


写入吞吐量(points / s)
设备级别刷盘时间控制10625813.65
序列级别刷盘时间控制9211837.32

性能损失:13.3 %

每 Tablet 1行数据


写入吞吐量(points / s)
设备级别刷盘时间控制7073910.51
序列级别刷盘时间控制5778294.65

性能损失:18.3 %

实验结论

时间序列级别刷盘时间控制对写入的性能影响随着tablet行数变多而减少,但序列级别刷盘时间控制主要在一个设备下不同测点最后刷盘时间不相同的场景下有优势(往往用不了tablet),在insert record情况下(等同于每tablet 1行数据),写入性能损失达到18.3%,不可接受


  • No labels