ブートのパフォーマンス

編集ノート:これは私たち開発チームのシニアメンバーによる初めての投稿になります。マイクロソフトのディスティングイッシュト・エンジニアであり、 Core Operating Systemグループのファンダメンタル・チームを率いているMichael Fortinを紹介します。マイケルは、 Windowsプラットフォーム全般のパフォーマンスと信頼性に関する分野を担当しています。 --Steven (追伸: www.microsoft.com/ieへ行って、 Internet Explorer 8のベータ2リリースをお試しください)

Windows7では、スタートアップのパフォーマンスを専門に担当しているチームがあります。しかし実際にはこの活動はWindowsグループ全体さらにはそれ以上の広がりがあります。私たちと密接に協業をしていただいている多くのハードウェアおよびソフトウェア・パートナーの方々は、まさに私たちのチームの延長と考えられます。

スタートアップとは次の3種類のいずれかを指します。ブート、スリープからの復帰、そしてハイバネートからの復帰です。スリープからの復帰が最初の設定となっていて、一般的なハードウェアの上の標準のソフトウェアで多くのそのケースは2秒ないし5秒でロードされます。しかしこの投稿は主としてブートについて議論します。なぜならそれが頻繁にコメントされるからです。Windows 7での一番のゴールは、非常に良好なブート時間を得られるシステム(PC)の数を飛躍的に増やすことです。テストラボでは、非常によいシステムとは15秒未満でブートするシステムのことを言います。

PCが早くブートするには、以下のような多くのタスクが効率的に、かつ高度に並列化されて実行されることが必要です。

  • ファイルがメモリに読み込まれる
  • システム・サービスが初期化される
  • デバイスが特定され開始される
  • ログインに必要なユーザーの資格情報が証明される
  • デスクトップが構成され表示される
  • スタートアップ・アプリケーションが起動される

システムと構成が変わると、ブート時間は大きく変わりえます。このことは多くのラボでの検証で確認されていますが、独立した解析、たとえばEd Bottによって行われたものに見ることもできます。Edの解析したシステムのサンプル・データでは、ブートからユーザーが操作できるまでの時間が30秒以下だったのは、たった35%のシステムでした。Edのデータは比較的少ない母数からのものですが、彼の結果は私たちの解析結果とよく一致しています。Windows Vista SP1のデータ(下記)も、およそ35%のシステムが30秒以下でブートし、75%のシステムが50秒以下でブートしているのを示しています。このVista SP1のデータは、実世界での測定で得られたデータです。このデータは、Customer Experience Improvement Programを通じてユーザーがマイクロソフトに匿名で送信した、数百万という非常に多くのシステムから得られたものです。

 

私たちの見方では常に十分に早くブートするシステムが少なすぎであり、私たちはもっとよい仕事をしなければいけないと考えています。明らかなのは、60秒以上かかるシステムは、劇的に改善されなければいけないということです-それらの原因がデバイスの問題か、ネットワークの問題か、あるいはソフトウェアの問題であったとしてもです。ご覧になっておわかりの通り、非常に長いブート時間がかかるシステムもいくらかあります。PCの世界で私たちが観察していることのひとつはこの多様なパフォーマンスです。これは、選択肢の多様性や、個々のPCにおけるさまざまなコンポーネントの品質の多様性から来るものです。いくつかのシステム・メンテナンスのタスクも長いブート時間に寄与していることがあります。もしユーザーが大きなソフトウェアのアップデートをインストールすることを選択した場合、実際のシステムのアップデートは次回のブートの最中に起きるかもしれません。私たちのデータはこれらを捉えることもあり、残念ながらそれらは完了するのに数分かかることもあります。原因にかかわらず、PCエコシステムのメンバーである私たちがやるべき大きな仕事のひとつは長いブート時間の問題に対処することです。

