Jane Street暑期实习项目总结:高效的JSQL评估器、改进的Torch绑定和跨进程内存管理库

2025-08-29
Jane Street暑期实习项目总结:高效的JSQL评估器、改进的Torch绑定和跨进程内存管理库

Jane Street分享了今年暑期实习项目的成果,三个项目尤为突出:Leo Gagnon开发的JSQL评估器,通过索引机制将查询速度提升了数百倍;Aryan Khatri改进的OCaml Torch绑定,利用OxCaml的新特性安全高效地管理GPU内存;Anthony Li开发的跨进程内存管理库,使用引用计数避免了数据序列化带来的性能损耗。这些项目不仅提升了Jane Street内部工具的效率,也为开源社区贡献了有价值的代码。

阅读更多
开发

神秘的Higgs-Bugson:一个关于NFS和Kerberos的内核级Bug追踪

2025-07-03
神秘的Higgs-Bugson:一个关于NFS和Kerberos的内核级Bug追踪

工程师们遭遇了一个难以重现的bug,它导致关键的交易数据系统Gord出现文件复制失败(-EACCES)。禁用Kerberos后,问题消失,指向身份验证问题。调查发现,内核通过rpc_gssd守护进程获取Kerberos凭据,但日志没有异常。经过长时间的测试,包括编写一个内存内伪文件系统和使用bpftrace进行内核跟踪,最终定位到问题:由于NFS服务器负载过高导致的请求重传,内核在处理带有相同XID但不同GSS序列号的请求和响应时,出现校验和不匹配,从而导致错误。工程师修复了内核,避免了因序列号不匹配导致的立即重传。

阅读更多

OCaml 中 GADTs 的高效内存表示

2025-05-12
OCaml 中 GADTs 的高效内存表示

本文探讨了在 OCaml 中使用广义代数数据类型 (GADTs) 来优化内存表示的方法。作者首先解释了 OCaml 多态性的局限性,特别是 List.iter 函数在处理不同数据类型时,由于内存表示的统一性导致的空间效率问题。然后,作者尝试了使用普通变体和对象两种方法来创建一个既能使用普通数组,又能使用字节数组的 Compact_array 类型,但都遇到了类型推断和内存分配效率的问题。最终,作者使用 GADTs 成功地解决了这个问题,实现了对不同数据类型数组的灵活且高效的内存表示,证明了 GADTs 不仅适用于编译器编写,也适用于系统编程,特别是需要优化内存表示的高性能应用场景。

阅读更多
开发

Jane Street历时十年,最终用Dune取代Jenga构建系统

2025-01-30
Jane Street历时十年,最终用Dune取代Jenga构建系统

Jane Street公司最初开发了OCaml构建系统Jenga,但因其局限性而未被广泛采用,甚至一度撤销了开源。随后,他们开发了更简易的Jbuilder,意外地因其速度优势而流行起来,并最终演变为Dune。经过多年努力,Jane Street团队成功将内部7000万行代码的构建系统从Jenga迁移到Dune,提升了构建速度,并为Dune的未来发展奠定了坚实基础。

阅读更多
开发