큐 구조 이해 + DMA 정렬 오류 경험 + ftrace 디버깅 방법 순으로 설명
졸업 논문에서 리눅스 커널 블록 레이어를 공부하면서 NVMe 드라이버 구조를 처음 들여다봤습니다. NVMe는 큐 기반으로 I/O 요청을 처리하는데, 서브미션 큐와 컴플리션 큐를 CPU 코어마다 분리해 병렬 처리 성능을 높이는 구조가 인상적이었습니다. 드라이버 수정 실습에서는 insmod로 모듈을 올리고 dmesg로 로그를 확인하는 방식으로 커널 로그를 읽었습니다. DMA 전송 과정에서 메모리 맵 정렬 요건을 맞추지 않으면 커널 패닉이 발생하는 케이스를 경험했고, DMA 매핑 API 사용 방법을 다시 공부했습니다. 드라이버 디버깅은 일반 애플리케이션보다 재현과 격리가 어렵기 때문에 ftrace로 함수 호출 흐름을 추적하는 방법을 익혔습니다. 커널 공간에서의 실수는 전체 시스템에 영향을 주기 때문에 실험 환경을 VM으로 격리하는 것도 배웠습니다.
커널 드라이버는 사용자 공간보다 실수 비용이 크지만 그만큼 시스템을 깊이 이해하게 되는 자리라고 생각합니다.