申请试用
HOT
登录
注册
 
Further GC optimization for HBase2.x: Reading HFileBlock into offheap directly

Further GC optimization for HBase2.x: Reading HFileBlock into offheap directly

小米云技术
/
发布于
/
4422
人观看

这个议题由 Intel 的资深PMC成员 Anoop 和小米的工程师胡争合作分享。Anoop 主要介绍了 HBase2.0 的读写路径 offheap 的背景,根本目的在于期望最大限度的减少GC 对 p99 和 p999 延迟的影响,把核心的内存分配都挪到 GC 无关的 offheap 上了,请求延迟也就不再受 STW 影响了。但小米 HBase 团队发现,即使在 HBase2.0上实现了 offheap 读写路径之后,在 cache 命中率不高的情况下,p999 依然受限于Young GC.后面调查发现,是因为 Cache Miss 之后,去 HDFS 文件读 block 时,仍然走的是 heap 申请,一个 block 64KB,于是就容易积累大量的 Young 区内存占用。

最直接解决思路是:将 block 读到一个 offheap 的 ByteBuffer 池子内,但发现由于RAMCache 的存在,无法找到合适的释放时机。所以小米团队采用引用计数来解决内存回收的问题。
具体的设计如上图所示,RegionServer 认为 RAMCache 和读路径上的 RpcHandler分别是两条独立的引用路径,有任何一条路径引用则不容许释放,一旦没有任何路径引用则必须释放。这可以说是本次分享最重要的一个点。

在小米的大数据集测试场景下,发现开启这个功能后,Young GC 次数能减少15~20%左右,每次 Young GC 可回收的内存减少80%左右,吞吐和延迟也有不同程度的提升。通常我们的 Cache 命中率都达不到100%,因此这个功能其实是一个很好的性能优化点。我们将在未来的 HBase2.3.0 以及 HBase3.0.0 中发布这个功能。

3 点赞
0 收藏
7下载
确认
3秒后跳转登录页面
去登陆