Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Linuxカーネルソースの減量

 Linuxカーネルソースの減量

- Linux consists of about 18 million lines of code
- Proving the code of core functions are not so big by deleting non-core code

Satoru Takeuchi

March 24, 2018
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. どこから手を付けるか 5 サブディレクトリ名 役割 総行数 [万行] 全体に占める割合 [%] drivers デバイスドライバ

    1199.0 67.5 arch アーキテクチャ依存部分 169.3 9.5 fs ファイルシステム 111.3 6.2 net ネットワークスタック 93.9 5.2 sound サウンド関連 86.9 4.8 その他 --- 115.3 6.4 上から順が効率的
  2. 性能測定用コード(2.9万行)の減量 • 明らかに必須ではない • x86には問答無用で組み込まれている 13 a. 関連コードを全削除 b. ビルド

    c. ptrace()周りのコードをコンパイルできなくなった d. ptrace()がENOSYSを返すよう手作業で改造 e. ptrace()周りを含めて合計3.1万行減量!
  3. プロセススケジューラ用コード(2.5万行)の減量 • 各プロセスは1つのスケジューリングクラスに属する ◦ fair_sched_class: 通常のプロセス ◦ rt_sched_class: 通常のプロセスより常に優先動作するプロセス ◦

    dl_sched_class: デッドライン付き処理用のプロセス 15 a. Fair_sched_classを除くクラスのコードを全削除 b. ビルド c. スケジューラ共通コードがコンパイルできなくなった d. sched_setscheduler()がENOSYSを返すよう手作業で改造 e. 1.3万行減量!
  4. おわりに • 「Linuxカーネルはデカ過ぎて怖い」 -> 「思ってたより怖くない」 • 各種ソース読解技術を組み合わせるとさらに怖くない ◦ 単一機能の理解に絞る ◦

    エラー処理などの枝葉のコードはとりあえず無視 ◦ デバッガ、トレーサ、プロファイラなどを使った動作確認 • 具体的にどうすれば上記技術を得られる? ◦ 現状は慣れ、および経験者のアドバイスに頼ることが多い => スケールしない ◦ 記事/同人誌執筆ネタ? 21
  5. 参考 • 本取り組みの成果物 ◦ https://github.com/satoru-takeuchi/minimal-linux • 第一段階の詳しい流れ ◦ http://raphine.hatenablog.com/entry/2018/02/09/153356 •

    「小さいLinux環境の作り方」 by @fadis_ ◦ ソース行数ではなくバイナリサイズ削減が目的 ◦ https://speakerdeck.com/fadis/xiao-sailinuxhuan-jing-falsezuo-rifang 22