🔥

性能と性能測定の基礎

2020/09/25に公開

はじめに

コンピュータの世界では「性能」および「性能測定」という言葉があります。これらの言葉にはたくさんの意味があるのですが、業務システムの構築、運用にかかわったような人でなければ、「PCの新しいパーツに対して様々なベンチマークソフトウェアを走らせること」が性能測定であり、その結果得られるものが「性能」といったところでしょう。本記事ではそれ以外の、業務システムにおける性能や性能測定について述べます。

性能

ひとくちに性能といっても、さまざまな指標があります。代表的なものは「スループット」、「IOPS」、そして「レイテンシ」です。これらについてストレージデバイスを例に説明します。

スループットは単位時間あたりにどれだけのデータを送受信できるかであり、XX MB/sYY GB/sのようにあらわします。性能といって一番イメージしやすいのはこれでしょう。スループットが重要な意味をもつのは大きなデータをコピーするようなときです。たとえば1GBのファイルをコピーする場合は、一秒間にどれだけのデータが転送できるかが大事です。

IOPSはI/O per secondの略であり、一秒間にどれだけI/O(読み出しないし書き込み)処理をできるかという数を示します。IOPSが重要な意味を持つのは細かいデータに大量にアクセスするような場合です。たとえばストレージデバイス上のリレーショナルデータベースに対してたくさんのアクセスをする場合、および、このようなアクセスが並列に発生するような場合は、スループットよりもIOPSが重要になってきます(ネットワークの場合は一秒間に処理できるパケット数、packet per second(pps)という値を使います)。

レイテンシは処理を依頼してから完了までにかかる時間です。一般的に「レイテンシはXXミリ秒」といった使い方をします。これは人間が直接コンピュータを操作する際の快適具合に大きな影響を及ぼします。たとえばユーザがボタンをクリックするたびにストレージデバイスから所定のデータを読み込むとして、それが1ミリ秒かかる場合と1秒かかる場合、どちらが快適に使えるかを考えてみてください。もちろんこれは前者のほうが快適といえるでしょう。

スループットやIOPS、レイテンシはそれぞれ独立したものではなく互いに複雑に絡み合う値なのですが、簡単にいうと以上のようになります。

ここまではストレージデバイスを例に説明しましたが、ネットワークなどの他のものについても同様の考え方が適用できます。状況に応じて、どのような性能が重要になるかを考える癖をつけましょう。

性能測定

これまでに述べたような性能を実際になんらかの方法で求めることを性能測定と呼びます。まずは個人レベル、とくにプログラマではなく一般的なPCユーザによくある性能測定について考えます。そのあとに業務システムにおける性能測定について述べます。

一般的なPCユーザが考える性能測定

新しいストレージデバイスを買ったときには以下のような目的で性能測定をしてみたくなることでしょう。

  • 自分が以前持っていたデバイスと比較して、どれだけ性能向上したかを見てうれしくなる
  • 同世代のほかのデバイスと比較して、自分のものが一番早いのを確認してうれしくなる

ここでいう性能は前節において述べたスループット、IOPS、レイテンシ、および、なんらかのベンチマークテストがはじき出すスコアなど、さまざまです。

おそらくほとんどの人にとっての性能測定とは、この節に書いてあることだけでしょう。では次節において、それとは異なる世界に触れてみましょう。

業務における性能測定

業務においては基本的にすべての性能測定には明確な目的を決めておく必要があります。目的を定めないと、出てきた数値は無意味なものとなります。性能測定に慣れていない人は、自分が何をやっているかわからないままに既存のベンチマークソフトを長時間かけて一通り流して値を眺めて終わり、となりがちです。このようなことにならないようにしっかりと目的を定める必要があります。

業務システムにおける性能測定の目的は、一言で言ってしまえば構築するシステムの性能要件を満たすことです。たとえばネット通販システムにおいては次のようなものが考えられます。

  • 一秒間に一万件の取引をさばく(一般にTransation Per Second(TPS)という用語を使います)
  • 個々の取引において、業者のサーバ内の処理のうち90%を1秒以内におさめる

見ての通り、個々のデバイスの簡単な性能データだけでわかるものではなく、次のような多くの要素が絡んだ複雑なものになります((これでもかなり単純化しています))。

  • データセンターの入り口から業務システムが動くサーバとの間の通信
  • 業務システムのソフトウェア処理
  • 業務システムからアクセスするストレージデバイスの読み書き処理

業務システムにおいては性能要件を満たすためには、まずは上記の個々の要素についての基礎データを一通り持っておく必要があります。このデータの採取には、スループットやレイテンシ、IOPS/ppsなどの単純なデータをとるための、一般的にマイクロベンチマークツールと呼ばれるものを使います。

基礎データを手元に揃えた上で、システムの運用中には次の性能を測定し続けます((システムを構築する段階においては、さらに多くの測定が必要です))。

  • 実運用前に、実運用を模した負荷をかけたときの性能。運用開始前、およびシステムの更新版の投入前に、システムが実運用に耐えるものかどうかを確認するために使う。
  • 実運用しているときの性能。これはシステムの稼働中は常に採取して、かつ、要件を満たしているかを常に監視しておく必要がある。

これらの性能測定において問題が出た場合は、基礎データをもとに何がおかしいかの仮説を立てて、ハードウェア増強やパラメタチューニングなどの手を打ちます。

上記のようなことをするのには莫大なコストがかかりますので、「よくわからないけどとりあえずあれもこれも測ってみよう」といったことをする余地はないことがわかります。

おわりに

本記事では性能とは何か、性能測定は何かについて、おもに業務システムの場合について述べてきました。本記事を読んだだけで現実世界の性能測定がすべてうまくいくわけではありませんが、基本的な考え方は活かせるはずです。みなさまの性能測定ライフが楽しいものになることを願います。

参考

筆者がかつて業務の一環で取り組んだ性能測定についての記事を一つ紹介しておきます。目的や目標の設定から実測、結果の分析まですべてを短くまとめていますので、ぜひごらんください。

[https://blog.cybozu.io/entry/2019/03/08/170000:embed:cite]

Discussion