lockstat 사용법 — /proc/lock_stat으로 커널 락 경합 지점 찾기
멀티코어에서 처리량이 코어 수만큼 늘지 않고 어느 지점부터 오히려 떨어질 때, 원인이 락 경합(lock contention)인 경우가 많다. perf lock은 배포판 커널 그대로도 쓸 수 있어 편하지만 트레이스포인트를 기록하는 방식이라 "측정하는…
멀티코어에서 처리량이 코어 수만큼 늘지 않고 어느 지점부터 오히려 떨어질 때, 원인이 락 경합(lock contention)인 경우가 많다. perf lock은 배포판 커널 그대로도 쓸 수 있어 편하지만 트레이스포인트를 기록하는 방식이라 "측정하는…
앞선 편들에서 module! 매크로로 init/exit을 가진 모듈을 만들고 misc device까지 붙여봤다. 그런데 실제 하드웨어를 다루는 드라이버는 insmod 시점에 일을 시작하지 않는다. 모듈은 "이런 하드웨어를 담당할 수 있다"고 등록만 해두고, 그…
다섯 편에 걸쳐 Kconfig 옵션, 컴파일러 최적화, initramfs, VM 서브시스템을 하나씩 만졌다. 이번 편에서는 그 모든 변경을 한 커널에 합쳐 defconfig 베이스라인과 최종 비교를 하고, 시리즈 제목이기도 한 "메모리가 작은…
지난 편에서는 initrd 없이 root=/dev/vda로 직접 부팅하는 구성으로 defconfig 커널의 베이스라인을 측정했다. 하지만 실제 임베디드/컨테이너 이미지에서는 initrd(정확히는 initramfs)를 쓰는 구성도 흔하다 — 루트 파일시스템 드라이버를 모듈로 빼두고 initramfs에서 필요한 것만…
컨테이너나 저사양 임베디드 보드처럼 메모리가 1GB 이하로 제한된 환경에서는 배포판 defconfig 커널조차 여유 공간을 상당히 잡아먹는다. 배포판 커널은 다양한 하드웨어를 지원하기 위해 수많은 드라이버와 서브시스템을 켜둔 상태라, 실제 타깃 환경에서는…
멀티코어 ARM SoC가 부팅할 때 인터럽트 컨트롤러(GIC)는 커널이 넘겨받기 한참 전, EL3(Secure Monitor)에서부터 설정돼 있어야 한다. 초기화가 빠지거나 순서가 틀리면 커널 입장에서는 GIC가 있는데도 인터럽트가 아예 안 들어오거나 특정 코어만…
하이퍼바이저 호스트를 재부팅해야 할 때, VM을 끄고 다른 호스트에서 다시 켜는 cold migration은 서비스가 몇 분씩 죽는다. QEMU/KVM의 live migration은 VM을 실행 상태 그대로 유지하며 메모리/디바이스 상태를 다른 호스트로 옮기고…