Slide 1

Slide 1 text

『Linuxのしくみ 増補改訂版』 発売記念イベント 〜 Linuxのしくみのしくみ ~ Oct. 13rd, 2022 武内覚 twitter: satoru_takeuchi 1

Slide 2

Slide 2 text

おしながき ● 自己紹介 ● 本書の概要 ● 一問一答 ● 会場のみなさまとのコミュニケーション 2

Slide 3

Slide 3 text

おしながき ● 自己紹介 ● 本書の概要 ● 一問一答 ● 会場のみなさまとのコミュニケーション 3

Slide 4

Slide 4 text

著者: 武内 覚 ● 会社員として ○ むかし: 富士通でLinuxカーネルの開発、サポートに従事 ○ いま: サイボウズでcybozu.comの新インフラのストレージ開発に従事 ● 個人として ○ 2018年2月: 「Linuxのしくみ 第一版」執筆 ○ その他いろいろ情報発信 ■ 雑誌やWeb媒体に様々な記事を寄稿 ■ IT技術系同人誌の販売 ■ youtube動画作成 4

Slide 5

Slide 5 text

モデレータ: @nekomatu ● OSSが好きな組込み系Linuxエンジニア ○ 好きなライセンスはGPLv2 ○ キャリアは10年程。一時、クラウドベンダーでテクニカルサ ポートに従事してたことも。 ● プライベート ○ RISC-V勉強会やKernel/VM onlineなどの コミュニティ技術イベントの主催運営 ○ VR系Vtuber活動 @nekoi7yu ○ Ethereumを中心にクリプトエコノミーなども関心あり 5

Slide 6

Slide 6 text

おしながき ● 自己紹介 ● 本書の概要 ● 一問一答 ● 会場のみなさまとのコミュニケーション 6

Slide 7

Slide 7 text

本書の概要 ● Linuxカーネルを浅く広く学ぶ ● 章立て 1. Linuxの概要 2. プロセス管理(基礎編) 3. プロセススケジューラ 4. メモリ管理システム 5. プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 7

Slide 8

Slide 8 text

本書を執筆しようとした動機 ● あらゆるソフトウェア技術者にはOSカーネルの知識が役立つと思っていた ○ 奥深くまで知る必要はなくて、浅く広くでいい ● OSカーネルの本は浅く広く学ぶには不向き ○ 教科書的なコンセプトの説明 ○ 詳細なソースコードの解説 ● 無いから自分で書くことにした ● 筆者はLinuxが得意なのでLinuxをテーマにした 8

Slide 9

Slide 9 text

本書が解決したい問題 9

Slide 10

Slide 10 text

本書を読んだ後になってほしい状態 10

Slide 11

Slide 11 text

本書の基本的な流れ 11

Slide 12

Slide 12 text

具体例: プロセススケジューラ ● 教科書的な説明 ○ あるCPUコア上に実行可能なプロセスが複数あるとする ○ それぞれのプロセスは短い期間ごとに順番に動く ● 読者の理解 ○ なるほどわからん 12

Slide 13

Slide 13 text

1. 図解による概要の理解 13

Slide 14

Slide 14 text

2. 実験(Pythonで書かれた実験プログラム) $ cat sched.py … def child_fn(n): # CP progress = 100*[None] for i in range(100): for j in range(nloop_per_msec): pass progress[i] = time.perf_counter() f = open("{}.data".format(n),"w") for i in range(100): f.write("{}\t{}\n".format((progress[ i]-start)*1000,i)) f.close() exit(0) … … for i in range(concurrency): pid = os.fork() if (pid < 0): exit(1) elif pid == 0: child_fn(i) … 14 一定時間CPUを消費し続けて 進捗をファイルに保存 CPUを消費し続ける プロセスを作る

Slide 15

Slide 15 text

3. データ採取 $ ./sched.py 2 $ ls 0.data 1.data … $ cat 0.data 16.48986899817828 0 17.484944997704588 1 18.473731994163245 2 19.432729997788556 3 20.371213991893455 4 21.83759000035934 5 22.914084998774342 6 23.85638099804055 7 24.812530988128856 8 … 15

Slide 16

Slide 16 text

4. 可視化されたデータに基づく深い理解 16 補足: sched.pyがグラフの生成もする

Slide 17

Slide 17 text

おしながき ● 自己紹介 ● 本書について ● 一問一答 ● 会場のみなさまとのコミュニケーション 17

Slide 18

Slide 18 text

具体的に何を学べる本なのか? 18

Slide 19

Slide 19 text

本書で学べることの全体像 19

Slide 20

Slide 20 text

第一版との違いは? 20

Slide 21

Slide 21 text

