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
AIで急増した生産「量」の荒波をCodeRabbitで乗りこなそう
moongift
PRO
0
520
DSPy入門
tomehirata
6
900
SOTA競争から人間を超える画像認識へ
shinya7y
0
690
[Journal club] Thinking in Space: How Multimodal Large Language Models See, Remember, and Recall Spaces
keio_smilab
PRO
0
120
AI時代に必要なデータプラットフォームの要件とは by @Kazaneya_PR / 20251107
kazaneya
PRO
4
690
窓口業務を生成AIにおまかせ!Bedrock Agent Coreで実現する自治体AIエージェント!
rayofhopejp
0
170
InsightX 会社説明資料/ Company deck
insightx
0
200
日本のソブリンAIを支えるエヌビディアの生成AIエコシステム
acceleratedmu3n
0
130
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
0
160
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
0
200
CLIPでマルチモーダル画像検索 →とても良い
wm3
2
800
Giving Tuesday Auctria Set-Up 2025
auctria
PRO
0
100
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Side Projects
sachag
455
43k
Unsuck your backbone
ammeep
671
58k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
192
56k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Agile that works and the tools we love
rasmusluckow
331
21k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
650
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Producing Creativity
orderedlist
PRO
348
40k
Embracing the Ebb and Flow
colly
88
4.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
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