写点什么

Jane Street 构建低延迟 OCaml GC 的实践

  • 2015-04-16
  • 本文字数:1176 字

    阅读完需:约 4 分钟

Jane Street 是一家特别重视技术的贸易公司,同时也是目前世界上最大的 Caml 和 OCaml 用户。近日,该公司技术部门负责人 Yaron Minsky 撰文介绍了正在进行中的构建低延迟 OCaml GC 的工作。

在垃圾回收中,有一个众所周知的问题,就是它会导致不可预知的应用程序中断。虽然 OCaml GC 在延迟方面已经相当出色(一方面,“主堆(major heap)”回收增量进行,即可以“分片(slice)”完成;另一方面,“次堆(minor heap)”回收的速度也非常快),但它仍然存在一些问题:

  • 没有性能分析:现有的运行时无法知道不同部分回收工作所耗费的时间,难以优化。
  • 错误提升:在次堆回收时,如果对象恰巧出现短暂的不可达,那么它会被错误地提升到主堆中。
  • 触发:如果服务器需要在突发流量的情况下仍然保持低延迟,那么我们希望垃圾回收可以延后,在应用程序空闲时执行。但现有的运行时根据次堆分配触发垃圾回收,无法满足此类场景。
  • 增量回收不完善:主堆采用增量回收机制,但数组会一次性回收,所以当数组较大时会出现问题。
  • 即时计算:现有的运行时根据上次次堆回收时提升到主堆的对象的多少来确定主堆片的大小。如果提升的对象很多,那么会立即进行主堆回收。但这时,正在进行的任务可能尚未完成。而且,对于快速响应系统,我们同样希望垃圾回收可以延后执行。

为了解决上述问题,他们在 OCaml GC 作者 Damien Doligez 的帮助下做了如下工作:

  • 改进性能分析:为垃圾回收器增加了一组探针,详细记录垃圾回收过程的每个阶段。
  • “老化(Aging)”:为了减少错误提升,允许对象在次堆中停留多个次堆回收周期。
  • 完善增量回收:垃圾回收的多个阶段都改为可中断的,包括数组扫描。
  • 将主堆片回收与次堆回收分离:在现有的运行时中,主堆片回收与次堆回收总是一起完成。但在低延迟分支中,二者可以在任意时间单独执行。同时,该分支允许在应用程序层面调度垃圾回收。
  • 使工作计算更平滑:该低延迟分支由跟踪下次主堆片回收的工作量改为跟踪接下来 N 次主堆片回收的工作量,并将数值保存在一个环形缓冲区里。
  • 空闲列表分段:查找空闲块的开销占次堆回收开销的一大部分。在许多 OCaml 应用程序中,块都非常小。为了利用这一点,他们正在该低延迟分支中实现一组根据尺寸划分的空闲列表。

虽然许多工作还在进行之中,但已经取得的成果让他们觉得这项工作非常有前途。通过使用一个包含了上述大多数更改的编译器版本及应用程序驱动的垃圾回收作业,他们目前已经在一个真实的生产应用中将“尾延迟(tail latency)”降低到了原来的 1/3。不过,也有部分成果不尽人意。比如,老化机制节省了对象提升开销,但次堆回收本身的开销增加了,两者基本相互抵消了。

感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

2015-04-16 08:293342
用户头像

发布了 1008 篇内容, 共 449.0 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

通义灵码 - HTML智能编码辅助AI工具

阿里云云效

人工智能 云计算

【解决方案】DistilQwen2.5-R1蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践

阿里云大数据AI技术

人工智能 深度思考 大模型 模型蒸馏 DistilQwen2.5

如何使用通义灵码辅助开发微信小程序

阿里云云效

微信小程序 云计算

11Labs 发布 MCP 服务器,在 Claude 秒建语音智能体;通义开源 3D 数字人,集成实时互动对话全链路 SDK

RTE开发者社区

企业级软件定制:摒弃“银弹思维”,回归场景务实求解

TechLead Studio

软件研发

低代码平台终极拷问:NocoBase 像「乐高套装」,iVX 更像「3D 打印机」?

代码制造者

低代码开发 无代码平台

手把手教你用爬虫技术抓取1688商品详情与实现关键字搜索API——实战干货分享

代码忍者

1688API接口

2025 中国人工智能教育大会召开,和鲸x智谱推出人工智能通识教育方案

ModelWhale

人工智能 高等教育 通识课 人工智能通识课

快速业务扩张下,App混合开发成必然选择

xuyinyin

计算机网络协议介绍

京东科技开发者

如何使用通义灵码辅助开发微信小程序

阿里巴巴云原生

手把手教你用爬虫抓取1688商品详情和店铺全量商品API接口——从零到实战

代码忍者

1688API接口

2025年智能ITSM产品推荐

云智慧AIOps社区

ITSM ITSM软件 工单管理 工单系统

音乐NFT项目的技术架构

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

诚邀加入天翼云用户体验官计划:您的洞察,重塑科技边界!

天翼云开发者社区

云计算

京东中台化底层支撑框架技术分析及随想

京东科技开发者

Web Components实践:如何搭建一个框架无关的AI组件库

京东科技开发者

智能制造常见系统,ERP、MES、WMS、SCM、PLM,一文吃透!

积木链小链

区块链智能合约的安全性

北京木奇移动技术有限公司

智能合约 区块链技术 软件外包公司

谁在买王兴兴的机器人?「宇树科技」百笔订单梳理、分析!

机器人头条

科技 大模型 人形机器人 具身智能

shopeeAPI 系列:商品列表接口接入与应用

tbapi

Shopee shopee商品列表接口

CloudWeGo 2025 黑客松报名指南

字节跳动开源

字节跳动 黑客马拉松 CloudWeGo hertz Eino

安全运营 | 第十期「纵深防护·极智运营」度安讲技术沙龙成功举办

百度安全

虚拟表 + 高效写入 + 流计算优化,时序数据库 TDengine 3.3.6.0 重构核心体验

TDengine

数据库 tdengine 时序数据库

添加DNS解析记录提示解析冲突是怎么回事?(国科云)

防火墙后吃泡面

时序数据库 TDengine Cloud 私有连接实战指南:4步实现数据安全传输与成本优化

TDengine

数据库 tdengine 时序数据库

企业上云后,SRE认证为何成为企业“新宠”?

雅菲奥朗

SRE ITIL SRE培训 SRE认证

AI口语练习App的技术架构

北京木奇移动技术有限公司

AI技术 软件外包公司 AI口语练习

鸿蒙APP开发的技术架构

北京木奇移动技术有限公司

鸿蒙app 软件外包公司 APP外包公司

2025年GitHub Star增长最快的15个开源低代码项目

NocoBase

GitHub 开源 低代码 零代码 无代码

Jane Street构建低延迟OCaml GC的实践_后端_谢丽_InfoQ精选文章