Rust 커널 프로그래밍 가이드 — Ubuntu에서 Rust for Linux 빌드 환경 만들기

업스트림 커널 소스를 --depth 1로 clone해서 rust_minimal.o를 빌드하는 데는 성공했지만, 그건 지금 부팅된 우분투 배포 커널과는 버전이 다른 별개의 트리였다. 실제로 insmod까지 되는지 확인하려면 "지금 이 컴퓨터가 실행 중인 커널"…

Continue ReadingRust 커널 프로그래밍 가이드 — Ubuntu에서 Rust for Linux 빌드 환경 만들기

Rust 커널 프로그래밍 가이드 (4) — 새 모듈을 시작할 때 쓰는 템플릿과 체크리스트

1~3부에서 최소 모듈, misc device, 인터럽트 동기화를 각각 다뤘는데, 매번 module! 매크로부터 새로 채워나갔다. 실제로 새 모듈을 시작할 때는 그 반대가 편하다 — 어떤 필드가 필수고 어떤 게 선택인지, 초기화…

Continue ReadingRust 커널 프로그래밍 가이드 (4) — 새 모듈을 시작할 때 쓰는 템플릿과 체크리스트

Rust 커널 프로그래밍 가이드 (3) — Arc/SpinLock으로 인터럽트 컨텍스트에서 상태 공유하기

2부에서는 misc device의 상태를 Mutex로 보호했다. 그런데 Mutex::lock()은 경합이 발생하면 현재 태스크를 재웠다가 나중에 깨우는 방식으로 동작한다. 하드웨어 인터럽트 핸들러(hardirq context)는 애초에 "태스크"라는 개념이 없는 컨텍스트라 이 방식이 통하지 않는다.…

Continue ReadingRust 커널 프로그래밍 가이드 (3) — Arc/SpinLock으로 인터럽트 컨텍스트에서 상태 공유하기

Rust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl

지난 글에서 살펴본 rust_minimal.rs는 로드되면 로그 몇 줄을 찍고 언로드되면 사라지는, 사실상 아무 일도 하지 않는 모듈이었다. 실제 드라이버라면 얘기가 다르다. 유저스페이스가 open()으로 열고, read()/write()로 데이터를 주고받고, ioctl()로 제어 명령을…

Continue ReadingRust 커널 프로그래밍 가이드 (2) — Misc Device 드라이버로 배우는 open, read/write, ioctl

Rust 커널 프로그래밍 가이드 (1) — 커널이 Rust를 받아들인 이유와 최소 모듈 작성

리눅스 커널 CVE 목록을 오래 들여다본 사람이라면 use-after-free, 버퍼 오버플로우, 널 포인터 역참조 같은 메모리 안전성 버그가 얼마나 자주 반복되는지 알 것이다. 리눅스 안정 커널 메인테이너 그렉 크로아-하트만은 지난 25년간의…

Continue ReadingRust 커널 프로그래밍 가이드 (1) — 커널이 Rust를 받아들인 이유와 최소 모듈 작성

io_uring이 커널 7.2에서 도입한 Lockless MPSC 큐

io_uring을 쓰는 프로그램은 한 번에 여러 비동기 작업을 던져놓고 진행 상황을 추적한다. 그 말은 곧 커널 내부의 io_uring 서브시스템이 처리해야 할 작업(task) 목록을 항상 관리하고 있어야 한다는 뜻이다. 지금까지 io_uring은…

Continue Readingio_uring이 커널 7.2에서 도입한 Lockless MPSC 큐

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

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

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

ARM PMU를 활용한 시스템 성능 모니터링

시스템이 느려졌을 때 "CPU가 바쁜지" "메모리가 병목인지"를 구분하는 건 생각보다 어렵다. top의 CPU 사용률은 코어가 뭔가는 하고 있다는 것만 보여줄 뿐, 그 사이클이 실제 연산에 쓰였는지 메모리 응답을 기다리며 멈춰…

Continue ReadingARM PMU를 활용한 시스템 성능 모니터링

개발자를 위한 추천 Vundle 플러그인 8가지

Vundle로 플러그인 매니저 자체는 갖췄어도, .vimrc에 아무것도 선언하지 않은 vim은 여전히 텍스트 편집기 수준을 벗어나지 못한다. 파일 탐색, git 상태 확인, 코드 자동완성, 린팅처럼 IDE에서는 당연하게 여기는 기능들은 결국 플러그인을…

Continue Reading개발자를 위한 추천 Vundle 플러그인 8가지