主要观点:作者在过去几周沉迷于 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,比较优化前后的性能变化。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。