- 원문 글쓴이는 Rewind라는 결정적 가상머신으로 Nix 빌드를 실행해 경쟁 상태 버그를 찾는다. 같은 입력이면 스레드 실행 순서까지 같게 재현된다는 점이 핵심이다.
- Nix 파생 빌드는 소스, 컴파일러, 라이브러리, 설정을 모두 명시된 입력으로 다룬다. 글쓴이는 이 덕분에 실행 기록과 디버거에 필요한 정보를 다른 사람도 같은 방식으로 받을 수 있었다고 설명한다.
- 원문에 따르면 nixpkgs는 디버그 정보를 cache.nixos.org에 올려 두고, debuginfod가 빌드 ID로 심볼과 소스를 가져온다. 글쓴이는 이 방식으로 리눅스 커널 소스까지 확인할 수 있다고 주장한다.
- 예시인 bank 프로그램은 두 스레드가 같은 잔액을 덮어써 돈을 잃는 버그다. 글쓴이가 16코어 노트북에서 잰 결과로, 1,000회 중 396회 손실이 났고 한 코어에 고정하면 한 번도 나지 않았다.
race condition을 찾는 과정에서 한 코어에 고정하면 1,000회 중 한 번도 손실이 나지 않았다는 대목이 눈에 걸리네요. 실패가 특정 실행 순서에서만 드러나니 스케줄을 흔들어 보는 방식이 왜 필요한지 잘 보입니다. 다만 396회라는 수치는 글쓴이의 16코어 노트북에서 잰 값이라, 다른 머신에서도 같을지는 본문만으로 알기 어렵겠어요. 팀에서 이런 간헐적 버그를 재현해 공유하는 일이 많으신지 궁금합니다.