分12今回は,パフォーマンスチューニングについて考えてみます。ハードウェアは進化しているのに,なぜパフォーマンスチューニングを続けるのかインフラエンジニアは10年前に比べて,格段にパフォーマンスチューニングのスキルを要求されるようになっています。CPUが高速になりストレージも高速になり,メモリの単価も安くなっているにもかかわらず,です。これはひとえに,ネットの,というかWebのサービスの傾向によるものに他なりません。いまやWebはネットのかなりの部分のトラフィックを締めており,そのWebがどんどん双方向化しています。ここでいう双方向化というのは,大多数のユーザも情報を発信するようになっている,ということとほぼ同義です。いうとそんなことはないと思います。Webはごくごく一部の企業や人が情報を発信し,それ以外の大多数が情報を受信するという特性の媒体でした。それが,2chの登場で匿名ながらも情報発信が盛んになり,blogの登場でわずかながらも自分のコンテンツを持つ人が増えてきて,SNSの登場でネットにいわゆる「自分の場所」を持つことが普通のことになってきて,ECやニュースサイトがソーシャル機能を持つようになり,TwitterやFacebookのようなソーシャルメディアが活発に使われるようになって,急速に発信される情報が増えてきました。,「⁠こまかい情報」がたくさん発信されるようになってきています。当然ながら,同じだけの量のデータの場合,細かくたくさん発信されるほうがシステムへの負荷は上がります。いったロングテールコンテンツは,WebのPVあたりの収益性を見ると相対的に低いケースが多い気がします。なると,限られたサーバリソースによっていかに負荷に耐えるか,ということが重要になってきます。いずれにしても,これからのインフラエンジニアは(特にWebの)パフォーマンスチューニングのスキルによって,その評価がかなり変わってきます。良い面としては,以前は縁の下の力持ち的な位置付けだったインフラエンジニアが一躍脚光を浴びるポジションになってきたことです。脚光を浴びるポジションであるほうが目指す人は多くなりますし,やりがいも増えるので,これは良いことだと思います。パフォーマンスチューニングの基本では筆者が思うところのパフォーマンスチューニングについて考えてみたいと思います。時代はどんどん進化しているので,古い部分もあるかもしれません。いえ時代を越えて共通な点もあると思います。パフォーマンスチューニングの最大のポイントのひとつは,関係する要素を全て把握することです。例としてCPU,ディスク,メモリ,ネットワーク,外部サービスあたりがあげられます。他にもたとえばプロセスという切り口もありますが,これは実質CPUとメモリです。Webのパフォーマンスチューニングに限らず,パフォーマンスを要求されるケースに共通することは,ボトルネックを解消することです。ボトルネックは,ある時点においてパフォーマンスの限界になっているポイントです。これは刻々と変化します。いずれにしてもある時点でどこがボトルネックになっているかを知るには,関係する要素の全てを知っている必要があります。1ヵ所でも知らないところがあってそこがボトルネックの場合,それ以外をどんなに手を入れてもあまり効果はありません(ゼロではないのですが⁠)⁠。理想をいえば,全ての要素がほぼ同じくらいボトルネックになっているのが一番性能を限界まで引き出している状態なのですが,まあそれは現実には不可能なため,だいたいはその時点での突出したボトルネックを解消して,それによって発生する別のボトルネックを解消,ということを繰返していきます。ところで,たとえば上記であげた要素は,おおむね2つのグループに大別できます。それは「演算」と「I/O」です。インフラエンジニアがチューニングの対象にするボトルネックはたいがいがI/Oです。演算というのはすなわちCPUで,それはプログラムによるものです(⁠「⁠プログラムはCPU」ではないので注意が必要です⁠)⁠。無駄にループが深いといった,いわゆるホットスポットといわれる部分に手を入れることで,パフォーマンスが格段に向上することも良くあることですが,ここでは「プログラムの修正は除いた」パフォーマンスチューニングについて考えてみます。,「⁠いまのボトルネックはCPUのようだからこれはプログラムの修正を検討したほうが良いかもしれない」と思うことは立派なインフラエンジニアの仕事ですし,プログラムが読み書きできて実際の原因まで突きとめられればそれは最高です。最近のプログラムは加速度的に複雑になってきていて,プログラム的には手を入れきってあってもCPUが足りないことも多々あります。CPUに関していえばインフラエンジニアができることはあまりありません。できることは,CPU自体を増やす,CPUを速いものに交換する,1台あたりのCPUの数をバランスさせる,といったところです。UNIXもしくはLinuxでの話になりますが(WindowsやMacOSもそうですが⁠)⁠,プログラムというのはユーザランド部分とシステムコール部分に分かれます。システムコールというのはプログラムだけでどうにもできないので処理をカーネルに委託する部分で,これはその大部分がI/Oの操作になります。上記の「演算(CPU⁠)⁠」と「I/O」という大別は,言い換えれば「ユーザランド」と「システムコール」という大別に置き換えることができます。システム負荷を知る方法としてuptimeというコマンドがあります。「プログラム的には実行できる状態になっているのに待機している」プロセスの数です。ユーザランドプログラムすなわち演算能力待ちで待機しているプロセスもありますが,多くのケースではこれはI/Oによって引き起こされています。I/Oにはディスクやネットワーク,メモリなどがありますが,メモリがボトルネックになることはまずありません(メモリが小さくてスラッシングが,というのはメモリI/O自体に話ではないですね⁠)⁠。インフラエンジニアが取り組むパフォーマンスチューニングはディスクとネットワークが対象のことが多い,ということになります。いえば,ネットワークよりはディスクのほうがネックになるケースのほうが格段に多いです。ここにCPUも入れて考えてみると,ディスク,CPU,ネットワーク,メモリという順にボトルネックになりやすい気がします(もちろんケースバイケースです⁠)⁠。最初に習得するべきはディスクI/Oについてです。アスキー,So-netなどでネットワーク,サーバエンジニアを経験。オン・ザ・エッヂ(現ライブドア)のデータセンターである「データホテル」を構築,運営。ZETA株式会社)を設立,代表取締役就任(現任)。CX」シリーズとして検索エンジンやレコメンドエンジンを開発,販売している。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。