Edのサンプルにおいても、我々の測定においてもブート時間とはマシンの準備ができてユーザーに反応が返ってくるまでの 時間を意味しています。これは、システムへのログイン、使用可能なデスクトップの獲得までの時間を含んでいます。これは完璧な指標ではないかもしれませんが、多くの主要な問題を浮き彫りにします。Windows 7とVistaシステムにおいてこの指標は自動的に取得されシステム イベントログに記録されます。Edのブログの記事はこれについて詳しくカバーしています。

その他にもユーザーがブート時間を示すと認識するものとして、例えばディスクが停止する時、アプリケーションが完全に立ち上がった時、もしくはスタートメニューやデスクトップが使用可能になった時、等があることを私たちは認識しています。加えて、「ブート後」時間(スタートアップグループにあるアプリケーションが実行され、遅延サービスが実行された時)、Windowsのブートが開始される前の時間、そしてBIOSが費やす時間などが重要になりえるでしょう。我々の活動では、ブート時間を考えるときにユーザーが何を重要と考えているのか、という視点を失わないようにしています。

Windows 7に対する私たちの活動についてディスカッションする前に、現在進行中のパートナーとの重要な協力関係のことを取り上げたいと思います。たくさんのシステムの調査をする中で、多くの改良が可能な箇所を発見し変更を加えました。具体的には実際のシステムから取られた以下のデータをみてください。このシステムが私達の所に届いたとき、この工場出荷時の構成ではブートに45秒程の時間がかかっていました。この同じシステムにVista SP1をクリーンインストールするとブートは23秒になりました。もちろん、クリーンインストールによってプロセスやサービスの数はずっと少なくなり、インストールされるドライバーが少し異なってきます(特にバージョンが異なります)。しかし、我々は工場出荷時の構成を最適化することによってブート時間を21秒にすることができました。クリーンインストール時よりも2秒短いもので、これはいくつかのドライバーやBIOSの変更により最適化された構成にすることができたためです。

特筆すべきはこの同じシステムに対し、スリープからのレジュームがほぼ瞬間に等しい2秒を達成したということです。我々はユーザーがスリープをブートの代替手段として選択することを強く奨励しています。

Windows 7に対する活動の例として、我々はシステムサービスに対して大きな労力を払っています。我々はシステムサービスの使用するCPU時間やディスク、メモリーの必要量の削減だけではなく、それらの数の劇的な削減を狙っています。これについての我々の考え方は単純です。もしサービスが絶対に必要なものでないのであれば、それは開始されるべきではないし、そのときだけサービスが動作するまれな条件を処理するためのトリガーが存在するはずだ、ということです。

もちろん、それがめったに発生しないもののためであろうとも、サービスは使い勝手をよくするために存在します。新しいキーボード、マウス、もしくはタブレットハードウェアのものが、システムがオフの間に追加されることを考えてみてください。もしこの新しいハードウェアが検出されず、スタートアップの際にこれらを動作させるためのドライバーがインストールされなければ、ユーザーは認証情報を入力しシステムにログインすることができないでしょう。ある種のユーザーにとってこれはめったにない、もしくはまったくない事象かもしれません。しかし、1億人のユーザーを考えた場合、これはサポートするに値するくらい頻繁に起きうる事象です。Windows 7において、さらに広範囲のサービストリガー機構が作成されたので、我々は少数の自動スタートサービスでこのシナリオと他の多くのシナリオをサポートします。

上でも書いたとおり、デバイスとドライバーの初期化も大きな一因になる可能性があります。Windows 7では、私たちはドライバーの初期化を可能な限り並列化するように注力しました。このように並列化することにより、いくつかの初期化に時間がかかるデバイスドライバーが全体の起動時間に対して影響を与える可能性を低減させることができます。

