简单事件代理尝试虎式风格

主要观点:作者在过去几周沉迷于 TigerBeetle 的相关内容,受 Joran Dirk Greef 影响尝试 TigerStyle 编码风格,周末致力于改进 Seb 的写路径以提高每秒写入记录数,通过 profiling 找出性能瓶颈并进行修复和优化,最终使 Seb 的写入性能几乎翻倍。
关键信息

  • 作者被 TigerBeetle 相关内容吸引,开始尝试 TigerStyle 并用于 Seb 事件代理。
  • 通过 profiling 发现 Seb 在写入路径上存在大量内存分配和垃圾回收问题,主要集中在AddRecords()Write()函数。
  • AddRecords()Write()函数进行调查,找出导致内存分配的代码部分,并尝试优化。
  • 采用更改函数接口、使用缓冲池等方法减少内存分配,通过 profiling 验证优化效果,压力明显减轻。
  • 进行基准测试,对比优化前后 Seb 的写入性能,优化后每秒写入记录数几乎翻倍。
    重要细节
  • AddRecords()函数中,接收 multipart 数据时每次循环都会进行至少一次内存分配,record变量每次循环也会分配。
  • Write()函数中,为减少磁盘 IO 次数进行了两次make()调用进行内存分配,实际是有益的权衡。
  • 通过调整Write()函数接口,避免数据转换,简化实现并减少内存分配。
  • 添加缓冲池来重用缓冲区,进一步减少内存分配和垃圾回收压力。
  • 基准测试在 Hetzner 的 2 核 CAX11 机器上进行,使用缓冲 IO 且不进行 fsync,比较优化前后的性能变化。
阅读 11
0 条评论