ARM64 inline asm 포팅 가이드 (커널/Clang 포팅 관점)
ARM64(AArch64)에서 inline asm은 문법이 어렵다기보다, 컴파일러가 더 엄격하고 최적화가 더 공격적이라서 사고가 난다. 특히 벤더 커널을 Clang으로 옮길 때는 constraint 선택, clobber, barrier 세 가지가 대부분의 원인이다. 이 글에서는 ARM64에서…
ARM64(AArch64)에서 inline asm은 문법이 어렵다기보다, 컴파일러가 더 엄격하고 최적화가 더 공격적이라서 사고가 난다. 특히 벤더 커널을 Clang으로 옮길 때는 constraint 선택, clobber, barrier 세 가지가 대부분의 원인이다. 이 글에서는 ARM64에서…
이 글은 Ubuntu 환경에서 Clang/LLVM 툴체인을 이용해 Linux 커널을 실제로 빌드하는 방법을 단계별로 정리한다. Clang/LLVM 툴체인 설치는 아래 글을 먼저 확인한다. https://junorionblog.co.kr/linux-%ec%bb%a4%eb%84%90-clang-llvm-%ed%88%b4%ec%b2%b4%ec%9d%b8-%ec%a4%80%eb%b9%84%ed%95%98%ea%b8%b0/ Ubuntu 커널 빌드에 대한 건 아래 글을 참고한다.…
ftrace는 리눅스 커널에 내장된 강력한 추적 도구로, 함수 호출, 스케줄 및 이벤트 추적을 가능하게 하는 강력한 디버깅 및 프로파일링 도구이다. 이 블로그 글에서는 ftrace를 사용하여 리눅스 커널 함수를 추적하는 방법에…
dump_stack() 함수는 리눅스 커널 디버깅의 핵심 도구 중 하나로, 콜 스택을 커널 로그로 볼 수 있게 한다. 커널 개발자들은 이 함수를 활용하여 프로그램의 동작을 추적하고 문제 해결을 위한 힌트를 얻을…
printk() 함수는 리눅스 커널에서 메시지 출력과 디버깅을 위한 핵심 도구 중 가장 기본이 되는 도구이다. 이 글에서는 printk() 함수의 기능, 사용법, 예제 코드, 그리고 유용한 팁에 대해 알아본다. printk() 함수…
리눅스 커널은 다양한 비동기 작업을 관리하기 위한 여러 메커니즘을 제공하는데, 그 중 Tasklet과 Workqueue는 주목할 만한 두 가지 방법이다. 이 두 가지 메커니즘은 각각 고유한 특성과 사용 사례를 가지고 있으며,…
cgroup v1 하에서는 시스템 프로세스들에 대한 계층 구조를 각기 제공하는 별게 cgroup 파일시스템의 각 컨트롤러를 마운트 할 수 있다. 또한 같은 cgroup 파일시스템에 여러 (또는 모든) cgroup v1 컨트롤러들을 함께…
리눅스 커널에서 initcalls는 초기화 함수를 실행하는 메커니즘으로 커널 초기화 단계에서 시스템의 다양한 구성 요소를 초기화하는 데 사용된다. 이번 글에서는 initcalls의 동작 원리와 사용 방법에 대해 알아보고, 커널 코드 및 예제를…
cgroups Notification API를 통해 cgroup의 상태 변경에 대한 알림을 받을 수 있다. 이를 활용하면 메모리 Threshold를 등록하고 도달 시 알림을 받을 수 있다. 메모리 Threshold 등록 방법 메모리 Threshold를 등록하기…
memory 서브시스템(memcg)은 프로세스 그룹의 메모리 리소스를 효율적으로 관리하는 기능이다. 이를 통해 메모리 사용량을 제한하고, Out-of-Memory(OOM) 상황을 방지할 수 있다. 또한 메모리 사용량 모니터링을 통해 리소스 사용 상태를 파악할 수 있으며,…