Twitter で「読みたい」と呟いたら著者の武内覚さんから献本しましょうかとお声を掛けて頂いたので即答でお願いしました。
僕はいつも Linux でしか動作しないソフトウェアを Windows に対応させるパッチを書いたりしているので、普段 Windows しか触っていないと思われがちですが、実は僕が Linux を触り始めたのは 1996 年にトッパンから出版された「Linux 入門」くらい昔だったりします。ちょうど Linux 2.0 が出た頃だったと思います。その頃の Linux はようやく SMB カーネルが出た頃で、まだまだお遊び感のある OS で不安定でもありました。ディストリビューションもほぼ Slackware くらいしか無かったかもしれません。
あの頃の Linux はインターネットを検索しても殆ど情報が出て来ず、本気で調べるにはソースコードを読むしかありませんでした。当時、父親から譲り受けたノート PC に躊躇いもなく Linux を入れたはいいが、SiS チップセット用ディスプレイドライバが OpenGL を実行すると重たくなるという現象に出くわし、なんとか問題を解消したくて何日も何日もソースを読んでハックしていました。あれから比べれば Linux は巨大になりました。ユーザ数も信じられないくらい増えました。今やサーバといえば Linux が一般的ですし、こんなに手軽に Linux が起動出来る世の中になるとは思っていませんでした。そして何よりもインターネットには様々な Linux の情報が溢れる様になりました。
ただしブログ等で情報が溢れた事で、適当な情報を鵜呑みにしてしまいやすいという悪い側面も出て来てしまいました。正しい情報とは実際に手を動かした人から得たい物です。また、知らない事を解決するのにインターネット検索を使ってしまうと、その知りたかった情報だけを得てしまうので、知りたくなかった情報には行き届かない事もあります。
例えば UNIX の time コマンドは引数のコマンドを実行した後 real、user、system の数値を表示しますが、個々の意味をちゃんと理解していないプログラマも少なからずいるのではないでしょうか。free コマンドの出力を見て、今 OS がどういう状態なのか理解していない人もいるのではないでしょうか。理解したつもりになっているだけだったりしないでしょうか。
最近の OS は色々な最適化が施されておりそれ故に複雑になってきています。プログラムが遅いという事象だけから原因を突き止めるのは本当に難しいです。だからこそボトルネックを疑う為の材料が多く必要なのです。知識がないと高価な CPU やメモリを買い足すことしか出来なくなります。
本書はこういった基本的な知識を埋める所から章が始まります。今までなんとなくしか理解していなかった Linux の内部を、図解で細かく説明してくれています。OS 上でメモリがどの様に管理されているのか、OS はファイルシステムをどの様に扱っているのか等を、誰でも分かる(であろう)レベルで書いてあります。
こういった書籍の多くは、難しい用語を並べて読者を振り切ってしまう事が多いのですが、本書では始めの数章を使って知識を固め、徐々に知識レベルを上げていってくれているお陰で挫折する方も少ないのでと思います。
ちなみに僕が特にワクワクしたのは第8章の「ストレージデバイス」について書かれている章でした。検証コードを使ってシーケンシャル/ランダムアクセスを HDD と SDD の両方で試し、read/write がサイズの変化によってどのくらい性能に影響が出るかを実験しています。まだ読んだだけで試していないので、後で実際に試してみようと思っています。
この他にも本書では検証コードを使った実験が沢山あります。「これこんな事やったらどうなるんだろ」と思っていた実験も自分でソースをコンパイルして試せる様になっています。おそらく読者が実行する環境で結果も異なってくるでしょう。だからこそ実際に手を動かして得られた情報は貴重なのです。本書はこの様な知見の詰まったとても良い本だと思いました。