제인 스트릿 여름 인턴십 프로젝트: 더욱 빨라진 JSQL, 개선된 Torch 바인딩, 프로세스 간 메모리 관리

2025-08-29
제인 스트릿 여름 인턴십 프로젝트: 더욱 빨라진 JSQL, 개선된 Torch 바인딩, 프로세스 간 메모리 관리

제인 스트릿은 올해 여름 인턴십 프로그램에서 세 가지 뛰어난 프로젝트를 소개합니다. 레오 가그논의 JSQL 평가자는 인덱싱을 통해 수백 배의 속도 향상을 달성했습니다. 아리안 카트리의 개선된 OCaml Torch 바인딩은 OxCaml을 활용하여 GPU 메모리를 안전하고 효율적으로 관리합니다. 또한, 앤서니 리의 프로세스 간 메모리 관리 라이브러리는 참조 카운팅을 통해 직렬화 오버헤드를 제거합니다. 이러한 프로젝트는 내부 도구의 효율성 향상은 물론 오픈소스 커뮤니티에도 귀중한 기여를 합니다.

더 보기
개발

히그스 버그슨 사냥: NFS/Kerberos 커널 레벨 문제 디버깅

2025-07-03
히그스 버그슨 사냥: NFS/Kerberos 커널 레벨 문제 디버깅

엔지니어들은 중요한 거래 데이터 시스템인 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의 10년 여정: Jenga에서 Dune으로

2025-01-30
Jane Street의 10년 여정: Jenga에서 Dune으로

Jane Street는 처음에 OCaml 빌드 시스템인 Jenga를 개발했지만, 제한적인 기능으로 인해 채택률이 낮았고 오픈소스화도 취소되었습니다. 그 후 더 간단한 Jbuilder를 만들었는데, 속도 때문에 예상치 못한 인기를 얻었고, 결국 Dune으로 발전했습니다. 수년간의 노력 끝에 Jane Street 팀은 7000만 줄의 코드로 구성된 내부 빌드 시스템을 Jenga에서 Dune으로 성공적으로 마이그레이션하여 빌드 속도를 높이고 Dune의 미래 발전을 위한 견고한 기반을 마련했습니다.

더 보기
개발