홈으로 돌아가기

Linux 7.0 리그레션 PostgreSQL ARM64

Linux 7.0에서 스케줄러 리그레션이 PREEMPT_LAZY와 s_lock() 시간 증가로 ARM64 PostgreSQL 성능을 반으로 줄임. Amazon 롤백 제안, 질스트라 — 사용자 공간 rseq. 출시 전에 해결 예상.

Linux 7.0에서 PostgreSQL 2배 하락: s_lock 문제
Advertisement 728x90

# 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에 치명적입니다.

Google AdInline article slot

프로파일링 결과:

  • s_lock()에서의 시간 비중이 전체 CPU의 55%로 폭증.
  • pgbench 부하 시 처리량과 응답성이 저하.
  • LAZY 모드를 지원하는 아키텍처에만 영향.

전문가들은 커널 7.0의 최종 테스트 단계에서 되돌리기 옵션이 제한적이며, 새로운 회귀를 유발할 위험이 있다고 지적합니다.

제안된 수정 방안

DiPietro는 기본값을 PREEMPT_NONE으로 되돌리고 ARCH_NO_PREEMPT와 분리할 것을 제안합니다. 패치 작성자이자 스케줄러 서브시스템 유지보수자인 Zijlstra는 PostgreSQL 개선을 주장합니다:

Google AdInline article slot
  • 락 보유자 선점 최소화를 위해 커널의 rseq(Restartable Sequences) 확장을 사용.
  • 사용자 공간 코드에서 spinlock 처리를 최적화.

rseq 슬라이스는 시퀀스 상태의 원자적 확인 및 업데이트를 가능하게 하여 임계 구역 중단 위험을 줄입니다.

커뮤니티 입장과 Linus의 결정

OpenNET 전문가들은 Linus Torvalds의 원칙을 강조합니다: 커널은 성능 저하나 사용자 공간 호환성 파괴를 초래해서는 안 됩니다. 커널 되돌리기(릴리스 위험)와 PostgreSQL 수정(DBMS 조정 필요) 간 대치가 지속 중입니다.

ARM64에서 PostgreSQL을 테스트하는 중/시니어 개발자를 위한 팁:

Google AdInline article slot
  • 커널 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

Advertisement 728x90

다음 읽기