目次
序章 はじめに
第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