ディスクからファイルを読み込むことを考えた場合、Windows 7では“プリフェッチ”のロジックとメカニズムを向上させました。プリフェッチはWindows XPから実装されているのですが、その当時に比べてディスクの性能および特性が変化しているので、それらの変化に対応し効率的に実行できるようにスケジューリングのロジックに変更を加えました。例としては、私たちは最近のソリッドステートドライブに対してプリフェッチを、そもそも必要ないのではないかという観点も含めて評価しています。最終的には、個々のシステムで得られた解析結果により私たちがプリフェッチをどれだけ活用するかを判断いたします。

Windows 7では診断機能も改良しています。私たちは個々のシステムの特定の問題をすばやく発見し、その問題の解決の手助けを提供すべき努力しています。例えばスタートアップに登録されたアプリケーションが多すぎる場合や、いくつかのドメインに特有な時間がかかるログオンスクリプト等の問題についてユーザーに情報を提供するというようなことです。多くの皆様がご存じのとおり、スタートアップに登録されているアプリケーションが多いと、起動時間を長くする一因となります。しかし、あまり知られていないのは、問題のあるブートまたはログオンスクリプトに起因する問題についてです。Windows XP、Vista、そしてWindows 7のデフォルト動作はユーザーに時間のかかる可能性のあるネットワークの初期化またはスクリプトが実行されるのを待たずにユーザーをデスクトップにログオンさせることになっています。しかし、企業の環境下ではIT部門がクライアントシステムをネットワーク経由でサーバーと接続させるように、このデフォルトの動作を変更することが可能です。残念な事に、クライアントをこのような設定にするドメイン管理者は、しばし、これらを同期、排他的にスクリプトが実行されるように設定します。ネットワークでタイムアウトが発生したり、サーバーでの認証に問題がある場合には、結果的には、起動とログオンに数分かかってしまう場合があります。さらに、これらのスクリプトでは、CPU、ディスク、メモリのリソースを多く消費してしまうプログラムでさえも実行してしまいます。

Windows 7 のそれぞれの機能やサービスについて開発することに加えて、私たちはツール、テストデータなどをパートナーに提供しています。これらのツールは特に興味をお持ちのユーザーの方々にも提供されます。私たちが社内で起動時に発生する問題を分析・修正するために使っているこれらのツールは、Windows Performance Toolkitとしてこちらからダウンロードすることができます。これは一般的なユーザーが使うためのものではありませんが、一部の方々には非常に有益なものです。

これからお話したいことのトピックの一つはすでに多く書かれていますし、たくさんのコメントの主題にもなっています。それは、Windowsに追加されたソフトウェアが全体的なシステムパフォーマンスにどう影響を及ぼすか、ということです。本当に広く深い用途のWindows用ソフトウェアというものは、ある特定の人だけが満足するような品質であればよいというものではなく、圧倒的多数の人たちが非常によいと思うようなものです。マイクロソフトは高いパフォーマンスのソフトウェアを開発するためのツールや、期待通りのパフォーマンスで動いていないソフトウェアを特定するツールを、提供し続けなければなりません。Windows それ自体では、パフォーマンス低下の原因になりそうなソフトウェアを検出しユーザーに知らせたりする、という防御的手法をさらに改善していかねばなりません。

ユーザーがシステムの設定を変更することについては、今後の話題になるかもしれません。システム設定を変更するといったたぐいの情報のうち、多くはまったく役立つものではありません。たとえば、“レジストリーをちょっと変更する”ような情報の多くが偽物であることが明らかになっています。これなどは面白いのですが、Live Searchで“Enable Superfetch on XP”と検索してみてください。たくさんの検索結果が得られます。しかし、Windows XP にはSuperfetch(スーパーフェッチ)の機能はなく、これらのウェブサイトに記載されているようなレジストリーキーの設定値はないのです。同じように、CPU スケジューリング、メモリー管理、その他の設定はシステムパフォーマンスの向上にはあまり役立ちません。

スタートアップはパフォーマンスに関する多くのトピックスの一つでしかありません。前回のポストにもあったように、これについては引き続き議論していきたいと思います。その他、今後どのようなことについてお話すればよいか是非お知らせください。

Michael Fortin