章が増えた 1. Linuxの概要 2. プロセス管理(基礎編) 3. プロセススケジューラ 4. メモリ管理システム 5. プロセス管理(応用編) 6. デバイスアクセス 7. ファイルシステム 8. 記憶階層 9. ブロック層 10. 仮想化機能 11. コンテナ 12. cgroup 21

Slide 22

Slide 22 text

全体的に見やすくなった ● 第一版 ○ モノクロだったので、複雑な図 (線の数が多いグラフなど )の理解が難しかった ○ わたしの書いた破滅的なイラストがほぼそのまま使われていた ● 増補改訂版 ○ フルカラー化 ○ デザイナーさんがかっこいい画を書いてくれた 22

Slide 23

Slide 23 text

before(第一版, モノクロ) 23

Slide 24

Slide 24 text

after(増補改訂版, カラー) 24

Slide 25

Slide 25 text

冒頭に出した画は 25 before(原稿) after(デザイナーさん作)

Slide 26

Slide 26 text

既存の章もパワーアップ ● プロセス管理 ○ スレッド、プロセス間通信、ジョブ管理、排他制御 ● 豆知識や発展的な内容を扱うコラムも追加 ○ メモリ管理システム ■ Meltdown脆弱性 ○ ブロック層 ■ 推測するな、測定せよ ■ 何のための性能測定 26

Slide 27

Slide 27 text

実験プログラムのGo,Python化 ● 第一版 ○ ほとんどC言語で書かれている ○ カーネルレイヤの挙動を知るためには Cがほとんど唯一の選択肢だと思い込んでいた ● 増補改訂版 ○ ユーザが多そう&これからも増えそうな Go,Pythonでほとんど書き直した ○ Cじゃないとダメ」なケースはほぼなかった。思い込み厳禁 27

Slide 28

Slide 28 text

タイトルや表紙で工夫したことは? 28

Slide 29

Slide 29 text

「玄人用の本」という威圧感を出さないようにした 超絶Linuxカーネル 実験と図解で学ぶOS、仮想マシン、 コンテナの基礎知識 … void module_init() { printk(“Happy Hacking!”); } … Satoru Takeuchi 29 御託はいいから全部読め エクストリーム出版社

Slide 30

Slide 30 text

ゆるふわ化に成功 第一版 増補改訂版 30 こわくないよ たいへん読みやすいです

Slide 31

Slide 31 text

実験プログラム作りで苦労した点は? 31

Slide 32

Slide 32 text

期待通りのデータがとれる実験プログラムを作るのが大変 ● ほんの少し条件が違うと思った結果にならない ● そもそも自分がLinuxカーネルのつくりを誤解していたこともある ● 学んだこと ○ 読者はカーネルソースを読まなくていいが、筆者は読まなければならない ○ 「推測するな、計測せよ」コラムがブーメランになった 32

Slide 33

Slide 33 text

改訂にあたって一番気を付けたところは? 33

Slide 34

Slide 34 text

誤字脱字などの不備を可能な限り減らす ● 背景 ○ 第一版には大小あわせて100個以上の誤りが存在していた(今は修正済) ○ コンテンツ以外のところでの評価を大きく下げた ● 対策 ○ 様々なバックグラウンドを持つ25人の技術者にレビューを依頼 ■ Linuxカーネルのベテラン開発者 ■ Linuxじゃないカーネルのベテラン開発者 ■ カーネル以外のベテラン技術者 ■ 対象読者に近い人 ○ 本書のことを全く知らないかたに外部校正を依頼 34

Slide 35

Slide 35 text

第一版への反応で驚いたものは? 35

Slide 36

Slide 36 text

C言語への拒否反応のすごさ ● 「C言語がとにかく嫌い」 ● 「C言語だとソースを見る気がしない」 ● 「ポインタに嫌な思い出がある」 ● 「とにかくC言語が嫌い」 36 生理的に無理

Slide 37

Slide 37 text

今後どんなものを書く予定か? 37

Slide 38

Slide 38 text

今後書こうかなと思っている本(変わるかもしれません) ● ソースコードの読み方 ○ 読む目的と対象OSSを決めて図解しながらノウハウを紹介 ○ 進行中 ● 初心者がプログラマになるためのすべてを一冊で解説 ○ 開発環境 ○ プログラミング言語 ○ ソースコード管理システム ○ などなど ● スーパーマニアックなカーネルの本 ○ たまにはこういうのも書きたい ○ まったく売れなさそうなので同人誌にするか ? 38

Slide 39

Slide 39 text

おしながき ● 自己紹介 ● 本書の概要 ● 一問一答 ● 会場のみなさまとのコミュニケーション 39

Slide 40

Slide 40 text

会場のみなさまとのコミュニケーション ● 事前に寄せられた質問への回答 ● イベント会場で出てきた質問(あれば)への回答 ● その他本書に関係する雑談とかいろいろ(あれば) 40

Slide 41

Slide 41 text

おわり ● ありがとうございました 41