Vistaの地平 1.カーネルの改良による性能とスケーラビリティの向上デジタルアドバンテージ 小川 誉久2006/12/08 |
|
|
Vistaでは、実行性能とスケーラビリティの向上を目的として、OSカーネルが積極的に改修されている。ハードディスク、CPU、メモリといったOSのリソースを、より効果的、効率的に活用するための各種新機能が追加された。
スワップ・ファイルアクセスの改善
Windowsは、ハードディスク上のスワップ・ファイルを仮想的なメモリとして使用し、物理メモリより大きな仮想メモリ空間をアプリケーションが使えるようにしている。物理メモリが不足したら、使用頻度の少ないアプリケーションやデータ領域をスワップ・ファイルに書き出して(スワップ・アウトして)、空き物理領域を確保する。スワップ・アウトしたアプリケーションやデータが再度必要になったら、スワップ・ファイルからメモリに再ロード(スワップ・イン)する。アプリケーションによるメモリ参照には局所性があることから、このような処理が可能となる。
従来のWindows XP(以下XP)では、このスワップ・アウト/インの際のブロック・サイズが64Kbytesに制限されており、64Kbytes以上のブロックを移動するときには、ディスクI/Oを複数回実行する必要があった。これに対しVistaでは、より大きなクラスタ・サイズでのスワップ・ファイルの読み書きが可能になった。より少ないディスク操作回数で、スワップ処理を実行可能にし、性能向上を図っている。
アプリケーション起動を高速化するSuperFetch
メモリの使用パターンを分析し、よく使うアプリケーションのメモリ・イメージをあらかじめロードしておいて、メモリへのロード時間を短縮し、コンピュータの応答時間を改善する機能がこのSuperFetch(スーパーフェッチ)である。“fetch”には「取ってくる」というような意味がある。
SuperFetchには、大きく次の3つの効果がある。
SuperFetchは、頻繁に使用するアプリケーションのメモリ・イメージをキャッシュし、これを実際の実行開始以前にメモリにプリロードしておくことにより、アプリケーションの起動速度を高速化する。
またSuperFetchは、コンピュータのアイドル時(コンピュータを使用していないとき)にバックグラウンドで実行されるアプリケーションによるメモリ・スワップの影響を低減する。最近では、ウイルス検査やデスクトップ検索のためのインデックス生成など、コンピュータのアイドル時を見計らって自動実行されるバックグラウンド・アプリケーションが少なくない。昼食時など、ユーザーが不在でコンピュータが使われていないときに、これらのアプリケーションは自動実行される。この実行時、物理メモリが不足すれば、現在のメモリ内容(ユーザーがそれまで使っていたアプリケーション用のメモリ)がスワップ・アウトされる。
昼食時間中にこれらのアプリケーションの実行が終了したとしても、通常はスワップ・アウトされたメモリ・イメージは自動的には復帰されない。ユーザーが昼食から帰ってきて、再度以前のアプリケーションを使い始めたときに、大量のスワップ・インが発生することになる。これに対しVistaのSuperFetchは、バックグラウンド・アプリケーションの実行完了を検出すると、それ以前の状態にメモリを自動的に復帰する。ユーザーは、バックグランド・アプリケーションの影響を受けることなく、昼食後に気持ちよく作業を再開できる。
バックグラウンド・アプリケーションの自動実行後のメモリの状態 |
コンピュータのアイドル時にバックグランド・アプリケーションが実行されると、処理終了後も、いままで使っていたアプリケーションのメモリがスワップ・アウトされたままになっている。その後、スワップ・アウトされたアプリケーションを再度使い始めたときに、大量のスワップ・インが発生することになる。 |
メモリのプリフェッチ機能自体は、XPでも搭載されていた(詳細は関連記事を参照)。しかしXPのプリフェッチ機能では、単一プロセスの起動時にのみプリフェッチを実行していた。
|
これに対しVistaのSuperFetchでは、複数のアプリケーション・セットをまたいで、よりインテリジェントにプリフェッチを実行するように改良されている。具体的には、ページ使用の頻度や、メモリ中のほかのページの使用状況をも併せて分析する。また、「昼食時間後」「平日」「週末」など、利用時間帯も加味した利用パターンも分析可能になっている。もちろん、分析はユーザー単位に実施される。ページ使用情報は、カーネル・モードで収集される(プリフェッチされたシナリオは、%SystemRoot%\Prefetch\AG*.dbファイルに保存される)。なお、プリフェッチやプリロードでは、後述する低プライオリティI/Oを使用し、フォアグラウンド・アプリケーションの実行性能に悪影響を及ぼさないように配慮されている。
不揮発性外部メモリを利用した性能向上を可能にするReadyBoost
メモリと比較すると、ハードディスクはデータ転送速度が圧倒的に遅いデバイスである。コンピュータの性能を向上する早道の1つは、メモリをたくさん搭載して、できるだけハードディスクへのスワップ・アウトを抑止することだ。しかし例えばノート型PCなど、搭載可能な物理メモリの制限が強いコンピュータがある。このようにメモリ増設が容易でないコンピュータに対し、USBメモリなど外部の不揮発性メモリにリード・オンリー・ページを保存してスワップを低減し、性能を向上させるのがReadyBoost機能である。
ReadyBoost用として使用できる外部メモリとしては、USBメモリやSDカード、コンパクト・フラッシュ・メモリなどがある。ただし最低性能水準が決まっており、アクセス・スピードが遅いメモリではReadyBoostは有効にならない。外部メモリを装着すると、性能(転送速度)が自動的に検査され、パスした場合にはそれをReadyBoostデバイスとして使うかどうかがユーザーに問い合わせられる(次の画面)。外部メモリ全体ではなく、一部をReadyBoost用として使うことも可能だ。具体的な性能要件は以下のとおりである。
- 4Kbytesブロックのランダム転送で2.5Mbytes/sec以上
- 512Kbytesブロックのランダム転送で1.75Mbytes/sec以上
ReadyBoost使用の確認 | |||
外部メモリを接続したとき、ReadyBoostの要件を満たすメモリである場合には、このようにReadyBoostとして使用するかどうかが問い合わせられる。 | |||
|
FAT32の制限から、ReadyBoost用として使用できるメモリサイズは256Mbytes〜4Gbytesに制限される。またコンピュータに複数のインターフェイスがある場合でも(USBとコンパクト・フラッシュなど)、ReadyBoostとして利用できるデバイスはシステムで1つだけに制限される。
ReadyBoostは、内部的には、前述したSuperFetchの追加キャッシュとして機能する。ユーザーの挙動に応じてリード・オンリー・ページのデータをキャシュし、ページ・フォールトが発生したとき(スワップ・アウトされているページをスワップ・インする必要が生じたとき)に、遅いハードディスク上のスワップ・ファイルからではなく、可能であればReadyBoostデバイス上のキャッシュからページ・インを実行する。環境にもよるが、ディスクからのページ・インに比較すると、最大で10倍程度の高速化が可能だとされている。
なお、ReadyBoostデバイスに保存されているのは、リード・オンリー・ページのSuperFetchキャッシュなので、ReadyBoostデバイスはいつ取り外されてもOSの実行には影響しない。またキャッシュは暗号化されて保存されるので(暗号化にはAES-128を使用)、情報漏えいの危険も小さい。
ハイブリッド型ハードディスクで性能向上を図るReadyDrive
ReadyDriveは、ハードディスク内に実装した不揮発性メモリをキャッシュとして使用し、ディスク・アクセスの高速化、ノートPCのバッテリ寿命の延命、信頼性向上、静音化などを実現する技術である。ReadyDriveは、Microsoftとデバイス・ベンダのSamsungによって開発された。ただしReadyDriveの恩恵に浴するには、ReadyDrive対応のハードディスクが必要である。
ReadyDrive対応のハードディスクは、ディスク内部に不揮発性メモリを搭載しており、ディスクのスピンドル(回転)が停止しているときや、ディスクが電源オフの状態でも、メモリ・キャッシュによる高速な読み書きを可能にする。搭載可能な不揮発性メモリサイズは50Mbytesから2Tbytesとされる(一般的には256Mbytes程度)。このキャッシュの内部には、前述したSuperFetchのキャッシュ・データ、起動時データ、ハイバネーション・ファイル(一部)などが格納される。
このReadyDriveにより、次の性能向上が可能になるとされる。
- コンピュータの起動時間の短縮
- ハイバネーションでの電源オフ/ハイバネーションからの復帰
- ディスク・シークの低減によるディスク・アクセスの高速化
- ディスクの回転停止/電源オフの時間を増やすことによるバッテリ駆動時間の増加
- 衝撃の影響がない不揮発性メモリへのアクセスを増やすことによる信頼性の向上
- ディスクノイズの低減
マイクロソフトの説明によれば、ReadyDriveにより、2.5インチ・ハードディスクの駆動に必要な電力を70%〜90%程度削減できるとしている。
I/O処理の優先度設定、I/O帯域幅の予約
現在のWindowsはマルチタスクOSであり、同時に複数のプログラムを実行可能である(初期のWindowsには、OSレベルでのマルチタスク・サポートはなく、同時実行されるアプリケーション同士が、自主的に制御を譲り合う方式で擬似的なマルチタスクが実現されていた)。このため、バックグラウンドでインターネットからファイルをダウンロードしながら、フォアグラウンドでワープロを操作するなどができる。もちろんこれは便利な機能なのだが、バックグラウンドの処理が重くて、フォアグランド・アプリケーションが非常に使いにくくなる場面がある。特に最近では、ウイルス対策ソフトの検査やディスクのデフラグメント(断片化の解消)、デスクトップ・サーチのインデックス作成、メールの送受信など、バックグラウンドで実行されるタスクも増加傾向にある。
従来のWindows OSにおいても、スレッド単位にCPU実行の優先度(プライオリティ)を付けて、優先的に実行するアプリケーションと、優先度を下げて実行するアプリケーションとを区別することができた(スレッドのプライオリティは、タスク・マネージャの[プロセス]タブで確認したり、変更したりできる)。しかし逆にいえば、これがアプリケーションの実行優先度を制御する唯一の方法であった。
フォアグラウンド・タスクへの影響をできるだけ小さくしながら、バックグラウンド・タスクを実行できるようにするために、VistaではカーネルのI/O処理に大きく2つの改良が施された。1つはI/O処理の優先度制御と、もう1つはI/O帯域幅の予約機能である。
I/O処理の優先度制御とは、従来のスレッド単位のCPU優先度に加え、ハードディスクなどに対するI/O処理についても優先度を設定できるようにするものだ。具体的には、Critical、High、Normal、Low、Very Lowの5段階を設定可能で、これらの情報はI/O要求時のパケット(IRP:I/O Request Packet)にフラグとして格納される(ただし、HighとLowの2つについては未実装とのことだ。またCriticalを使えるのはメモリ・マネージャのみ)。ただしI/Oの優先度設定は、ATAPIおよびUSBストレージ・ドライバにのみ実装されている。つまり、ハードディスクI/Oを対象としている。
Vistaのプロセスやスレッドは、API(SetPriorityClassとSetThreadPriority)を使って自身が実行するI/O処理の優先度を指定できる。つまり、バックグランドでの実行を前提とするアプリケーションは、あらかじめI/O処理の優先度を下げて「バックグラウンド・モード」で動くことを指定しておき、フォアグラウンド・タスクのI/O処理に迷惑をかけないようにできるのだ。具体的にVistaでは、デスクトップ検索用のインデックス作成、Windows Defenderのスキャン処理がこれに対応している。マイクロソフトのドキュメントには、Vistaの新機能として「低優先度I/O(low-priority I/O)」という説明があるが、それが指しているのはこの機能のことである。
もう1つのI/Oの帯域幅予約は、Windows Media Playerなど、リアルタイムのI/O処理が必要なストリーミング・アプリケーションをスムースに使えるようにするための機能だ。Vistaでは、例えば「50msecごとに3回」などのように、アプリケーションがI/O処理をあらかじめ予約することが可能になっている。
I/Oの帯域幅予約 |
ストリーミング・アプリケーションなど、一定時間内に一定量のデータを送受信する必要があるアプリケーションが、I/Oの帯域幅を予約することが可能になった。 |
INDEX | ||
Vistaの地平 | ||
第3回 カーネルの改良とフォント、セキュリティ機能の強化 | ||
1.カーネルの改良による性能とスケーラビリティの向上 | ||
2.新フォント「メイリオ」と新JIS標準対応 | ||
3.Vistaのセキュリティ機能 | ||
「 Vistaの地平 」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|