본문 바로가기

All154

[LWN.net] Shrinking the kernel with link-time garbage collection Shrinking the kernel with link-time garbage collection [LWN.net] Shrinking the kernel with link-time garbage collection Benefits for LWN subscribersThe primary benefit from subscribing to LWN is helping to keep us publishing, but, beyond that, subscribers get immediate access to all site content and access to a number o lwn.net Linker Section Garbage Collection C언어로 작성된 프로그램은 전처리기 -> 컴파일러 -> 링커의.. 2021. 11. 5.
[Linux Kernel] RCU (Read-Copy-Update) 공부하다보니 여기저기서 RCU가 나와서 이것도 정리를 해야겠다. RCU는 읽기가 대부분인 상황에서 사용하는 동기화 매커니즘이다. 다른 동기화 매커니즘은 읽기와 쓰기에 대한 오버헤드가 발생하지만, RCU는 읽기에 대한 오버헤드가 존재하지 않는다는 특징이 있다. 커널 문서를 보면 사람들이 RCU를 가지고 오해를 많이 한 것 같다. 이렇게 쓰여있다. 그만큼 RCU가 헷갈리는 주제가 아닌가 싶다. 기존에는 RCU가 RCU를 한 가지 진실된 방법으로 설명할 수 있을거라는 잘못된 가정하에 설명되었다. 사람들은 RCU를 서로 다른 과정으로 이해한다. 따라서 이 문서는 여러가지 방법으로 RCU를 설명한다. Notes 이 글은 비실시간 커널(non real-time kernel)에서의 RCU를 설명한다. 실시간 커널에서.. 2021. 11. 5.
[Linux Kernel] kprobe와 kretprobe BPF를 공부하다보니 실행될 함수를 등록할 때 kprobe, kretprobe, uprobe, tracepoint, UDST 등의 다양한 도구를 사용한다고 해서 이러한 도구들을 먼저 정리해보려고 한다. 우선 이 글에선 kprobe와 kretprobe를 정리해본다. kprobe, kretprobe란 kprobe와 kretprobe는 커널 코드에 동적으로 중단점을 삽입하여 사용자가 정의하는 핸들러 함수가 실행되도록 하는 강력한 도구이다. kprobe는 함수 또는 함수에서 특정 오프셋만큼 떨어진 곳에서 핸들러 함수를 실행하게 해주는 도구이다. kretprobe는 함수가 끝난 후에 핸들러 함수를 실행하게 해주는 도구이다. struct kprobe kprobe의 구조체를 간단하게 살펴보자. 꽤나 직관적이기 때문에.. 2021. 11. 2.
[Linux Kernel] BPF/eBPF란 무엇인가 BPF와 관측가능성 BPF 책을 보면 볼수록 흥미로워서 내용을 정리해본다. BPF는 패킷 필터로 시작해서 현재는 리눅스 시스템에 관측가능성을 부여하는 도구이다. 만들어진지는 거의 리눅스 급으로 오래됐는데 최근 5년간 새로운 용도(?)를 발견하면서 많이 핫해진것 같다. 이 글에서는 BPF가 어떤 구조로 되어있는지를 간단하게 설명한다. 더 공부하면서 bcc나 bpftrace에서 어떻게 프로그램을 실행하는지, BPF 관련 프로젝트에 무엇이 있는지 등등을 정리하려고 한다. 예전에도 BPF라는게 있구나 정도는 알았는데 관측가능성이라는 말의 의미가 잘 와닿지 않아서 그냥 스쳐 지나갔었다. BPF는 사용자 공간에서 명령어 몇개만으로 커널을 새로 빌드하지 않고도 커널 코드를 안전하게 수행할 수 있다. 심지어 커널 코드.. 2021. 10. 31.
성장하고 싶다. 최근 몇달간 내 한계에 계속 도전했다. 최근 몇년간 무언가에 이렇게 도전을 해본 적이 없어서 매우 신선한 경험이었다. 내 능력의 벽을 느끼고, 그 벽을 넘는걸 반복했던 것 같다. 이 과정을 반복하면서 좌절도 많이 하고, 많이 배우고, 약간의 자신감도 생겼다. 물론 아직도 배울게 많고 많이 부족하다. 그리고 최근에 또 다시 하나의 벽을 만났다. 최근에 슬랩 할당자 쪽을 공부하면서 오해도 많이 하고 바보 같은 질문도 많이 하고 이상한 코드도 많이 짰다. 최근에 드는 생각들을 대충 요약하면 내가 아직 경험이 부족해서 너무 이론적으로만 생각하는 것 같다. 물론 메모리 관리가 쉬운 분야가 아니기도 하다. (...) 분야에 대한 폭넓은 이해가 부족한 상태에서 뭔가를 하려다보니 기대와 달리 잘 되지 않았다. 내용을 .. 2021. 10. 28.
[책] BPF 성능 분석 도구 요즘 코드만 보다보니까 너무 시야가 좁아진다는 생각이 들어서 알라딘에서 볼만한 책을 찾다가 이 책을 만났다. 이 책은 BPF라는 도구가 어떻게 동작하고, 이 도구로 리눅스 시스템을 어떻게 계측하는지를 설명해준다. 나는 원래 BPF, TRACING, PERF와 같은 서브시스템이 왜 중요한지 몰랐다. 하지만 이 책을 읽다보니 생각이 완전히 바뀌었다. 예를 들어서 성능과 관련된 부분에서 작업을 한다면 성능을 정확하게 측정할 수 있어야 한다. 코드의 어떤 부분에서 병목이 생기는지, 어떤 코드 경로에서 시간을 잡아먹는지, 실행시에 어떤 이벤트가 발생하는지를 알아야 한다. 정확한 측정 없이는 문제를 찾을 수도 개선할 수도 없다. BPF가 리눅스 시스템을 더 잘 이해할 수 있도록 시야를 넓혀줄거란 기대가 생겼다. 그.. 2021. 10. 28.