리눅스 커널 GCC 빌드와 Clang 빌드에 따른 Slab 메모리 차이 분석
커널을 Clang으로 빌드하면 GCC 빌드와 메모리 사용량이 달라질까. 컴파일러가 바뀌면 인라이닝과 코드 생성이 달라지니 커널이 잡는 슬랩(slab) 메모리도 따라 달라질 것 같지만, 실제로 재보면 어느 쪽이 얼마나 다른지 숫자로 답한…
커널을 Clang으로 빌드하면 GCC 빌드와 메모리 사용량이 달라질까. 컴파일러가 바뀌면 인라이닝과 코드 생성이 달라지니 커널이 잡는 슬랩(slab) 메모리도 따라 달라질 것 같지만, 실제로 재보면 어느 쪽이 얼마나 다른지 숫자로 답한…
슬랩 캐시가 계속 커질 때 /proc/slabinfo는 어느 캐시에 오브젝트가 몇 개 있는지만 알려주고, 그 오브젝트를 누가 할당했는지는 알려주지 않는다. SLUB에는 오브젝트마다 마지막 할당·해제 호출 스택을 기록하는 기능이 있어서 이 질문에…
리누스 토발즈가 8월 16일(현지 시간) 리눅스 커널 7.2를 릴리스했습니다. 병합 창구에서만 13,412개의 non-merge 커밋이 들어와 2024년 6.7 사이클 이후 가장 바쁜 주기였습니다. 토발즈는 릴리스 공지에서 "마지막 한 주가 또 한…
x86-64에서는 syscall 명령이 MSR_LSTAR에 적힌 주소로 곧장 점프한다. 시스템 콜 전용 진입점이 레지스터 하나에 박혀 있는 구조다. arm64에는 그런 전용 레지스터가 없다. svc 명령이 만드는 것은 "동기 예외" 하나일 뿐이고,…
앞선 편들에서 module! 매크로로 init/exit을 가진 모듈을 만들고 misc device까지 붙여봤다. 그런데 실제 하드웨어를 다루는 드라이버는 insmod 시점에 일을 시작하지 않는다. 모듈은 "이런 하드웨어를 담당할 수 있다"고 등록만 해두고, 그…
커널이 제공하는 트레이스 이벤트는 Ubuntu 24.04 기준 1789개다. 어떤 이벤트를 봐야 할지 모르겠다고 events/enable에 1을 써버리면 1초 만에 수십만 건이 링 버퍼에서 밀려나 사라지고, 정작 보려던 이벤트도 그 안에 묻힌다.…
인터페이스가 언제 올라오고 IP가 언제 바뀌는지 감시해야 할 때, 흔히 ip monitor를 subprocess로 띄우고 출력을 파싱한다. 텍스트 포맷이 배포판마다 조금씩 달라 깨지기 쉽고, 1초마다 ip addr를 폴링하는 방식은 그 사이에…
커널 취약점 하나를 찾는 데 연구자 한 명이 몇 달을 쓰던 시절이 있었습니다. 2026년 8월 라스베이거스에서 열린 블랙햇 USA 2026은 그 전제가 깨졌음을 보여줬습니다. AI 에이전트가 리눅스 커널에서만 잠재적 권한…
파일을 복사할 때 흔히 쓰는 open() + read()/write() 루프는 데이터가 커널 버퍼 → 유저스페이스 버퍼 → 커널 버퍼로 두 번 오간다. os.copy_file_range()(Linux 4.5+, Python 3.8+)는 파일 디스크립터 두 개를 넘기면…
다섯 편에 걸쳐 Kconfig 옵션, 컴파일러 최적화, initramfs, VM 서브시스템을 하나씩 만졌다. 이번 편에서는 그 모든 변경을 한 커널에 합쳐 defconfig 베이스라인과 최종 비교를 하고, 시리즈 제목이기도 한 "메모리가 작은…