리눅스 시스템 디버깅

KFENCE: Kernel Electric-Fence

KASAN은 힙 오버플로우나 use-after-free를 잡아내는 데 강력하지만, 모든 할당에 리다이렉션 존(redzone)과 섀도 메모리 검사를 붙이는 방식이라 오버헤드가 크고 프로덕션에 상시 켜두기는 부담스럽다. KFENCE(Kernel Electric-Fence)는 이 문제를 확률적 샘플링으로 우회한다 —…

Continue ReadingKFENCE: Kernel Electric-Fence

perf top으로 실시간 락 함수 프로파일링하는 방법

락 경합(lock contention)은 멀티코어 시스템에서 흔한 성능 병목 원인이다. CPU 사용률은 높은데 실제 작업 처리량은 그대로거나 오히려 떨어진다면, 스레드들이 실제 일을 하는 대신 서로 락을 기다리며 시간을 보내고 있을 가능성이…

Continue Readingperf top으로 실시간 락 함수 프로파일링하는 방법

topdown-tool로 Arm Neoverse 성능 분석하기

perf stat로 cycles, instructions, cache-misses 몇 개를 조합해 IPC와 미스율을 계산하는 건 코어 하나짜리 애플리케이션이라면 충분하다. 그런데 병목이 프론트엔드인지 백엔드인지까지 확인한 다음, 백엔드라면 그게 L1인지 L2인지 라스트레벨 캐시인지 TLB인지까지 계속…

Continue Readingtopdown-tool로 Arm Neoverse 성능 분석하기

delayacct 사용법

CPU 사용률은 낮은데 프로세스가 유독 느리게 느껴질 때가 있다. top이나 ps는 프로세스가 CPU를 얼마나 썼는지는 보여주지만, 그 프로세스가 CPU를 기다리느라 얼마나 시간을 날렸는지, 디스크 I/O나 스왑·메모리 회수 때문에 얼마나 블로킹됐는지는…

Continue Readingdelayacct 사용법

bpftrace로 리눅스 시스템 콜과 지연시간 디버깅하기

특정 프로세스가 어떤 시스템 콜을 얼마나 자주 호출하는지, 혹은 파일 하나를 여는 데 왜 갑자기 수십 밀리초가 걸리는지 알아내야 할 때 strace부터 떠올리기 쉽다. 하지만 strace는 매 시스템 콜마다 대상…

Continue Readingbpftrace로 리눅스 시스템 콜과 지연시간 디버깅하기

AddressSanitizer(ASan) 동작원리

ASan(AddressSanitizer)을 켜고 프로그램을 돌리면 heap-buffer-overflow나 use-after-free가 발생한 순간 바로 크래시가 나면서 어느 함수의 몇 번째 줄에서, 어떤 malloc 호출로 할당된 메모리에 접근했는지까지 정확히 짚어주는 리포트가 뜬다. 일반적인 세그폴트는 침범한 메모리가…

Continue ReadingAddressSanitizer(ASan) 동작원리

Valgrind로 메모리 누수 탐지하기

C/C++로 짠 프로그램에서 메모리 누수는 당장 크래시를 내지 않아서 더 골치 아프다. 며칠씩 켜두는 서버 프로세스가 서서히 메모리를 더 먹다가 결국 OOM으로 죽어야 그제서야 문제를 알아차리는 경우가 흔하다. 이 블로그에서는…

Continue ReadingValgrind로 메모리 누수 탐지하기

GDB 고급 사용법 — 메모리 조사부터 원격 디버깅까지

아래 GDB 사용법 글에서 breakpoint·step·backtrace·print 같은 기본기는 이미 다뤘다. 하지만 실무에서, 특히 임베디드/크로스컴파일 환경에서 GDB를 쓰다 보면 로컬 바이너리에 breakpoint 거는 것만으로는 부족한 상황이 자주 생긴다. 타깃 보드에는 GUI도 없고…

Continue ReadingGDB 고급 사용법 — 메모리 조사부터 원격 디버깅까지

Linux 블록 I/O 추적 도구 blktrace 사용법

디스크 I/O 지연이 의심되는데 iostat이나 top 같은 도구로는 정확히 어느 단계(큐잉, 병합, 드라이버 전달, 디바이스 처리)에서 시간이 걸리는지 알기 어려울 때가 있다. blktrace는 커널 블록 계층(Block Layer)의 트레이스포인트를 이용해 이…

Continue ReadingLinux 블록 I/O 추적 도구 blktrace 사용법