리눅스 커널에서 scatter-gather DMA 이해하기
디바이스에 넘길 버퍼가 물리적으로 연속되어 있다는 보장은 없다. vmalloc으로 받은 큰 버퍼는 물리 페이지가 여기저기 흩어져 있고, 네트워크 패킷처럼 여러 조각(헤더+페이로드)을 한 번의 전송으로 묶어야 하는 경우도 흔하다. scatter-gather DMA는…
디바이스에 넘길 버퍼가 물리적으로 연속되어 있다는 보장은 없다. vmalloc으로 받은 큰 버퍼는 물리 페이지가 여기저기 흩어져 있고, 네트워크 패킷처럼 여러 조각(헤더+페이로드)을 한 번의 전송으로 묶어야 하는 경우도 흔하다. scatter-gather DMA는…
라즈베리파이 4/5 계열은 부트로더가 보드 위 EEPROM에 저장되어 있고, rpi-eeprom-update로 최신 버전으로 갱신할 수 있다. "부트로더를 빌드한다"는 말 때문에 소스를 내려받아 컴파일하는 과정을 떠올리기 쉬운데, 실제로는 다르다. rpi-eeprom 저장소에는 이미…
KASAN이나 KFENCE 같은 소프트웨어 메모리 안전성 도구는 결국 소프트웨어다 — 섀도 메모리를 따로 관리하거나(KASAN), 확률적으로 일부 할당만 감시하거나(KFENCE), 어느 쪽이든 CPU 사이클을 써서 검사 로직을 흉내낸다. MTE(Memory Tagging Extension)는 이…
라즈베리파이에 센서나 디스플레이를 하나 새로 붙일 때마다 base device tree(.dtb) 전체를 다시 컴파일해서 부트 파티션에 올리는 건 번거롭고, 보드마다 다른 base tree를 관리해야 하는 상황과도 잘 안 맞는다. Device Tree…
구조체 필드 순서가 메모리 낭비와 캐시 효율에 영향을 준다는 건 다들 안다. 문제는 "그래서 지금 이 구조체가 얼마나 낭비하고 있는지"를 눈으로 확인하기가 쉽지 않다는 것이다. pahole은 DWARF 디버그 정보나 커널의…
프로세스 하나가 뚫리면 그 프로세스가 가진 권한 전체가 그대로 노출된다. 파일 소유권이나 setuid만으로는 "이 프로그램은 딱 이 파일 몇 개만 건드릴 수 있다"는 세밀한 통제가 안 된다. AppArmor는 경로 기반…
스레드 간, 또는 프로세스 간에 "무슨 일이 일어났다"는 신호 하나만 가볍게 보내고 싶을 때 파이프나 소켓은 다소 과하다. eventfd는 커널이 관리하는 64비트 정수 카운터 하나를 파일 디스크립터로 노출해서, select/poll/epoll 같은…
2024년 10월만 해도 리누스 토르발스는 AI 코딩 도구를 두고 "90%는 마케팅 과장"이라며 무시하겠다고 말했습니다. 2026년 7월 15일, 그는 정반대에 가까운 어조로 리눅스 커널 메일링 리스트에 이렇게 썼습니다. "Linux is not…
라우팅 테이블이나 설정 캐시처럼 읽기는 압도적으로 많고 쓰기는 어쩌다 한 번인 자료구조에 일반 락(mutex/spinlock)을 쓰면, 정작 서로 방해할 일이 없는 리더끼리도 락 때문에 경합한다. RCU(Read-Copy-Update)는 리더 쪽을 아예 락-프리로 만들어버리는…
워치포인트로 "이 변수가 언제 바뀌는지"는 잡을 수 있어도, 그 값이 왜 그렇게 됐는지 되짚어 올라가려면 결국 브레이크포인트를 다시 걸고 처음부터 재실행하기를 반복하게 된다. Mozilla의 rr 같은 record-and-replay 디버거는 실행을 통째로…