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
「Linux」という言葉が指すもの
sat
PRO
4
160
APIとABIの違い
sat
PRO
5
86
ファイルシステムへのアクセス方法
sat
PRO
0
34
ファイルシステム
sat
PRO
1
38
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
6.1k
ポーリングと割り込み
sat
PRO
1
86
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
150
会社員しながら本を書いてきた知見の共有
sat
PRO
3
910
デバイスにアクセスするデバイスファイル
sat
PRO
1
72
Other Decks in Technology
See All in Technology
カンファレンスに託児サポートがあるということ / Having Childcare Support at Conferences
nobu09
1
410
10年の共創が示す、これからの開発者と企業の関係 ~ Crossroad
soracom
PRO
1
630
AWSにおけるTrend Vision Oneの効果について
shimak
0
140
from Sakichi Toyoda to Agile
kawaguti
PRO
1
100
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
7
3.9k
OpenAI gpt-oss ファインチューニング入門
kmotohas
2
1.1k
バイブコーディングと継続的デプロイメント
nwiizo
2
480
E2Eテスト設計_自動化のリアル___Playwrightでの実践とMCPの試み__AIによるテスト観点作成_.pdf
findy_eventslides
1
530
『OCI で学ぶクラウドネイティブ 実践 × 理論ガイド』 書籍概要
oracle4engineer
PRO
2
140
許しとアジャイル
jnuank
1
140
AWS Top Engineer、浮いてませんか? / As an AWS Top Engineer, Are You Out of Place?
yuj1osm
2
170
「Verify with Wallet API」を アプリに導入するために
hinakko
1
260
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
For a Future-Friendly Web
brad_frost
180
9.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Become a Pro
speakerdeck
PRO
29
5.5k
Designing Experiences People Love
moore
142
24k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6.1k
Rails Girls Zürich Keynote
gr2m
95
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
850
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