# Linux 7.0의 회귀 문제로 ARM64 PostgreSQL에서 s_lock() 소요 시간 두 배 증가
Amazon 개발자 Salvatore DiPietro는 Linux 커널 7.0의 프리릴리스 버전에서 PostgreSQL을 테스트하던 중 ARM64 시스템에서 성능 저하를 발견했습니다. simple-update 시나리오의 pgbench 테스트에서 TPS가 98,565에서 50,751로—거의 반으로—떨어졌습니다. 이 문제는 태스크 스케줄러의 선점(preemption) 모드 변경에서 비롯된 것입니다: 지원 아키텍처에 대해 기본값이 PREEMPT_NONE에서 PREEMPT_LAZY로 전환되었습니다.
이 변경으로 사용자 공간의 PostgreSQL이 s_lock() 호출에 CPU 시간의 55%를 소비하게 되었습니다. 커널 7.0은 Ubuntu 26.04 LTS에 포함될 예정이며, 2026년 4월 중순 출시가 예상됩니다.
회귀 세부 사항 및 분석
스케줄러 변경은 Peter Zijlstra가 적용한 것으로, ARCH_NO_PREEMPT와 연계된 PREEMPT_LAZY를 활성화했습니다. ARM64에서 이로 인해 태스크 선점이 증가하며, PostgreSQL 같은 고부하 DBMS에 치명적입니다.
프로파일링 결과:
- s_lock()에서의 시간 비중이 전체 CPU의 55%로 폭증.
- pgbench 부하 시 처리량과 응답성이 저하.
- LAZY 모드를 지원하는 아키텍처에만 영향.
전문가들은 커널 7.0의 최종 테스트 단계에서 되돌리기 옵션이 제한적이며, 새로운 회귀를 유발할 위험이 있다고 지적합니다.
제안된 수정 방안
DiPietro는 기본값을 PREEMPT_NONE으로 되돌리고 ARCH_NO_PREEMPT와 분리할 것을 제안합니다. 패치 작성자이자 스케줄러 서브시스템 유지보수자인 Zijlstra는 PostgreSQL 개선을 주장합니다:
- 락 보유자 선점 최소화를 위해 커널의 rseq(Restartable Sequences) 확장을 사용.
- 사용자 공간 코드에서 spinlock 처리를 최적화.
rseq 슬라이스는 시퀀스 상태의 원자적 확인 및 업데이트를 가능하게 하여 임계 구역 중단 위험을 줄입니다.
커뮤니티 입장과 Linus의 결정
OpenNET 전문가들은 Linus Torvalds의 원칙을 강조합니다: 커널은 성능 저하나 사용자 공간 호환성 파괴를 초래해서는 안 됩니다. 커널 되돌리기(릴리스 위험)와 PostgreSQL 수정(DBMS 조정 필요) 간 대치가 지속 중입니다.
ARM64에서 PostgreSQL을 테스트하는 중/시니어 개발자를 위한 팁:
- 커널 7.0-rc에서 pgbench 성능 벤치마킹.
- perf를 통해 s_lock()의 %CPU 모니터링.
- 프로젝트에서 락 최적화를 위한 rseq 고려.
- 스케줄러 패치 추적을 위해 LKML 확인.
주요 포인트
- PREEMPT_LAZY로 인해 ARM64 PostgreSQL TPS가 반토막.
- Zijlstra, 사용자 공간 rseq 슬라이스 도입을 커널 되돌리기보다 권장.
- Torvalds, 2026년 4월 Linux 7.0 출시 전 결정 예정.
- rc 버전 테스트: s_lock() 분석을 위한 perf record -e cycles.
— Editorial Team
아직 댓글이 없습니다.