롱선 CPU의 원자 연산 버그 발견과 해결
원제 The Lost Atomic Update on Loongson CPU
105 포인트댓글 6

Key Point
LoongArch 시스템에서 프로그램이 무한 루프에 빠지거나 메모리 보호 위반이 발생한다면, CPU 하드웨어 에러가 원인일 수 있으며 펌웨어 업데이트로 해결 가능합니다.
핵심 요약
- 2026년 2월 Debian의 normaliz 패킹 중 원자 연산이 일부 값을 누적하지 못해 무한 루프에 빠지는 현상 발생.
- 6개월 간 원인을 파악하지 못하다 8월 AI의 도움으로 glibc의 memcpy 벡터화 구현 호출 시 문제 발생 확인.
- LA664 코어의 원자 명령어(amadd, amcas, ammax 등)가 특정 조건에서 원자성을 잃는 하드웨어 에러라 판명.
- 문제 재현 조건: 서로 다른 물리 코어에서 실행, 데이터 배리어 없는 원자 연산, 원자 연산 사이의 메모리 읽기 인터리빙.
- 테스트 결과 두 스레드가 모두 LASX 벡터 읽기를 수행할 때 거의 100% 확률로 원자 연산이 손실됨.
- 데이터 배리어가 포함된 amcas_db.d는 같은 조건에서 0% 손실로 문제 없음.
- ARM과 AMD 등도 유사한 CPU 에러가 많으나, 실제 사용자 경험에 영향을 주는 경우는 드물다는 점 강조.
- 참조 카운팅에서 amadd 손실 시 객체가 조기 해제되어 Rust의 Arc와 mpsc에서 use-after-free 유발 가능.
- 공격으로 악용하기는 어려운데 같은 프로세스 내에서 두 스레드의 동시 접근이 필요하고 프로세스 격리가 적용되기 때문.
- 8월 26일 롱선에 보고, 9월 9일 테스트 펌웨어 배포, MCSR24의 비트 13을 1로 설정해 해결.
- 펌웨어 수정 후 단일 코어 성능 무변화, 다중 코어 성능 미미한 저하만 확인.
- 펌웨어 미업데이트 시 리눅스 커널에서 해당 비트 직접 설정으로 동일한 효과 가능.
- 이 문제 해결에는 AI의 역할과 인간의 검증이 모두 필수적이었으며, 발견부터 해결까지 반년이 소요되었으나 실제 진전은 2일이었음.