QEMU(arm64) 임베디드 리눅스 타깃 만들기 (6) — 커널 모듈, gdb 원격 디버깅, NFS 루트

4편까지 오면 타깃은 완성됐다. 남은 것은 이 타깃을 실제 개발에 쓰는 방법이다. 실물 보드에서 하던 일 — 드라이버를 고쳐 올리고, 부팅이 이상하면 붙잡아 들여다보고, 빌드 결과를 매번 굽지 않고 바로…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (6) — 커널 모듈, gdb 원격 디버깅, NFS 루트

QEMU(arm64) 임베디드 리눅스 타깃 만들기 (3) — 커널 크로스 컴파일과 부팅

2편까지 오면 타깃에 부트로더가 올라가 디스크에서 파일을 읽어 실행하는 데까지 된다. 이제 그 자리에 올릴 커널이 필요하다. 실물 보드라면 벤더가 준 커널 소스를 받아 크로스 컴파일하고 SD 카드에 복사하는 단계인데,…

Continue ReadingQEMU(arm64) 임베디드 리눅스 타깃 만들기 (3) — 커널 크로스 컴파일과 부팅

리눅스 커널 7.3 머지 윈도우 — SMP 지연 90% 감소, sched_ext 서브 스케줄러 완성

리누스 토발즈가 8월 16일(현지 시간) 커널 7.2를 릴리스한 직후 7.3 머지 윈도우가 열렸습니다. 첫 rc는 8월 30일경, 최종 릴리스는 10월 말로 예상됩니다. 올해 LTS가 7.3이 될지 7.4가 될지도 이 사이클…

Continue Reading리눅스 커널 7.3 머지 윈도우 — SMP 지연 90% 감소, sched_ext 서브 스케줄러 완성

/sys/kernel/slab으로 SLUB 캐시 상태 들여다보기

슬랩 캐시가 메모리를 얼마나 쓰는지 확인할 때 보통 /proc/slabinfo를 먼저 연다. 하지만 slabinfo에는 캐시별 오브젝트 수와 슬랩 수만 있어서, 이 캐시가 다른 캐시와 병합된 것인지, 슬랩 한 장이 몇 페이지인지,…

Continue Reading/sys/kernel/slab으로 SLUB 캐시 상태 들여다보기

Clang 빌드된 커널에 LTO 옵션 적용 시 Slab 메모리 비교

앞선 두 글에서 GCC/Clang 빌드와 KCFI 빌드의 슬랩(slab) 사용량을 비교할 때 쓴 테스트 커널은 모듈을 하나도 올리지 않은 상태였다. LTO(Link Time Optimization)도 같은 방식으로 재면 부팅 직후 슬랩은 Clang 빌드와…

Continue ReadingClang 빌드된 커널에 LTO 옵션 적용 시 Slab 메모리 비교

Clang 빌드된 커널에 KCFI 적용 시 Slab 메모리 사용량 차이 분석

KCFI(CONFIG_CFI_CLANG)는 간접 호출마다 함수 타입 해시를 대조해 제어 흐름 하이재킹을 막는 Clang 전용 보호 기능이다. 함수마다 타입 ID가 붙고 호출 지점마다 검사 코드가 들어가니 커널이 커지는 것은 분명한데, 그러면 런타임…

Continue ReadingClang 빌드된 커널에 KCFI 적용 시 Slab 메모리 사용량 차이 분석

리눅스 커널 GCC 빌드와 Clang 빌드에 따른 Slab 메모리 차이 분석

커널을 Clang으로 빌드하면 GCC 빌드와 메모리 사용량이 달라질까. 컴파일러가 바뀌면 인라이닝과 코드 생성이 달라지니 커널이 잡는 슬랩(slab) 메모리도 따라 달라질 것 같지만, 실제로 재보면 어느 쪽이 얼마나 다른지 숫자로 답한…

Continue Reading리눅스 커널 GCC 빌드와 Clang 빌드에 따른 Slab 메모리 차이 분석

슬랩 할당 백트레이스 추적: alloc_calls에서 alloc_traces로

슬랩 캐시가 계속 커질 때 /proc/slabinfo는 어느 캐시에 오브젝트가 몇 개 있는지만 알려주고, 그 오브젝트를 누가 할당했는지는 알려주지 않는다. SLUB에는 오브젝트마다 마지막 할당·해제 호출 스택을 기록하는 기능이 있어서 이 질문에…

Continue Reading슬랩 할당 백트레이스 추적: alloc_calls에서 alloc_traces로

리눅스 커널 7.2 릴리스 — 캐시 인지 스케줄링 도입, DRM Fair 스케줄러는 막판 되돌림

리누스 토발즈가 8월 16일(현지 시간) 리눅스 커널 7.2를 릴리스했습니다. 병합 창구에서만 13,412개의 non-merge 커밋이 들어와 2024년 6.7 사이클 이후 가장 바쁜 주기였습니다. 토발즈는 릴리스 공지에서 "마지막 한 주가 또 한…

Continue Reading리눅스 커널 7.2 릴리스 — 캐시 인지 스케줄링 도입, DRM Fair 스케줄러는 막판 되돌림

리눅스 커널의 시스템 콜 처리 경로 — arm64 예외 벡터부터 핸들러까지

x86-64에서는 syscall 명령이 MSR_LSTAR에 적힌 주소로 곧장 점프한다. 시스템 콜 전용 진입점이 레지스터 하나에 박혀 있는 구조다. arm64에는 그런 전용 레지스터가 없다. svc 명령이 만드는 것은 "동기 예외" 하나일 뿐이고,…

Continue Reading리눅스 커널의 시스템 콜 처리 경로 — arm64 예외 벡터부터 핸들러까지