Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
カーネルコードの歩き方
Search
Satoru Takeuchi
PRO
May 24, 2023
Technology
4
4.1k
カーネルコードの歩き方
以下イベントのセッションスライドです。
https://techfeed.io/events/techfeed-experts-night-19
Satoru Takeuchi
PRO
May 24, 2023
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
99
様々なファイルシステム
sat
PRO
0
290
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
370
ソースを読むプロセスの例
sat
PRO
22
16k
メモリマップトファイル
sat
PRO
1
140
「Linux」という言葉が指すもの
sat
PRO
4
230
APIとABIの違い
sat
PRO
5
220
ファイルシステムへのアクセス方法
sat
PRO
0
88
ファイルシステム
sat
PRO
1
81
Other Decks in Technology
See All in Technology
Amazon Q Developer CLIをClaude Codeから使うためのベストプラクティスを考えてみた
dar_kuma_san
0
340
アノテーション作業書作成のGood Practice
cierpa0905
PRO
1
410
AIエージェントは「使う」だけじゃなくて「作る」時代! 〜最新フレームワークで楽しく開発入門しよう〜
minorun365
PRO
7
1.1k
こんな時代だからこそ! 想定しておきたいアクセスキー漏洩後のムーブ
takuyay0ne
2
110
AI時代に必要なデータプラットフォームの要件とは by @Kazaneya_PR / 20251107
kazaneya
PRO
4
730
Data Engineering Guide 2025 #data_summit_findy by @Kazaneya_PR / 20251106
kazaneya
PRO
8
1.5k
MCP サーバーの基礎から実践レベルの知識まで
azukiazusa1
21
9.4k
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
110
Spec Driven Development入門/spec_driven_development_for_learners
hanhan1978
1
690
初海外がre:Inventだった人間の感じたこと
tommy0124
1
200
Copilotの精度を上げる!カスタムプロンプト入門.pdf
ismk
5
1.3k
InsightX 会社説明資料/ Company deck
insightx
0
210
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Testing 201, or: Great Expectations
jmmastey
46
7.7k
Gamification - CAS2011
davidbonilla
81
5.5k
Bash Introduction
62gerente
615
210k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Rails Girls Zürich Keynote
gr2m
95
14k
Into the Great Unknown - MozCon
thekraken
40
2.1k
Making Projects Easy
brettharned
120
6.4k
Automating Front-end Workflow
addyosmani
1371
200k
GraphQLとの向き合い方2022年版
quramy
49
14k
Transcript
カーネルコードの歩き方 May. 24, 2023 Satoru Takeuchi twitter: satoru_takeuchi 1
はじめに • 著者 ◦ 社会人一年生から15年くらいカーネル開発 /サポートをやってきた ◦ 今も必要に応じてカーネルソースを見ている • 本LTで学べること
◦ Linuxのカーネルソースの読み方についての勘所 ◦ 汎用的な、あらゆるソースコードの読み方についても同様の知識 • 前提知識 ◦ なんらかのプログラミング経験がある ◦ Gitが使える 2
Linuxカーネルソースの規模感 • V6.3時点で > 3,000万行 • バージョン間の変化: v6.2 -> v6.3(リリース間隔は約2か月)
◦ コミット数: > 15,000 ◦ 増加した行数: > 47,000 3
Linuxカーネルソースの規模感 • V6.3時点で > 3,000万行 • バージョン間の変化: v6.2 -> v6.3(リリース間隔は約2か月)
◦ コミット数: > 15,000 ◦ 増加した行数: > 47,000 • 目的を定めずに「とりあえず読んでみるか」はかな り厳しい! 4
読むコツ • 明確、かつ、小さめの目標を立てる ◦ 「カーネルを完全に理解したい」 => つらい(3000万行) ◦ 「この機能でこのオプションを使ったときの挙動を知りたい」 =>
それならなんとか(1000行) • gitなどのツールを駆使して読まなければならないコード量を減らす • 読むだけでなく実際に動かしてみる • 本やWeb記事を読んで前提知識を適宜身に着ける(スライド末尾の付録参照) ◦ OSカーネルの専門知識 ◦ Linuxカーネルの独自用語 5
実例 • きっかけ ◦ 出版した書籍で言及していた /proc/sys/kernel/sched_latency_nsというファイルが存在しないと読 者に突っ込まれた ▪ https://zenn.dev/satoru_takeuchi/articles/cec2160c6b1b13 ◦
実機検証はしたはずだが …なぜだ!? • 問題のスコープ ◦ 読者のカーネル(v5.15)でファイルがなくなっているのかを確認 ◦ 本当になくなっていたのであれば、いつなくなったかの確認 6
まずやること • v5.15のソースをチェックアウトして読む 7
まずやること • V5.15のソースをチェックアウトして読む…のはめんどくさいので、まずは 実機で確認 • 読まなくても動かせばわかることがいっぱいある! 8
実機検証 • やること ◦ 特定のカーネルでブートしたシステムにログインして /proc/sys/kernel/sched_latency_nsファイルが あるかどうか確認 • 結果 ◦
自分の環境のカーネルバージョン (v5.4) ▪ ファイルはあった ◦ 読者のカーネルバージョン (v5.15) ▪ ファイルはなかった 9
どこのバージョンで変化があったか確認 • V5.4, v5.5, v5.6…と、カーネルバージョンを一個づつ変えて動作確認 10
どこのバージョンで変化があったか確認 • V5.4, v5.5, v5.6…と、カーネルバージョンを一個づつ変えて動作確認…は、め んどくさそうなので以下のようなことをした 1. V5.4のソース上でsched_latency_nsをgrepで検索して、このファイ ルを作っている処理を見つける 2.
V5.15のソース上で上記処理が存在していないことを確認 3. 上記処理がいつ無くなったかを、ソースコードのバイナリサーチ(後述) によって確認 11
ソースコードのバイナリサーチ 1. v5.4とv5.15の中間のv5.9をチェックアウトして、処理があることを確認 2. V5.9とv5.15の中間のv5.12をチェックアウトして、処理があることを確認 3. v5.12とv5.15の中間の…というのを繰り返す 4. 最終的にv5.13において処理が無くなったことを特定 12
大事なこと • 実はソースをあんまり読んでいない • 一見ソースを読まなければならないようなときも、読む前にかなりの絞り込みができ る • 「どこで読み始めるか」という最適解は無い ◦ 考えられる選択肢のうち「なんとなく一番たくさん楽できそう」なものから順番に試してみるのがヨシ
◦ 「なんとなく一番楽できそう」なものを推測するのは経験を積むほどうまくなる ◦ 最初から最善を求めると身動きできなくなるので、とにかく回数をこなすとよい 13
おわりに • Linuxカーネルはものすごく大規模 • まともに挑むと道に迷うだけ • 目的を明確化した上で読むべき場所を減らしていく • 読むための基礎知識をWebや書籍で適宜得る必要がある •
経験がものをいう • Happy Hacking! 14
参考書籍 • 詳解Linuxカーネル ◦ https://amzn.to/3IvCneV ◦ 昔の本だが概念の理解には役立つ。実装の説明は流し読みかスルーでいい • Linux Kernel
Development 3rd edition ◦ https://amzn.to/439tW0y ◦ これまた古い本だが概念の理解に役立つ。詳解 Linuxカーネルよりだいぶ読みやすい • Linuxのしくみ 増補改訂版 ◦ https://amzn.to/45keroj ◦ 概念の理解に役立つ。この中ではいちばんやさしい。ソースは出てこない • Linux Kernel Programming ◦ https://amzn.to/41USNnV ◦ いまのところ一番新しい本。 11月に第二版が出るらしい 15
参考サイト • Linux Kernel Newbies ◦ https://kernelnewbies.org/ ◦ カーネル関連用語解説や、どのバージョンでどんな機能が入ったかなどが書いている •
LWN.net ◦ https://lwn.net/ ◦ Linux Kernelのホットなトピックを扱うニュースサイト 16