目次
序章 はじめに
第1章 Linuxの概要
- プログラムとプロセス
- カーネル
- システムコール
- システムコール発行の可視化
- システムコールを処理している時間の割合
- Column 監視、アラート、およびダッシュボード
- システムコールの所要時間
- ライブラリ
- 標準Cライブラリ
- システムコールのラッパー関数
- 静的ライブラリと共有ライブラリ
- Column 静的リンクの復権
第2章 プロセス管理(基礎編)
- プロセスの生成
- 同じプロセスを2つに分裂させるfork()関数
- 別のプログラムを起動するexecve()関数
- ASLRによるセキュリティ強化
- プロセスの親子関係
- Column fork()関数とexecve()関数以外のプロセス生成方法
- プロセスの状態
- プロセスの終了
- ゾンビプロセスと孤児プロセス
- シグナル
- Column 絶対殺すSIGKILLシグナルと絶対死なないプロセス
- シェルのジョブ管理の実現
- セッション
- プロセスグループ
- デーモン
第3章 プロセススケジューラ
- 前提知識:経過時間と使用時間
- 1つの論理CPUだけを使う場合
- 複数の論理CPUを使う場合
- realよりもuser+sysが大きくなるケース
- タイムスライス
- Column タイムスライスの仕組み
- コンテキストスイッチ
- 性能について
- プログラムの並列実行の重要性
第4章 メモリ管理システム
- メモリ関連情報の取得
- used
- buff/cache
- sarコマンドによるメモリ関連情報の取得
- メモリの回収処理
- プロセスの削除によるメモリの強制回収
- 仮想記憶
- 仮想記憶がない時の課題
- 仮想記憶の機能
- 仮想記憶による課題の解決
- プロセスへの新規メモリの割り当て
- メモリ領域の割り当て:mmap()システムコール
- Column Meltdown脆弱性の恐怖
- メモリの割り当て:デマンドページング
- Column プログラミング言語処理系のメモリ管理
- ページテーブルの階層化
- ヒュージページ
- トランスペアレントヒュージページ
第5章 プロセス管理(応用編)
- プロセス作成処理の高速化
- fork()関数の高速化:コピーオンライト
- execve()関数の高速化:デマンドページング再び
- プロセス間通信
- 共有メモリ
- シグナル
- パイプ
- ソケット
- 排他制御
- 排他制御の堂々巡り
- マルチプロセスとマルチスレッド
- Column カーネルスレッドとユーザスレッド
第6章 デバイスアクセス
- デバイスファイル
- キャラクタデバイス
- ブロックデバイス
- Column ループデバイス
- デバイスドライバ
- メモリマップトI/O(MMIO)
- ポーリング
- 割り込み
- Column あえてポーリングを使う場合
- デバイスファイル名は変わりうる
第7章 ファイルシステム
- ファイルへのアクセス方法
- メモリマップトファイル
- 一般的なファイルシステム
- 容量制限(クォータ)
- ファイルシステムの整合性保持
- ジャーナリングによる不整合の防止
- コピーオンライトによる不整合の防止
- 一にも二にもバックアップ
- Btrfsが提供するファイルシステムの高度な機能
- スナップショット
- マルチボリューム
- Column 結局どのファイルシステムを使えばいいのか
- データ破壊の検知/修復
- その他のファイルシステム
- メモリベースのファイルシステム
- ネットワークファイルシステム
- procfs
- sysfs
第8章 記憶階層
- キャッシュメモリ
- 参照の局所性
- 階層型キャッシュメモリ
- キャッシュメモリへのアクセス速度の計測
- Simultaneous Multi Threading(SMT)
- Column Translation Lookaside Buffer
- ページキャッシュ
- ページキャッシュの効果
- バッファキャッシュ
- 書き込みのタイミング
- direct I/O
- スワップ
- 統計情報
第9章 ブロック層
- HDDの特徴
- ブロック層の基本機能
- ブロックデバイスの性能指標と測定方法
- 1プロセスだけがI/O発行する場合
- 複数プロセスが並列にI/O発行する場合
- Column 推測するな、測定せよ
- 性能測定ツール:fio
- ブロック層がHDDの性能に与える影響
- パターンAの測定結果
- パターンBの測定結果
- Column 何のための性能測定
- 技術革新に伴うブロック層の変化
- ブロック層がNVMe SSDの性能に与える影響
- パターンAの測定結果
- パターンBの測定結果
- Column 現実世界の性能測定
第10章 仮想化機能
- 仮想化機能とは何か
- 仮想化ソフトウェア
- 本章で使う仮想化ソフトウェア
- Column Nested Virtualization
- 仮想化を支援するCPUの機能
- QEMU+KVMの場合
- Column CPUによる仮想化機能が存在しない場合の仮想化
- 仮想マシンは、ホストOSからどう見えているか?
- ホストOSから見たゲストOS
- 複数マシンを立ち上げた場合
- Column IaaSにおけるオートスケールの仕組み
- 仮想化環境のプロセススケジューリング
- 物理マシン上でプロセスが動いている場合
- 統計情報
- 仮想マシンとメモリ管理
- 仮想マシンが使うメモリ
- 仮想マシンとストレージデバイス
- 仮想マシンにおけるストレージI/O
- ストレージデバイスへの書き込みとページキャッシュ
- 準仮想化デバイスとvirtio-blk
- Column ホストOSとゲストOSでストレージI/O性能が逆転?
- virtio-blkの仕組み
- Column PCIパススルー
第11章 コンテナ
- 仮想マシンとの違い
- コンテナの種類
- namespace
- pid namespace
- コンテナの正体
- セキュリティリスク
第12章 cgroup
- cgroupが制御できるリソース
- 使用例:CPU使用時間の制御
- Column cgroup機能のLinuxカーネルへの取り込み経緯
- 応用例
- Column cgroup v2