리눅스 커널에서 eBPF 스핀락 문제를 해결하는 이야기
Linux 커널의 eBPF 스핀락 문제 해결에 관한 본 기사는, Superluminal CPU 프로파일러 사용 중 발생한 시스템 정지 현상을 추적하며 시작합니다.
eBPF 코드 내에서 발생하는 스핀락 경합 문제를 분석한 결과, rqspinlock(복원력 있는 큐잉 스핀락) 구현의 동시성 결함이 원인임을 밝혀냈습니다.
특히, NMI(비마스킹 인터럽트) 상황에서 락 획득 상태와 락 보유 테이블 업데이트 간 타이밍 이슈로 인해 재귀적 락 획득 감지가 누락되어 250ms 타임아웃이 발생, 시스템 정지가 유발되었습니다.
해당 문제는 락 보유 테이블 업데이트 시점을 락 획득 시도 이전으로 변경하는 패치로 해결되었으며, 이후 추가적인 타임아웃 검사 개선과 NMI 간섭 문제도 연속된 커널 패치로 보완되었습니다.
이 연구는 eBPF 프로그래밍과 커널 락 메커니즘의 복잡한 상호작용을 심층적으로 탐구하며, 최신 커널 버전에서의 안정성 향상과 함께 구버전 커널 대응을 위한 우회책도 제시하는 실용적 가치를 제공합니다.
