COMWARE PLUS プラス・サムシングを大切なお客さまへ

メールマガジンのご登録
ITジャーナリストや現役書店員、編集者が選ぶ デジタル人材のためのブックレビュー 
ITジャーナリストや現役書店員、編集者が選ぶ デジタル人材のためのブックレビュー 
ポスト
        
        

今月の書籍

レビュワー:高橋 征義

  • 『詳解 システム・パフォーマンス 第2版』
  • 『計算機プログラムの構造と解釈 第2版』

パフォーマンスを通してみる計算機システムの世界

本書は主にLinux上で動作するソフトウェアシステムのパフォーマンスの調査方法改善方法を学べる、貴重な書籍である。

著者のBrendan GreggOSやパフォーマンスの専門家で、本書の中でもこのツールは私が作った、この手法は私が持ち込んだ的な記述があって頼もしい。余談だがデータセンターのサーバの前で叫ぶとディスクのレイテンシが悪化することを実演した面白動画、[Shouting in the Datacenter]でもよく知られている。

システムパフォーマンスは健全なシステムを運用する上で無視できない分野である。パフォーマンスが劣化するとアプリケーションの使い勝手に影響が出たり、システムの運用コストが増大したりしかねない。とはいえ、いざパフォーマンスを改善したい、そのための技術を身に着けたいと思っても、一朝一夕にはいかない。場当たり的な方法(本書「2.5 メソドロジ」では「街灯のアンチメソッド」や「ランダム変更アンチメソッド」として否定的に紹介されている)や、適当にツールを導入してお茶を濁す方法(同じく「ツールメソッド」として否定的に紹介されている)では、バグを直そうとして、やみくもにコードをいじるのにも似た筋の悪さを感じる

本書はその困難に真正面から切り込む。前述のようなアンチメソッドではなく、著者の提唱するUSEメソッドやその他のメソドロジーを紹介し、基礎的なパフォーマンス分析について紹介した後、OS、CPU、メモリ、ファイルシステム、ディスク、ネットワークといった、計算機システムを構成する各要素について順に解説していく。目次を見る限りではLinuxの教科書のような章立てになっているのだが、本書はあくまでパフォーマンスの観点からそれぞれのコンポーネントを理解する、という点がユニークである。さらに後半では、コンテナや軽量VMについて触れたり、perfや、Ftrace、BPF(BCCとbpftrace)といったツールについてそれぞれ使い方を解説したり、ベンチマークのとり方や実際のケーススタディが紹介されている。必要なことは漏らさず全部書く、という意気込みを感じさせる。

索引を含めて900ページを超える、見るからに分厚い本である。しかしながら実際に読むと、むしろさまざまなシステムの諸要素をコンパクトに凝縮 してまとめた本という印象を持つ。つまり本書でもまだまだ薄すぎる(!)のである。本書の中でも多数の書籍が参考文献として紹介されているが、そもそもLinuxなどのOSについての知識が覚束ないのであれば、『Linuxのしくみー実験と図解で学ぶOS、仮想マシン、コンテナの基礎知識【増補改訂版】』など、もう少しとっつきやすく新しめの書籍も参考にするとより理解しやすいだろう。また、例えばウェブシステムのパフォーマンス改善の具体例を知りたい場合には、より実践編的な位置づけの『達人が教えるWebパフォーマンスチューニング〜ISUCONから学ぶ高速化の実践』などを読むと理解が深まりそうだ。その他いろいろな書籍も合わせて読むことをおすすめしたい。

『詳解 システム・パフォーマンス 第2版』

著者: Brendan Gregg

訳者: 長尾高弘

監訳者: 西脇靖紘

出版社: オライリー・ジャパン

https://www.oreilly.co.jp/books/9784814400072/

「作って理解する」系書籍のレジェンドが導く、「言語設計者としてのプログラマ」を目指す旅

本書の原題は「Structure and Interpretation of Computer Programs」 。略して「SICP」という名前でも親しまれている。MIT(アメリカ・マサチューセッツ工科大学)の計算機科学の教科書として長年使われていた本だが、コンピュータサイエンスの本としてはちょっと突飛というか、風変わりな本である。

本書の特徴として二つの点に注目したい。
一つ目として、本書は「作って理解する」タイプの書籍であり、特にプログラミング言語処理系を多く実装する。本書で実装するめぼしいプログラムをリストアップしてみる。

  • デジタル回路シミュレータ
  • 多項式計算システム
  • 制約システム
  • 並行処理システム
  • 無限ストリームと信号処理システム
  • 普通のscheme
  • 遅延評価つきScheme
  • 論理プログラミング言語
  • レジスタマシン
  • ガベージコレクタ
  • アセンブラ
  • コンパイラ

念のため書いておくと、本書はプログラミング未経験者向けの本として、プログラミングの予備知識を必要としないという体裁で書かれている。それなのにこれだけいろいろ実装するのは、まさしく「作って理解する」方式の面目躍如といえる。なお432ページとそれほど厚くない書籍であれもこれも実装できるのは、言語としてSchemeを採用していることが大きく貢献している。SchemeはS式を使うことで構文解析があってないような容易なものになるため、言語処理系を実装するのには非常に好都合だからだ。

それにしてもなぜ本書では言語処理系をいろいろ実装しているのか。それは本書独特の世界観に拠るところが大きい。すなわち「ソフトウェア開発とは新たな〈言語〉を設計・実装すること」であり、言い換えると「プログラマとは言語設計者である」という世界観である。これが本書の二つ目の特徴である。

一般的にプログラムは何かしらの入力が与えられ、それを元に何かの動作を行う。これは見方を変えると、入力というのはある種の言語であり、プログラムはその言語を解釈し実行する言語処理系ということになる。であれば、あらゆるプログラムの基礎として、言語処理系があると言えるのだ。

本書では数学や数式処理などを扱う節もあるが、数学が苦手であればななめ読みしてもよいだろう。そして主に第4章以降で垣間見える〈言語〉とプログラムの世界に触れてみて欲しい。

なお、本書は紙の書籍として普通に販売されているが、HTML版はウェブで読むこともできる。また、原著もクリエイティブ・コモンズ・ライセンスで公開されており、それに基づき真鍋氏が翻訳した版もPDFで読める。とりわけ本書の前書きの翻訳は真鍋氏の版が読みやすいので、合わせて読むとよいだろう。

『計算機プログラムの構造と解釈 第2版』

著者: Gerald Jay Sussman、Harold Abelson、Julie Sussman

訳者: 和田英一

出版社: 翔泳社

https://www.shoeisha.co.jp/book/detail/9784798135984

今月のレビュワー

308_img03.jpg

高橋 征義(たかはし・まさよし)

札幌出身。Web制作会社にてプログラマとして勤務する傍ら、2004年にRubyの開発者と利用者を支援する団体、日本Rubyの会を設立、現在まで代表を務める。2010年にITエンジニア向けの技術系電子書籍の制作と販売を行う株式会社達人出版会を設立、現在まで代表取締役。著書に『たのしいRuby』(共著)など。好きな作家は新井素子。

2023/03/28

この記事のPDFをダウンロードする

ポスト

事例紹介

スマートフォン用リンク

エバンジェリストが語るICTの未来

スマートフォン用リンク

ページトップへ

トップへ