More Related Content
PDF
Programming camp code reading PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと PPT
20131128 perl beginners_11_profiler PDF
PDF
PDF
ODP
Sourcecode Reading Workshop2010 PDF
ASPLOS2017: Building Durable Transactions with Decoupling for Persistent Memory What's hot
PDF
いいかげんな人のためのTransactional Memory Primer PDF
Hokkaido.cap#8 ケーススタディ(セキュリティ解析:後編) PDF
PDF
本当にわかる Spectre と Meltdown PDF
Richard high performance fuzzing ja PDF
Hokkaido.cap#7 ケーススタディ(セキュリティ解析:前編) PDF
Intel TSX HLE を触ってみた x86opti ODP
PDF
PDF
PDF
PDF
Hokkaido.cap#5 ケーススタディ(ネットワークの遅延と戦う:後編) PPT
Handlersocket etc. 20110906 PPT
PDF
PDF
Hokkaido.cap#3 ケーススタディ(基礎編) PDF
PDF
Hokkaido.cap#4 ケーススタディ(ネットワークの遅延と戦う:前編) PPT
PDF
Linux デスクトップ環境のセキュリティを考えてみる Viewers also liked
ODP
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for... ODP
PPTX
今さら聞けないHadoop セントラルソフト株式会社(20120119) PDF
PDF
バイナリアンを目指して For a binaryen PDF
PDF
KEY
ソーシャルゲームログ解析基盤のHadoop活用事例 PDF
PDF
PDF
Web関連技術の最新動向・プログラミング言語(サーバ側) PDF
aisatsu suruto tomodachiga popopoponnto hueruyo PDF
TomonkenTohoku40th(20150125) PPT
CA Japan seminar mainframe2.0 2011/10/26 PPTX
PPTX
PPT
PPT
PDF
Similar to How to read linux kernel
PDF
PDF
PDF
OpenFlowをXenServerで試してみよう PPT
PDF
PDF
Linux Kernel Seminar in tripodworks PDF
PDF
PDF
OpenContrailのソースコードを探検しよう! KEY
PDF
debugging server with strace PPT
PDF
インフラエンジニアがk8sでアプリを作って見えた今後のインフラ PDF
IaaSクラウドを支える基礎技術 演習編_v1_0 PDF
【学習メモ#11th】12ステップで作る組込みOS自作入門 PPTX
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~ PDF
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理 PDF
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese) PDF
More from Naoya Ito
PPT
PPT
Scripting Layer for Android + Perl PPT
Web-Gakkai Symposium 2010 PPT
PPT
PPT
Introduction to Algorithms#24 Shortest-Paths Problem PPT
090518computing Huffman Code Length PPT
PPT
PPT
PPT
PPT
PPT
How to read linux kernel
- 1.
- 2.
- 3.
- 4.
早速カーネルを読む ! 「なんとかわいい バイナリ」 「0x000000c4 は 俺の嫁 」 「いやいや、そこは 0x0000006d でしょう? なおや 氏 」 - 5.
- 6.
- 7.
- 8.
以前の私 #1 負荷が過剰「このサーバーはディスクが 重そう 」 (実際どこが正確な原因なんだろう...) (そもそも"負荷"って何だろう...) - 9.
以前の私 #2 loadaverage が 10.00 「 Google で調べると CPU数で割って 1.00 以下なら OK らしい。」 (なんでCPU数で割るんだろう...) (そもそも load average って何だ...) - 10.
以前の私 #3 Apacheがアクセス過多 「prefork から worker にすればマルチスレッドになって 速くなるかも 」 (なんでスレッドだと速いのかしら...) (とりあえず収まったから良いか...) - 11.
以前の私 #4 I/Oが高くてディスクがもたない 「サーバー増やしてみる? SCSI のディスクに 変えてみよう か」 (I/O ってどうやったら減らせるの...?) ( SCSI にしたところで大して速くならない...) - 12.
- 13.
現在の私 #1 負荷が過剰OS の出力する統計情報から原因を特定 load average が 10.00 load average を上昇させるプロセスを特定 プロセスの挙動からボトルネックを特定 - 14.
現在の私 #2 Apacheがアクセス過剰 なぜ応答を返せないか原因を統計から特定 プロセス or スレッドは両者の差異点がどこかを考慮して選択 I/O が高くてディスクが持たない I/O 分散計画をキャッシュを前提に立てる - 15.
カーネルのソースに触れたことで OS の動作原理や統計情報の意味をソースコードレベルで理解することができた 根拠を持って負荷分散戦略を立てられるようになった スケーラブルなアプリケーション設計に自信が持てるようになった 抽象レイヤが透けて見える - 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
Linux カーネルの設計モノリシックカーネル 複雑な設計パターンはあまりない ややオブジェクト指向 (VFS など) ただし量は多い ... 500Mステップ - 25.
- 26.
- 27.
- 28.
- 29.
GNU GLOBAL ソースコードタグシステム関数の定義場所、呼び出し場所にジャンプ Emacs と連携 if (likely(prev != next)) { rq->nr_switches++; rq->curr = next; ++*switch_count; context_switch (rq, prev, next); } else { ... sched.c 3517 行目 sched.c 1860 行目 static inline void context_switch (...) { struct mm_struct *mm, *oldmm; prepare_task_switch(rq, prev, next); mm = next->mm; .. - 30.
- 31.
- 32.
- 33.
Linux Kernel HackJapan http://hira.main.jp/wiki/index.php " ひら " さんによる膨大な覚書き ひらメソッド 分からない時のヒントに - 34.
ソースを読む 5 つのコツ読む対象を絞る いきなり読まない 概観を知った上で読む 重要なデータ構造を把握する テストプログラムのトレースを活用する - 35.
1. 読む対象を絞る隅々まで読もうとしない 500Mステップも読めない (自分もまだ数 % です) テーマを決めて読む 「load average の計測方法を調べる」 「コンテキストスイッチの仕組みを調べる」 「 select(2) の実装を調べる」 - 36.
- 37.
3. 概観を知った上で読む書籍で知りたい箇所の概観を掴む スケジューラの概要 ... ふむふむ、なるほど -> ソース読む 大枠が分かっていれば迷子にならない - 38.
4. 重要なデータ構造を把握しておく重要なデータ構造 struct task_struct struct mm_struct VFS の struct file_operations ... - 39.
5. テストプログラムを活用例: スレッド生成周りの処理が知りたい pthread_create() するプログラムを作る プログラムを strace する システムコールの呼ばれ方 -> 実装箇所の当たりが付く - 40.
例 : usleep(3) の精度が知りたい http://d.hatena.ne.jp/naoya/20080122 まずテストプログラムで実験 strace で nanosleep(2) の呼び出しを確認 書籍の索引で nanosleep を引く タイマ割り込み周りの章を読む タイマ割り込み周りのコードの当たりがつく ack や GNU GLOBAL を駆使して sys_nanosleep() の実装 / 周辺を芋づる式に調べていく ( 道筋の記録を忘れずに ) nanospeel(2) の母体になっている動的タイマが割り込み周期に依存していることが分かる -> 4ms - 41.
読んで分かった必要な知識 C言語 gcc拡張 GNU開発ツール CPU の機能 (x86) オブジェクト指向 簡単なパターン (Template Method など) Writing a Simple File System http://www.geocities.com/ravikiran_uvs/articles/rkfs-old.html - 42.
番外編 手を動かしたい方は ...カーネルモジュール開発が面白い http://d.hatena.ne.jp/naoya/20071201 フィボナッチ数列を計算するデバイス ( アホ ) % cat /proc/fib 10 % cat /dev/fib 55 - 43.
- 44.
最後に カーネル? 何の役に立つの?「ただ知りたかった」 カーネルへの興味が負荷分散に繋がるとは思っていなかった 役に立つかどうかは知らなければ分からない。 知りたいと思う動機を大切に。 - 45.