Nix가 디버거 절반을 만들었다: Rewind VM으로 본 결정론적 레이스 컨디션 추적
- Rewind VM은 Nix 빌드를 입력이 같으면 스레드 스케줄까지 똑같이 재현되는 결정론적 VM으로 실행함
- 은행 계좌 예제에서 16코어 노트북은 1,000번 중 396번 돈을 잃었고 단일 코어에 고정하면 0번이었음,
rewind check는 스케줄을 바꿔 가며 실패 지점을 3237 단계로 좁혀 11초 만에 찾아냄 - 실행 ID는 derivation 입력의 해시로 만들어져
rewind show가 같은 실행 명령을 그대로 다시 출력함 - 빌드 결과의 NAR 해시를 호스트 스토어와 Nix 바이너리 캐시의 .narinfo와 대조해 VM 빌드가 실제 Nix 빌드와 같은지 확인함
- 디버그 심볼과 소스는 nixpkgs의 separateDebugInfo 출력을 cache.nixos.org에서 받아 debuginfod로 가져오므로 리눅스 커널 소스까지 볼 수 있음
Hacker News opinions
이거 Antithesis랑 비슷한 느낌인데 내 머신에서 돌아가는 축소판임. 랜덤성은 어떻게 처리함?
커널 RNG는 부팅할 때 넘긴 시드로 시딩되는 구조임.
나도 Antithesis 생각 바로 났음. 동시성 버그는 전제조건 깔아두고 실패할 때까지 돌리면 잡히지 않을까 싶음.
결정론 시스템이 있는데 옆에 LLM도 있는 게 웃김 ㅋㅋ
LLM도 결정론으로 돌릴 수 있음. 다들 안 쓰는 것뿐이고 lukechampine repligraphs 보면 됨.
에이전트로 nix 설정 짜고 git으로 리뷰함. 설정 통째로 다른 머신에 올리기도 편해서 나한텐 구원임.
빌드 아닌 것도 nix 빌드로 넘기는 중인데 캐시 무효화 직접 안 짜도 되니까 편함.
AI 덕에 Nix 쓰는 사람 엄청 늘어날 듯. 예전엔 ergonomics 때문에 다들 포기했는데 지금은 에이전트가 포팅까지 해줌.
문서가 거의 없고 방법이 너무 많아서 남이 짠 설정 해석이 힘듦. 좋은 도구인데 pyproject처럼 새 문제를 하나 더 만든 느낌임.
이거 결국 rr 재구현 아님? Nix랑 무슨 상관인지 잘 모르겠음.