lasciva blog

開発して得た知見やwebビジネスのストック

「[試して理解]Linuxのしくみ」を読んだ

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

目的、モチベーション

バックエンドのパフォーマンス改善において、指標となるCPUやメモリ等の基礎の復習をしたかった。

全体の感想

サブタイトルにある通り、実験と図解を重視されており、理解しやすかった。
OS周りはとっつきにくく、今まで教科書的な本を読んだことがあったが、頭には入りにくかったりイメージしにくかったが、こちらの本は図がとにかく多いのが良かった。
あやふやだった点を整理することもでき、理解しやすく良書だったが、今回求めてたレベル感ではなかった。1,2年目のときに読みたかった。
OS周りの1冊目の入門書としてや、理解を整理したいときにオススメです。

気になったところ

第2章 ユーザモードで実現する機能

コマンド

コマンド 説明
strace システムコールの呼び出しの詳細が見れる
sar CPU時間の割合の詳細が見れる

第5章 メモリ管理

メモリに関する統計情報

統計情報の取得には、freeコマンドを用いる。

フェールド名 説明
total 全メモリの量
free 見かけ上の空きメモリ(詳しくはavailable)
buff/cache バッファキャッシュ、及びページキャッシュが利用するメモリ。システムの空きメモリが減少してきたら、カーネルによって解放される。
available 実質的な空きメモリ。freeフィールドの値に、空きメモリがたりなくなってきたら、解放できるカーネル内メモリ領域のサイズを足したもの。

仮想記憶
プロセスが物理アドレスを直接扱うと、プロセス間で干渉したり、連続したアドレスが取得できない場合に処理が煩雑になってしまう。
この問題に解決するために、仮想記憶を介して、仮想アドレスを扱う。仮想記憶はページテーブルと呼ばれる、仮想アドレスと物理アドレスのマップングした対応情報をカーネルが使うメモリ内保存される。

デマンドページング
メモリはプロセスが生成された際に割り当てられる。これだとメモリが無駄に割り当てられる可能性がある。
デマンドページングを用いれば、仮想アドレスは最初に割り当てて、物理メモリは実際に使用される際に割り当てることで、改善できる。

第7章 ファイルシステム

ファイルシステムの不整合
システムの電源が処理途中に落ちてしまったりして、ファイルシステムのデータに不整合が生じる可能性がある。
不整合を防ぐ代表的なものは、「ジャーナリング」と「コピーオンライト」の2つの方式がある。

ジャーナリング
この手法では、下記のように処理内容を別のメタデータで保存することで防ぐ。

  1. 処理に必要なアトミック処理の一覧を、いったんジャーナル領域に書き出す(この一覧をジャーナルログと呼ぶ)。
  2. ジャーナル領域の内容に基づいて、実際にファイルシステムの内容を更新する。

1つ目の処理の途中で終わった場合はメタデータを破棄し、2つ目の処理の途中で終わった場合は再実行することで、不整合を解消できる。

コピーオンライト
この手法では、更新されるデータを別の場所にすべて書き込んでからリンクを張り替えることで防ぐ。
処理の途中で終わった場合は、再起動時にデータを削除することで、不整合を解消できる。

第8章 ストレージデバイス

HDDの性質上、ハードウェアがレイテンシーボトルネックになる。
そのため、シーケンシャルにデータを配置し、できるだけ多くのデータを一度に取得することで、パフォーマンスの向上が期待できる。

I/Oスケジューラ

ブロックデバイスへのアクセス要求を一定期間溜めて、下記のような加工を行ってから、デバイスドライバにI/O要求をすることで、I/O性能の向上を目指す。

  • マージ: 複数の連続するセクタへのI/O要求を1つにまとめる。
  • ソート: 複数の不連続なセクタへのI/O要求をセクタ番号順に並び替える。

次のアクション

低レイヤーの理解が欠かせないなと思ったので、そちらの本とかを調査しつつ、もう1冊入門レベルの本(絵で見てわかるシステムパフォーマンスの仕組み)を買ったので読む。 あとは、積読中の詳解 システム・パフォーマンスを読む。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識