(57)【特許請求の範囲】
【請求項１】
省電力のための動作を行わないアクティブ・モード及び省電力のための動作を行うモードであって、省電力のレベルが異なる複数のパワーセーブ・モードからなる複数のモード間をレベル順に移行可能なハード・ディスク・ドライブにおける消費電力を低減させる方法であって、
前記ドライブがホスト・コンピュータから受けるコマンドの時期を、過去のコマンド間隔の分布に基づいて予測するステップと、
前記予測されたコマンドの時期を基準にした、省電力のレベルが低いモードから高いモードへの移行開始から高いモードから低いモードへ復帰終了までに節約できる消費電力量、及び、過去のコマンドに対する処理に時間がかかった場合の前記コマンドに対する応答の遅延時間と、前記移行開始の時期との関係を解析するステップと、
前記解析された関係に基づき、前記節約できる消費電力量が最大となり、前記遅延時間が十分小さくなるように、前記移行開始の時期を決定するステップと、
前記決定された移行開始の時期に、省電力のレベルが低いモードから高いモードへ移行開始するステップと、
を含むハード・ディスク・ドライブにおける消費電力を低減させる方法。
【請求項２】
前記節約できる消費電力量は、省電力のレベルが低いモードから高いモードへの移行開始から高いモードから低いモードへ復帰終了までの間における、省電力のレベルが高いモードにある間の節約される消費電力量から、前記移行及び復帰に伴って消費される消費電力量を減算した量であることを特徴とする請求項１に記載のハード・ディスク・ドライブにおける消費電力を低減させる方法。
【請求項３】
前記過去のコマンド間隔の分布は、一定時間毎に更新されることを特徴とする請求項１に記載のハード・ディスク・ドライブにおける消費電力を低減させる方法。
【請求項４】
前のコマンドを完了してから次のコマンドを受けるまでの時間をコマンド間隔とする請求項１に記載のハード・ディスク・ドライブにおける消費電力を低減させる方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ディスク装置に供給する電力の管理に関し、特に、ディスク装置の消費電力を低減する方法に関する。
【０００２】
【従来の技術】
近年、環境保護等の観点から、パーソナル・コンピュータ（ＰＣ）等の電子機器に対し、より消費電力を小さくすることが求められている。特に、特にノートブック型ＰＣをはじめとする携帯用機器については、内蔵電源による長時間使用を可能にするため、より一層の省電力が求められている。
【０００３】
これらの機器の記憶装置として用いられるハード・ディスク・ドライブ（ＨＤＤ）は、消費電力を低下させるために、省電力のための動作を行わないアクティブ（Ａｃｔｉｖｅ）・モードのほか、トラックフォローのみで読み書きを行わないアイドル（Ｉｄｌｅ）・モードや、さらに消費電力を低減させるためディスクを回転させるスピンドル・モータを止めるスタンバイ（Ｓｔａｎｄｂｙ）・モード等の複数のパワーセーブ（省電力）・モードを有している。
【０００４】
平均的に消費電力を低減させるためには、ホスト・コンピュータからコマンドを受けない非動作時に、なるべく低い（消費電力の少ない）レベルのパワーセーブ・モードに移行することが有効である。
【０００５】
一方、ホスト・コンピュータからのコマンドに対する応答時間が長くなることを防止するため、コマンドを受けたら速やかにパワーセーブ・モードから抜けてアクティブ・モードに戻る必要がある。
【０００６】
一般に、より低いレベルのパワーセーブ・モードに移行するとき及びアクティブ・モードに復帰するときに、より多くの時間及びエネルギーが必要となる。
【０００７】
したがって、コマンドを受け取る間隔が短く、動作していない時間が短い場合においては、パワーセーブ・モードに移行するために消費するエネルギーの方が、そのパワーセーブ・モードに入ることにより節約出来るエネルギーよりも大きくなり、結局ＨＤＤの平均消費電力を増加させてしまう場合も考えられる。また、コマンドに対する応答もアクティブ・モードに復帰する時間だけ遅くなってしまう。
【０００８】
このような理由から、パワーセーブ・モードに入るタイミングを最適化する必要があり、そのために以下のようなアルゴリズムが考えられている。
【０００９】
（１）単純なタイマによる制御アルゴリズム
直前に実行したコマンド（命令）から一定時間以上経過した場合に、しばらくは次のコマンドは来ないであろうと判断し、パワーセーブ・モードに移行するというアルゴリズムである。ここで、「一定時間」とは、固定値またはホスト・コンピュータからコマンドにより指定された値にそれぞれ対応する時間をいう。
【００１０】
しかしながら、この方法では、例えば、コマンドの間隔が上記一定時間よりわずかに長いような場合、パワーセーブ・モードに入った直後に次のコマンドが来て、アクティブ・モードに復帰してしまい、結局ＨＤＤの平均消費電力を増加させてしまうことがある。
【００１１】
（２）Adaptive Battery Life Extender (ABLE) アルゴリズム
過去の一定時間毎にその時間内にＨＤＤが受け取ったコマンドの数（密度）を調べ、その一定時間における受け取ったコマンドの密度が高い（コマンドの間隔が短い）場合にはパワーセーブ・モードに移行するまでの時間を短くし、コマンドの密度が低い（コマンドの間隔が長い）場合にはパワーセーブ・モードに移行するまでの時間を長くする、というアルゴリズムである。
【００１２】
このアルゴリズムにより、ＨＤＤが一定間隔でコマンドを受け取った場合に、パワーセーブ・モードに入った直後に次のコマンドが来てしまうという可能性は低減出来る。しかしながら、コマンド間隔がランダムに変わる場合には、必ずしも最適なタイミングでパワーセーブ・モードに移行できるとは限らない。また、コマンドを受け取った時点を基準とするコマンドの密度を基にパワーセーブ・モードに移行するタイミングを決めているので、ＨＤＤがコマンドを処理するのに時間がかかった場合には見かけ上の密度が低くなってしまい、不適当なタイミングでパワーセーブ・モードに移行してしまうおそれがある。
【００１３】
（３）Enhanced Adaptive Battery Life Extender (ABLE2) アルゴリズム
（２）のABLEのアルゴリズムを拡張したものである。すなわち、ABLEにより制御されるパワーセーブ・モードは１個のみであったが、この数を３個にして、さらに低いレベルのパワーセーブ・モード（例えば、ロード・アンロード機構を備えたＨＤＤにおいてヘッドをアンロードするモード）にも自動的に移行することを可能にしたものである。
【００１４】
このアルゴリズムは、他のパワーセーブ・モードに移行するタイミングはABLEアルゴリズムと同じであるが、コマンド間隔のパターン（一定間隔でコマンドを受け取る場合、一回コマンドを受けた後しばらくコマンドを受け取らない場合又はランダムな間隔でコマンドを受け取る場合）によって３種類の関数を定義し、それにより、なるべく良いタイミングでアクティブ・モードからパワーセーブ・モードに、又はあるパワーセーブ・モードから他のパワーセーブ・モードに移行する点でABLEアルゴリズムと相違する。
【００１５】
【発明が解決しようとする課題】
しかしながら、従来技術においては、パワーセーブ・モードに移行した場合に節約が期待される消費電力量を予め計算することはなされていなかった。
【００１６】
したがって、従来技術においては、コマンド間隔及びパワーセーブ・モードへの移行のタイミングによっては、パワーセーブ・モードへの移行及びパワーセーブ・モードからの復帰のために付加的に必要となる消費電力量並びにコマンドに対する応答の遅延時間分の消費電力量が、パワーセーブ・モードに移行している期間に節約される消費電力量を上回り、結果的に節電の目的が達成できない場合もあり得た。
【００１７】
また、コマンドを受け取った時点を基準としてコマンドの密度を計算していたので、ＨＤＤがコマンドを処理するのに時間がかかった場合には、コマンドの完了をホスト・コンピュータに通知するのも遅くなり、それに伴ってホスト・コンピュータから次のコマンドが発行されるのも遅くなるため、ＨＤＤの非動作の時間が短い（稼働率が高い）にもかかわらず、ホスト・コンピュータから受け取るコマンドの見かけ上の密度が低下してしまい、不適当なタイミングでパワーセーブ・モードに移行してしまうおそれがあった。
【００１８】
したがって、本発明は、ＨＤＤの消費電力をより低減させることを目的とする。
【００１９】
また、本発明は、パワーセーブ・モードに移行した場合に節約が期待される消費電力量を計算することができる方法及び装置を提供することを目的とする。
【００２０】
さらに、本発明は、上述のような、ＨＤＤの非動作の時間が短いにもかかわらず、ホスト・コンピュータから受け取るコマンドの見かけ上の密度が低くなってしまい、不適当なタイミングでパワーセーブ・モードに移行してしまうという不都合を解消し、真にＨＤＤが非動作である時間に応じてホスト・コンピュータから受け取るコマンドの密度を計算する方法及び装置を提供することを目的とする。
【００２１】
【課題を解決するための手段】
本発明によれば、パワーセーブ・モードへ移行及びパワーセーブ・モードから復帰するために付加的に必要となる消費電力量並びにコマンドに対する応答の遅延時間分の消費電力量を、パワーセーブ・モードに移行している期間の節約が期待される消費電力量と予め比較する。
【００２２】
また、本発明によれば、ＨＤＤへの過去のコマンド間隔の時間分布と同じ時間分布で次のコマンドが来ることを仮定し、パワーセーブ・モードへ移行した場合に節約が期待される消費電力量を、複数のタイミングで計算する。
【００２３】
さらに、本発明によれば、節約が期待される消費電力量とともに、次に受け取るコマンドを実行するためにパワーセーブ・モードから復帰するための平均遅延時間を計算する。
【００２４】
さらにまた、本発明によれば、ホスト・コンピュータより指定されている時間よりも上記計算される平均遅延時間が短い範囲内で、最も節約される消費電力量が大きくなるタイミングでパワーセーブ・モードに移行する。
【００２５】
さらにまた、本発明によれば、計算に用いる過去のコマンド間隔には、前のコマンドを受け取ってから次のコマンドを受け取るまでの時間ではなく、前のコマンドの実行を完了してから次のコマンドを受け取るまでの時間を用いる。すなわち、インターフェースが稼動していない（アイドル状態の）時間をコマンド間隔とする。
【００２６】
さらにまた、本発明によれば、一定時間毎に、計算に用いる過去のコマンド間隔の影響力を半減させていき、最新のアクセス・パターンが最も大きく計算に反映されるようにする。
【００２７】
【発明の実施の形態】
（１）本発明が適用される装置
図１は本発明が適用されるＨＤＤのブロック図である。ディスク装置１００は、コントローラ部１１０とディスク部１３０から構成されている。コントローラ部１１０は、ホスト・・コンピュータ１０に接続されるホスト・インターフェース・コントローラ（ＨＩＣ）１１２と、ホスト・インターフェース・コントローラ１１２に接続され、ディスク部の制御を行うハード・ディスク・コントローラ（ＨＤＣ）１１４と、ハード・ディスク・コントローラ１１４に接続され、読み取り・書き込み信号の制御を行うチャネル１１６と、ＨＩＣ１１２、ＨＤＣ１１４、チャネル１１６に接続され、これらの制御を行うＭＰＵ１１８と、ＭＰＵ１１８に接続され、ＭＰＵが実行するマイクロコードを記憶するＲＡＭ１２０とを含む。ディスク部１３０はスピンドル１３２を回転させるモータ１３４を備えている。スピンドル１３２には、ディスク１３６Ａ及び１３６Ｂが、スピンドル１３２と一体的に回転するように取り付けられている。ディスクは、図においては２枚であるが、１枚又は３枚以上でもよい。
【００２８】
それぞれがディスクの面に対向するようにヘッド１３８Ａ、１３８Ｂ、１３８Ｃ及び１３８Ｄが、アクチュエータ・アーム１４０Ａ、１４０Ｂ、１４０Ｃ及び１４０Ｄにそれぞれ支持されて配置されている。アクチュエータ・アーム１４０Ａ〜１４０Ｄはピボット・シャフト１４２を介してボイス・コイル・モータ（ＶＣＭ）１４４に取付けられ、その回動により、ヘッド１３８Ａ〜１３８Ｄはディスクの所望の半径位置に移動される。モータ１３４及びＶＣＭ１４４はＨＤＣ１１４に接続され、それぞれの回転数、速度等が制御される。ヘッド１３８Ａ〜１３８Ｄはチャネル１１６に接続され、読み取り・書き込み信号がチャネル１１６によって制御される。
【００２９】
（２）節約が期待される消費電力量および次のコマンドの遅延時間の計算
図２に、パワーセーブ・モードの前後にわたる消費電力の推移を示す。図において、横軸は時間、縦軸は消費電力をそれぞれ表す。なお、図は説明のために簡略化したものであり、縮尺、波形等は正確でないことに留意されたい。まず、時刻ｔ1にコマンドの実行が完了(command complete)すると、一定の時間Ａが経過した後、ＨＤＤは時刻ｔ2にアクティブ・モードからパワーセーブ・モードへの移行を開始し、ヘッドをディスク上から待避させる（アンロード）等の移行動作を行う。このとき、ＨＤＤは移行動作に伴ってアクティブ・モードよりも多くの電力を付加的に消費し、斜線部ＥＬ(Energy Loss)１として示した部分の面積に対応する電力消費量が、アクティブ・モードからパワーセーブ・モードに移行するための電力の損失となる。ＨＤＤは時刻ｔ3にパワーセーブ・モードへの移行動作を完了し、時刻ｔ4に次のコマンドを受け取るまで、ＨＤＤはパワーセーブ・モードに入った状態である。このとき、ＨＤＤはアクティブ・モードよりも少ない電力を消費し、網線部ＥＧ(Energy Gain)として示した部分の面積に対応する電力消費量が、アクティブ・モードからパワーセーブ・モードに移行したことによる電力の利得となる。時刻ｔ4において、ＨＤＤが次のコマンドを受け取ると、それに対する処理を行うため、待避させられたヘッドを再びディスク上にロードさせる等のアクティブ・モードへの復帰動作を行う。このとき、ＨＤＤは復帰動作に伴ってアクティブ・モードよりも多くの電力を消費する。さらに、復帰動作を行っている間、コマンドに対する応答がその間遅延するため、遅延時間分のＨＤＤの全電力消費量である、斜線部ＥＬ２として示した部分の面積に対応する電力消費量がパワーセーブ・モードからアクティブ・モードに復帰することによる電力の損失となる。時刻ｔ5において復帰動作は完了し、ＨＤＤはコマンドに対する処理を開始する。
【００３０】
アクティブ・モードのままでいることに対してパワーセーブ・モードに移行することにより節約される電力消費量ＴＥＧ(Total Energy Gain)は、以下の式で計算される。
【数１】
ＴＥＧ＝ＥＧ−（ＥＬ１＋ＥＬ２）          （１）
【００３１】
ここで、ＥＬ１及びＥＬ２はそれぞれ一定のため、パワーセーブ・モードに移行したことによる電力利得ＥＧが小さければＴＥＧが負数になり、ＨＤＤはパワーセーブ・モードに移行しない場合よりもかえって多くの電力を消費してしまう。従って、節約される電力消費量を増加させるためには、パワーセーブ・モードに一定時間以上長く入っている必要がある。
【００３２】
さらに図２を参照すると、まだパワーセーブ・モードへの移行が始まる前の期間（期間Ａとして示される）内のある時点で次のコマンドを受け取った場合、節約される消費電力量は０であり、遅延時間も０となる。
【００３３】
また、ＨＤＤの制御機構は通常一旦完全にパワーセーブ・モードに入った後にそれから復帰するようになっているため、パワーセーブ・モードへの移行中（期間Ｂとして示される）に次のコマンドを受け取った場合は、節約される消費電力量は、
【数２】
ＴＥＧ＝−（ＥＬ１＋ＥＬ２＋ＥＬ３）      （２）
【００３４】
となり、パワーセーブ・モードへ移行しない場合に比べて多くの電力を消費することとなる。ここで、ＥＬ３は、次のコマンドを受け取ってからパワーセーブ・モードへの移行が完了するまでの時間に、アクティブ・モード時の消費電力を乗じたものである。また、コマンドに対する応答の遅延時間は、次のコマンドを受け取ってからパワーセーブ・モードへの移行が完了するまでの時間と図中ｂで示されるパワーセーブ・モードからの復帰にかかる時間の和となる。
【００３５】
さらにまた、パワーセーブ・モードへの移行が完了した後（期間Ｃとして示される）の時点で次のコマンドを受け取った場合は、上述のように節約される消費電力量は、
【数３】
ＴＥＧ＝ＥＧ−（ＥＬ１＋ＥＬ２）          （３）
【００３６】
となり、パワーセーブ・モードに入っている時間が長いほど電力をより多く節約出来ることとなる。しかしながら、パワーセーブ・モードに入っている時間が短く、ＥＧが（ＥＬ１＋ＥＬ２）より小さい場合は、パワーセーブ・モードへ移行しない場合に比べてむしろ多くの電力を消費することとなる。また、この場合の遅延時間は、図中ｂで示されるパワーセーブ・モードからの復帰にかかる時間のみとなる。
【００３７】
以上から、次のコマンドを受け取るタイミングと節約できる消費電力量ＴＥＧ及び遅延時間の関係は、図３のグラフのようになる。ここで、横軸においてパワーセーブ・モードへの移行を始めるタイミング（図２における時刻ｔ2）を０として、それより前のタイミングは負、後のタイミングは正として表示している。
【００３８】
図３において、時刻０において次のコマンドを受け取ってから、図２の期間Ｂに相当する期間内においては、節約できる消費電力量について式（２）が適用される。このとき、時間の経過に伴ってＥＬ３が減少する一方、ＥＬ１及びＥＬ２はそれぞれ一定だから、時刻０のとき節約できる消費電力量が最小値（この場合は負数）をとり、その後、時間の経過に伴って節約できる消費電力量の値は単調に増加する。
【００３９】
期間Ｂに相当する期間が経過すると、期間Ｃに相当する期間となり、節約できる消費電力量について式（３）が適用される。このとき、時間の経過に伴ってＥＧが増加する一方、ＥＬ１及びＥＬ２はそれぞれ一定だから、節約できる消費電力量の値は単調に増加する。時刻ｔcで、パワーセーブ・モードに入ることによる電力利得ＥＧとパワーセーブモードへの移行及び復帰に要する消費電力量（ＥＬ１＋ＥＬ２）がバランスし、節約できる消費電力量の値が０となる。その後、節約できる消費電力量は正の値に転じ、単調に増加する。
【００４０】
従って、パワーセーブ・モードへの移行を始めるタイミングから時刻ｔcが経過する前に次のコマンドを受け取ると、ＴＥＧは負の値となり、アクティブ・モードのままでいるよりもかえって多く電力を消費してしまう。一方、次のコマンドを受け取るタイミングが時刻ｔcが経過した後であれば、ＴＥＧは正の値となり、アクティブ・モードのままでいるよりも電力を節約することができる。
【００４１】
図３において、時刻０において次のコマンドを受け取ってから、図２の期間Ｂに相当する期間において、コマンドを受け取ってから応答を開始するまでの遅延時間は、以下のようになる。即ち、時刻０のときパワーセーブ・モードへの移行及び復帰に要する時間の和（ａ＋ｂ）となり、従って、移行開始直後に次のコマンドを受け取ったときに遅延時間が最大となる。その後パワーセーブ・モードへの移行動作が進行するに従って移行に要する時間の残り時間が減少し、遅延時間は単調に減少する。期間Ｂに相当する期間が経過するとアクティブ・モードへの復帰に要する時間ｂのみとなり、従って、このとき遅延時間が最小となる。
【００４２】
図４、図５及び図６に、パワーセーブ・モードを４個にしたときのＴＥＧ（図中Energy Gainと表示）及び遅延時間（図中Response Lossと表示）の変化を示す。これらの図において、アイドル（ＩＤＬＥ）・モードとは、ヘッドによるディスクへのデータの読み書きは行わず、ディスク上のサーボ信号の読み込みによるトラックフォローのみを行うモードをいい、アイドル２（ＩＤＬＥ２）・モードとは、サーボ信号の読み込みによるトラックフォローを行わず、チャネルに電力を供給しないモードをいい、アイドル３（ＩＤＬＥ３）・モードとは、ロード・アンロード機構を有するＨＤＤにおいてさらにヘッドをディスクからアンロードしてディスクの外側にあるランプに待避させることによりモータに対する抵抗を低減させるモードをいい、スタンバイ（ＳＴＡＮＤＢＹ）・モードとは、モータの回転を止めるモードをいうこととする。従って、ＨＤＤがアイドル・モード、アイドル２・モード、アイドル３・モード、スタンバイ・モードと移行するにしたがって、その消費電力が少なくなる。
【００４３】
図４は、ＨＤＤがアイドル・モードからアイドル２・モードへ移行するときのコマンド間隔とＴＥＧ及び遅延時間との関係を示す。両モード間の移行には、サーボ信号の読み込みという電気的スイッチング及びトラックフォローによるヘッドの微小な機械的動作しか伴わないので、モードの移行による消費電力が比較的小さく、また、遅延時間も比較的小さい。
【００４４】
図５は、ＨＤＤがアイドル２・モードからアイドル３・モードへ移行するときのコマンド間隔とＴＥＧ及び遅延時間との関係を示す。両モード間の移行には、ヘッドをディスクからアンロードしてランプに待避させるという機械的動作を伴うので、モードの移行による消費電力が比較的大きく、遅延時間も比較的大きい。
【００４５】
図６は、ＨＤＤがアイドル３・モードからスタンバイ・モードへ移行するときのコマンド間隔とＴＥＧ及び遅延時間との関係を示す。両モード間の移行には、モータを停止又は起動するという動作を伴い、かかる動作には一定の時間を要するので、モードの移行による消費電力が比較的大きく、また、遅延時間も比較的大きい。
【００４６】
以上、次に受け取るコマンドの時期による節約できる消費電力量ＴＥＧ及びコマンドに対する応答の遅延時間について説明したが、実際のＨＤＤの動作においては次のコマンドがいつ来るかを予測し、そのタイミングに合わせてパワーセーブ・モードへ移行を開始するまでの時間を決定することにより、全体として最も多く消費電力を節約できると考えられる。また、この時の遅延時間も許容出来る範囲に止める必要がある。
【００４７】
ここで、次のコマンドがいつ来るかについては、過去のコマンド間隔の情報に基づき仮定する。この場合、過去のコマンド間隔の単なる平均を次のコマンド間隔として採用するよりも、過去のコマンド間隔の分布を次のコマンド間隔の分布として採用した方が、より正確に次のコマンド間隔を予測できると考えられる。
【００４８】
そこで、パワーセーブ・モードへの移行を開始するまでの時間を複数選び、それぞれの時間毎に、図４乃至図６のグラフをコマンド間隔の分布により重み付けをして節約される消費電力量及び次のコマンドに対する応答の遅延時間を計算する。このようにして、パワーセーブ・モードへの移行を開始するまでの時間と、節約される消費電力量及び次のコマンドに対する応答の遅延時間との関係を知ることができる。
【００４９】
この関係を用いて、節約される消費電力量が最大となり、かつ遅延時間が十分小さくなるまでの、移行開始までの時間を決定することができる。
【００５０】
以下、具体例を図７乃至図２２に示す。
【００５１】
図７に、あるオペレーティング・システム（ＯＳ）のブート（Ｂｏｏｔ）・プログラムを実行したときのコマンド間隔の分布を示し、図８乃至図１０に、各パワーセーブ・モードの移行にこの分布を適用した場合のＴＥＧ及び遅延率の変化を示す。
【００５２】
図８は、図４におけるアイドル２・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、アイドル２・モードへの移行開始までの時間と節約できる消費電力及び遅延率の関係を示したものである。ここで図８以降のグラフは、前のコマンドの終了時からパワーセーブ・モード（この場合はアイドル２・モード）への移行を開始するまでの時間（図中Transition Delayと表示）を横軸にしており、節約消費電力量および遅延時間ともに経過時間で割って、節約消費電力（図中Power Gainと表示）および遅延率（図中Response Lossと表示）としている。図８のグラフより、前のコマンドを完了してから約１００ｍｓ後にアイドル２・モードへの移行を始めたときに節約消費電力がもっとも大きくなることがわかる。また、遅延時間も、約１００ｍｓ後には十分小さくなっていることがわかる。従って、前のコマンドを完了してから約１００ｍｓ経過後にパワーセーブ・モードに移行することが最適であると推測される。
【００５３】
図９は、図８と同様に図５におけるアイドル３・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、アイドル３・モードへの移行開始までの時間と節約できる消費電力及び遅延率の関係を示したものである。図９のグラフより、前のコマンドを完了してから約６０００ｍｓを経過するまでは節電の効果が無いことがわかる。従って、このとき、アイドル３・モードには移行しない方がよいことが推測される。
【００５４】
図１０は、図８と同様に図６におけるスタンバイ・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、スタンバイ・モードへの移行開始までの時間と節約できる消費電力及び遅延率の関係を示したものである。図１０のグラフより、前のコマンドを完了してから約６０００ｍｓを経過するまでは節電の効果が無いことがわかる。従って、このとき、スタンバイ・モードには移行しない方がよいことが推測される。
【００５５】
図１１乃至図１４は、バッテリーの使用時間を比較するためのベンチマーク・プログラムの一つを実行したときのコマンド間隔の分布（図１１）、及び各パワーセーブ・モードの移行にこの分布を適用した場合のＴＥＧ及び遅延時間の変化（図１２乃至図１４）を示す。図１２において、前のコマンドを完了してから約１００ｍｓ後にアイドル２・モードへの移行を始めたときに節約消費電力が最も大きくなることがわかる。また、遅延時間も、約１００ｍｓ後には十分小さくなっていることがわかる。図１３において、前のコマンドを完了してから約１５００ｍｓを経過するまでは節電の効果が無いことがわかる。一方、遅延時間は、約２０００ｍｓ経過後には十分小さくなっていることがわかる。図１４において、前のコマンドを完了してから約２０００ｍｓを経過するまでは節電の効果が無いことがわかる。一方、遅延時間は、約１６０００ｍｓ経過後には無視出来るほど小さくなっていることがわかる。
【００５６】
図１５乃至図１８は、ビジネス用アプリケーション・プログラムの実行性能を比較するためのベンチマーク・プログラムの一つを実行したときのコマンド間隔の分布（図１５）、及び各パワーセーブ・モードの移行にこの分布を適用した場合のＴＥＧ及び遅延時間の変化（図１６乃至図１８）を示す。図１６において、前のコマンドを完了してから約２００ｍｓ後にアイドル２・モードへの移行を始めたときに節約消費電力がもっとも大きくなることがわかる。また、遅延時間も、約２００ｍｓ後には十分小さくなっていることがわかる。図１７において、前のコマンドを完了してから約２０００ｍｓを経過するまでは節電の効果が無いことがわかる。一方、遅延時間は、約２０００ｍｓ経過後には十分小さくなっていることがわかる。図１８において、前のコマンドを完了してから約３０００ｍｓを経過するまでは節電の効果が無いことがわかる。一方、遅延時間は、約３０００ｍｓ経過後には無視出来るほど小さくなっていることがわかる。
【００５７】
図１９乃至図２２は、バッテリーの使用時間を比較するためのベンチマーク・プログラムの他の一つを実行したときのコマンド間隔の分布（図１９）、及び各パワーセーブ・モードの移行にこの分布を適用した場合のＴＥＧ及び遅延時間の変化（図２０乃至図２２）を示す。図２０において、前のコマンドを完了した直後から約１０００ｍｓ後までの間にアイドル２・モードへの移行を始めたときに節約消費電力がもっとも大きくなることがわかる。また、遅延時間も、この期間を通じて無視出来るほど小さいことがわかる。図２１において、前のコマンドを完了した直後から約１２０００ｍｓ後までの間にアイドル３・モードへの移行を始めたときに節約消費電力がもっとも大きくなることがわかる。一方、遅延時間は、この期間を通じて無視出来るほど小さくなっていることがわかる。図２２において、前のコマンドを完了した直後から約４０００ｍｓ後までの間にスタンバイ・モードへの移行を始めたときに節約消費電力がもっとも大きくなることがわかる。一方、遅延時間は、この期間を通じて十分小さくなっていることがわかる。
【００５８】
（３）動的制御
以上の説明は、過去のアクセス・パターンに基づいて、どのタイミングでパワーセーブモードに入れば効果的であったかを解析したものである。過去のアクセス・パターンのコマンド間隔の時間分布と同一の分布で次のコマンドを受け取ると仮定すると、解析された効果的なタイミングがこれから受け取るコマンドに対しても有効となる。本発明は、このように過去のアクセス・パターンに基づいてパワーセーブ・モードに移行するタイミングを決定している。
【００５９】
計算を簡単にして、保持しなければならない過去のコマンド間隔のデータ量を少なくするため、本発明の適用例では、コマンド間隔を複数の時間領域に分け、それぞれの時間領域でのコマンド間隔の数とその時間領域の平均時間とのデータが保持されている。そのようにすることで、総節約電力量は、各時間領域の平均時間から計算される節約消費電力量にコマンド間隔の数を乗じたものを、全時間領域で足しあわせることにより近似できる。総遅延時間についても同様である。
【００６０】
また、パワーセーブ・モードに移行するまでの最小時間が決まっている場合は(例えば１００ｍｓ等）、それよりも短いコマンド間隔ではパワーセーブモードに移行しないので、そのコマンド間隔に対する節約消費電力量も遅延時間も０となる。すなわち、計算に使用する意味はないので、データとして保持する必要がなくなり、その分保持しなければならないデータ量を節約できる。
【００６１】
（４）コマンド間隔
計算に用いる過去のコマンド間隔には、前のコマンドを完了した後、次のコマンドを受け取るまでの時間、即ちインターフェースがアイドルである時間をコマンド間隔とする。ホスト・コンピュータがいつ次のコマンドを送るかを正確に判断するためである。従来は、前のコマンドを受け取った後、次のコマンドを受け取るまでの時間をコマンド間隔としていたが、この方法ではＨＤＤがコマンドを処理するために要する時間もコマンド間隔に含まれてしまう。即ち、ホスト・コンピュータが意図的にコマンドを送らなかった時間も、ＨＤＤがコマンドを処理しておりそれが終了するのを待っていた時間も区別なく処理されてしまう。従って、従来の方法はホスト・コンピュータがいつ次のコマンドを送るかを判断する材料としては不適当となる。
【００６２】
（５）過去のコマンド間隔の計算に対する影響の大きさ
前のコマンドを完了してから次にコマンドを受け取るまでの時間は、比較的近い過去のコマンド間隔の時間分布に従うものと予想される。よって、計算には最新のコマンド間隔の分布が最も大きく影響し、古いコマンド間隔の分布は比較的影響しないようにしたほうが望ましい結果が得られる。このため、一定時間毎に過去のコマンド間隔の計算への影響力を半減させる。本発明の適用例では、一定時間毎に各時間領域のコマンド間隔の数を半減させることにより、実現している。
【００６３】
（６）複数のパワーセーブ・モードへの対応
パワーセーブ・モードが複数個ある場合でも、浅いパワーセーブ・モードからさらに深いパワーセーブ・モードに移行する場合の追加の節約消費電力と遅延時間を上記と同様に計算することにより、簡単に対応することが出来る。
【００６４】
（７）実際の動作方法
図２３乃至図３２に実際の動作方法を示す。これらの方法は通常ＨＤＤのマイクロコードとして実現される。
【００６５】
図２３は、図７、図１１、図１５及び図１９に示すようなコマンド間隔の分布を求めるための方法を示した流れ図である。ステップ２３１０において初期化プログラムを開始し、続くステップ２３１２において、コマンド間隔の時間領域を設定する。この例では、コマンド間隔の時間領域の数をNUM_POINTとし、１番目の時間領域をhist_min_time[0]とし、その時間間隔を100以上の時間に、２番目の時間領域をhist_min_time[1]とし、その間隔を200以上の時間に、３番目の時間領域をhist_min_time[2]とし、その間隔を300以上の時間に、としていき、NUM_POINT番目の時間領域をhist_min_time[NUM_POINT-1]とし、その間隔を31500以上の時間に、NUM_POINT+1番目の時間領域をhist_min_time[NUM_POINT]とし、その間隔を60000以上の時間にそれぞれ設定する。なお、ここで時間の表示は相対的なものであり、ｍｓ等の具体的な単位を直接表示するものとは限らないことに注意されたい。また、時間間隔はこの例のように対数的に分割するのが好ましい。
【００６６】
ステップ２３１２を終了後、ステップ２３１４に進み、ｉの初期値を０とする。続くステップ２３１６で、時間領域中のコマンドの時間間隔の合計であるhist_total_time[i]を０に初期化し、時間領域中のコマンドの数の合計であるhist_numcmd[i]を０に初期化する。続くステップ２３１８で、ｉを１増加させる。続くステップ２３２０でｉの値がNUM_POINTより小さければ再びステップ２３１６に戻り、ｉの値がNUM_POINT以上の値になるまでステップ２３１６乃至ステップ２３２０を繰り返す。即ち、ステップ２３１４乃至ステップ２３２０でｉの値が０からNUM_POINTになるまでのすべてのｉについてhist_total_time[i]及びhist_numcmd[i]を０に初期化する。ステップ２３２０でｉの値がNUM_POINT以上の値になったらステップ２３２２に進み、全コマンド間隔の合計時間total_timeを０に初期化し、ステップ２３２４で初期化プログラムを終了する。
【００６７】
図２４は、オペレーティング時にＨＤＤがコマンドを受け取った場合の動作を示した流れ図である。ステップ２４１０でコマンドによるパワーセーブ・モードの中断のプログラムを開始する。続くステップ２４１２で図２５に示すコマンドを受け取るサブルーチンを実行する。コマンドを受け取るサブルーチンを完了し、ＨＤＤがホスト・コンピュータからコマンドを受け取ると、ステップ２４１４で現在ＨＤＤがパワーセーブ・モードに入っているか否か判断される。パワーセーブ・モードに入っていれば、ステップ２４１６に進み、パワーセーブ・モードからアクティブ・モードに復帰し、ステップ２４１８に進む。一方、ステップ２４１４で現在ＨＤＤがパワーセーブ・モードに入っていなければ、ステップ２４１８に進む。ステップ２４１８でコマンドを処理し、ステップ２４２０で図２６に示すコマンドを完了するサブルーチンを実行し、コマンドを完了した後、ステップ２４２２でコマンドによるパワーセーブ・モードの中断のプログラムを終了する。
【００６８】
図２５は、図２４におけるステップ２４１２のコマンドを受け取るサブルーチンを詳述した流れ図である。ステップ２５１０でコマンドを受け取るサブルーチンが開始されると、ステップ２５１２でＨＤＤ内のＭＰＵの内部タイマTimerから直前に完了したコマンドの完了時刻comp_timeを減じ、その差をコマンド間隔intervalとする。ステップ２５１４で時間合計total_timeにコマンド間隔intervalを加え、その和を時間合計total_timeとする。続くステップ２５１６でｉを０に初期化し、続くステップ２５１８でコマンド間隔intervalがｉ番目の時間領域hist_min_time[i]より小さいか否か判断される。コマンド間隔intervalがｉ番目の時間領域hist_min_time[i]より小さいと判断された場合、ステップ２５２４に進む。一方、ステップ２５１８でコマンド間隔intervalがｉ番目の時間領域hist_min_time[i]より小さくないと判断された場合、ステップ２５２０でｉの値が１増加され、ステップ２５２２でｉの値がコマンド間隔の時間領域の数NUM_POINTより小さいか否か判断される。ｉの値がコマンド間隔の時間領域の数NUM_POINTより小さい場合、再びステップ２５１８に戻り、コマンド間隔が次に小さい時間間隔に属するか否か判断される。一方、ステップ２５２２でｉの値がコマンド間隔の時間領域の数NUM_POINTより小さくない場合、即ち、ｉの値がコマンド間隔の時間領域の数NUM_POINTの値以上になった場合、ステップ２５２４に進む。ステップ２５２４でｉの値が０に等しいか否か判断され、ｉの値が０に等しい場合、即ちステップ２５１８でコマンド間隔intervalがｉ番目の時間領域hist_min_time[i]より小さい場合、パワーセーブ・モードに移行するまでの最小時間よりもコマンド間隔が短いことを意味し、上述したようにデータとして保持する必要がなく、ステップ２５２８に進みサブルーチンを終了する。一方、ステップ２５２４でｉの値が０に等しくない場合、即ちコマンド間隔intervalがｉ番目（ｉは１以外）の時間領域hist_min_time[i-1]に属する場合、ステップ２５２６に進み、ｉ番目の時間領域中のコマンドの数の合計hist_numcmd[i-1]を１増加させ、さらに、ｉ番目の時間領域中のコマンドの時間間隔の合計hist_total_time[i-1]に当該コマンド間隔intervalを加え、その和をhist_total_time[i-1]とし、続くステップ２５２８でサブルーチンを終了する。
【００６９】
図２６は、図２４におけるステップ２４２０のコマンドを完了するサブルーチンを詳述した流れ図である。ステップ２６１０でコマンドを完了するサブルーチンが開始されると、ステップ２６１２でＨＤＤ内のＭＰＵの内部タイマTimerのその時点での値がコマンドの完了時刻comp_timeとされる。続くステップ２６１４で時間合計total_timeがMAX_TIMEの値以上か否か判断される。ここにMAX_TIMEとは、（５）で説明した一定時間、即ち過去のコマンド・アクセスの影響を減少させる間隔の２倍の値である。ステップ２６１４で時間合計total_timeがMAX_TIMEの値以上である場合、ステップ２６１６に進み、図３１において後述する過去のコマンド・アクセスの影響を減少させるサブルーチンを実行し、再びステップ２６１４に戻る。一方、ステップ２６１４で時間合計total_timeがMAX_TIMEの値より小さい場合、ステップ２６１８に進み、コマンド間隔intervalが１番目の時間領域hist_min_time[0]の値以上であるか否か判断される。コマンド間隔intervalが１番目の時間領域hist_min_time[0]の値以上である場合、ステップ２６２０に進み、図２７において後述する、次にパワーセーブ・モードに入る時期を決定するサブルーチンを実行し、ステップ２６２２でサブルーチンを終了する。一方、ステップ２６１８でコマンド間隔intervalが１番目の時間領域hist_min_time[0]の値以上でない場合、パワーセーブ・モードに移行するまでの最小時間よりもコマンド間隔が短いことを意味し、上述したようにデータとして保持する必要がなく、ステップ２６２２でサブルーチンを終了する。
【００７０】
図２７及び図２８は、図２６におけるステップ２６２０の、次にパワーモードに入る時期を決定するサブルーチンを詳述した流れ図である。ステップ２７１０で次にパワーモードに入る時期を決定するサブルーチンが開始されると、ステップ２７１２でｉの値が０に初期化され、続くステップ２７１４でｉ+１番目の時間領域中のコマンドの数の合計hist_numcmd[i]が０に等しいか否か判断される。ｉの値が０に等しい場合、即ち、ｉ+１番目の時間領域中のコマンドの数の合計hist_numcmd[i]が０の場合、ステップ２７１８に進む。一方、ステップ２７１４でhist_numcmd[i]が０に等しくない場合、ステップ２７１６に進み、ｉ＋１番目の時間領域中のコマンドの時間間隔の合計hist_total_time[i]をｉ+１番目の時間領域中のコマンドの数の合計hist_numcmd[i]で除し、その商をhist_ave_time[i]とする。従って、hist_ave_time[i]は、ｉ+１番目の時間領域におけるコマンド１個当たりの平均のコマンドの時間間隔を表す。ステップ２７１６を終了するとステップ２７１８に進む。ステップ２７１８で、ｉの値が１増加され、続くステップ２７２０でｉの値がコマンド間隔の時間領域の数NUM_POINTより小さいか否か判断される。ｉの値がコマンド間隔の時間領域の数NUM_POINTより小さい場合、再びステップ２７１４に戻り、以下、ｉの値がコマンド間隔の時間領域の数NUM_POINT以上になるまでステップ２７１４乃至ステップ２７２０が繰り返される。一方、ステップ２７２０でｉの値がコマンド間隔の時間領域の数NUM_POINTより小さくない場合、即ち、ｉの値がコマンド間隔の時間領域の数NUM_POINT以上の値になった場合、Ａに進み、図２８のＡに続く。
【００７１】
図２８のＡからステップ２７２２に進み、ｉの値が０に初期化される。続くステップ２７２４で、ｉ番目の時間領域hist_min_time[i]の値を変数delayに格納し、節約出来るエネルギー（消費電力量）の合計であるenergy_gain_sum及びコマンドに対する応答の遅れの合計resp_loss_sumの値をそれぞれ０に初期化する。続くステップ２７２６でｊの値を０に初期化し、ステップ２７２８でｊ+１番目の時間領域中のコマンドの数の合計hist_numcmd[j]が０に等しいか否か判断される。hist_numcmd[j]の値が０に等しい場合、即ち、ｊ+１番目の時間領域中のコマンドの数の合計が０の場合、ステップ２７３６に進み、ｊの値が１増加される。一方、ステップ２７２８でhist_numcmd[j]が０に等しくない場合、ステップ２７３０に進み、ｊ+１番目の時間領域におけるコマンド１個当たりの平均のコマンドの時間間隔hist_ave_time[j]をave_intervalとする。続くステップ２７３２で図２９において後述する、節約エネルギーを計算するサブルーチンを実行し、ステップ２７３４で節約出来るエネルギーの合計energy_gain_sumにenergy_gainを、コマンドに対する応答の遅れの合計resp_loss_sumにresp_lossをそれぞれ加える。その後、ステップ２７３６に進み、ｊの値が１増加され、続くステップ２７３８でｊの値がコマンド間隔の時間領域の数NUM_POINTより小さいか否か判断される。ｊの値がNUM_POINTより小さい場合、再びステップ２７２８に戻り、以下、ｊの値がNUM_POINT以上になるまでステップ２７２８乃至ステップ２７３８が繰り返される。一方、ステップ２７３８でｊの値がコマンド間隔の時間領域の数NUM_POINT以上になった場合、ステップ２７４０に進み、energy_gain_sum及びresp_loss_sumがそれぞれtotal_timeで除され、節約されるパワー（消費電力）power_gain[i]及び応答の遅れの比率resp_loss_ratio[i]が計算される。続くステップ２７４２でｉの値が１増加され、続くステップ２７４４でｉの値がコマンド間隔の時間領域の数NUM_POINTより小さいか否か判断される。ｉの値がNUM_POINTより小さい場合、再びステップ２７２４に戻り、以下、ｉの値がNUM_POINT以上になるまでステップ２７２４乃至ステップ２７４４が繰り返される。一方、ステップ２７４４でｉの値がコマンド間隔の時間領域の数NUM_POINT以上になった場合、ステップ２７４６に進み、節約されるエネルギーが最大になる時間を予測するサブルーチンを実行し、その後、ステップ２７４８に進み、サブルーチンを終了する。
【００７２】
図２９は、図２８におけるステップ２７３２の節約エネルギーを計算するサブルーチンを詳述した流れ図である。ステップ２９１０で節約エネルギーを計算するサブルーチンが開始されると、ステップ２９１２で、図２８のステップ２７３０で決定されたave_intervalの値が図２８のステップ２７２４で決定されたdelayの値より小さいか否か判断される。ave_intervalの値がdelayの値より小さい場合、コマンド１個当たりの平均のコマンドの時間間隔がパワーセーブ・モードに移行するまでの時間より短いため、図２における期間Ａにおいて次のコマンドが来ることに該当し、節約出来るエネルギーの合計energy_gain_sum及びコマンドに対する応答の遅れの合計resp_loss_sumの計算に影響しない。従って、この場合、ステップ２９１４に進み、energy_gain及びresp_lossの値を０とし、ステップ２９２２でサブルーチンを終了する。一方、ステップ２９１２でave_intervalの値がdelayの値より小さくない場合、図２における期間Ｂ又はＣにおいて次のコマンドが来ることに該当し、ステップ２９１６に進む。ステップ２９１６で、ave_intervalの値が、delayの値とパワーセーブ・モードに入るために要する時間であるTRANS_TIMEとの和より小さいか否か判断される。ave_intervalの値が、delay+TRANS_TIMEより小さい場合、図２における期間Ｂにおいて次のコマンドが来ることに該当し、ステップ２９１８に進む。ステップ２９１８で、energy_gain及びresp_lossが図２で説明したように、下記の式で計算される。
【数４】
energy_gain = -TRANS_ENERGY - ((delay + TRANS_TIME) - ave_interval) * BASE_POWER      （４）
【数５】
resp_loss = EXIT_TIME + TRANS_TIME - (ave_interval - delay)   （５）
【００７３】
ここで、式（４）において、TRANS_ENERGYとは、ＨＤＤがパワーセーブ・モードに入るため及びそこから復帰するために必要なエネルギーの和をいい、図２におけるＥＬ１＋ＥＬ２に相当する。また、BASE_POWERとは、アイドル・モードにおけるＨＤＤの消費電力をいい、従って、式（４）の右辺の第２項((delay + TRANS_TIME) - ave_interval) * BASE_POWERは、式（２）のＥＬ３に相当する。
【００７４】
また、式（５）において、EXIT_TIMEとは、ＨＤＤがパワーセーブ・モードから復帰するために必要な時間をいい、図２における時間ｂに相当する。TRANS_TIMEは前述の通りパワーセーブ・モードに入るために要する時間であり、図２における時間ａに相当する。
【００７５】
ステップ２９１８を終了した後、ステップ２９２２に進み、サブルーチンを終了する。
【００７６】
一方、ステップ２９１６でave_intervalの値が、delay+TRANS_TIMEより小さくない場合、図２における期間Ｃにおいて次のコマンドが来ることに該当し、ステップ２９２０に進む。ステップ２９２０で、energy_gain及びresp_lossが図２で説明したように、下記の式で計算される。
【数６】
energy_gain = (ave_interval - (delay + TRANS_TIME)) * DELTA_POWER - TRANS_ENERGY      （６）
【数７】
resp_loss = EXIT_TIME         （７）
【００７７】
ここで、DELTA_POWERとは、アイドル・モードにおけるＨＤＤの消費電力とパワーセーブ・モードにおけるＨＤＤの消費電力の差をいう。従って、式（６）の右辺の第１項(ave_interval - (delay + TRANS_TIME)) * DELTA_POWERは、式（３）のＥＧに相当する。
【００７８】
ステップ２９２０を終了した後、ステップ２９２２に進み、サブルーチンを終了する。
【００７９】
図３０は、図２８におけるステップ２７４６の、節約されるエネルギーが最大になる時間を予測するサブルーチンを詳述した流れ図である。ステップ３０１０で節約されるエネルギーが最大になる時間を予測するサブルーチンが開始されると、ステップ３０１２で、最大節約電力量であるmax_power_gainが０に初期化され、max_power_numがNUM_POINTに初期化される。続くステップ３０１４でｉの値が０に初期化され、ステップ３０１６に進む。ステップ３０１６で応答の遅れの比率resp_loss_ratio[i]の値が許容される最大の平均遅延時間RESP_LOSS_CRITERIAの値より小さいか否か判断される。resp_loss_ratio[i]の値がRESP_LOSS_CRITERIAの値より小さい場合、応答の遅れは許容される範囲内であり、さらにステップ３０１８に進み、power_gain[i]がmax_power_gainより大きいか否か判断される。一方、ステップ３０１６でresp_loss_ratio[i]の値がRESP_LOSS_CRITERIAの値より小さくない場合は、応答の遅れは許容される範囲内になく、ステップ３０２２に進む。ステップ３０１８で、power_gain[i]がmax_power_gainより大きい場合はステップ３０２０に進み、max_power_gainの値をpower_gain[i]の値に更新し、max_power_numの値もそのときのｉの値に更新し、その後ステップ３０２２に進む。一方、ステップ３０１８でpower_gain[i]がmax_power_gainより大きくない場合、max_power_gain及びmax_power_numの値の値は更新されず、ステップ３０２２に進む。ステップ３０２２でｉの値が１増加され、続くステップ３０２４でｉの値がNUM_POINTより小さいか否か判断される。ｉの値がNUM_POINTより小さい場合、再びステップ３０１６に戻り、以下、ｉの値がNUM_POINT以上になるまでステップ３０１６乃至ステップ３０２４が繰り返される。一方、ステップ３０２４でｉの値がNUM_POINT以上になった場合、ステップ３０２６で、次にパワーセーブ・モードに移行するまでの時間next_delayがhist_min_time[max_power_num]に決定され、その後、ステップ３０２８に進み、サブルーチンを終了する。
【００８０】
図３１は、図２６におけるステップ２６１６の過去のコマンド・アクセスの影響を減少させるサブルーチンを詳述した流れ図である。ステップ３１１０で過去のコマンド・アクセスの影響を減少させるサブルーチンが開始されると、ステップ３１１２で、ｉの値が０に初期化される。続くステップ３１１４で、ｉ＋１番目の時間領域中のコマンドの時間間隔の合計hist_total_time[i]を２で除し、その商をhist_total_time[i]とし、ｉ＋１番目の時間領域中のコマンドの数の合計hist_numcmd[i]を２で除し、その商をhist_numcmd[i]とする。続くステップ３１１６でｉの値が１増加され、続くステップ３１１８でｉの値がNUM_POINTより小さいか否か判断される。ｉの値がNUM_POINTより小さい場合、再びステップ３１１４に戻り、以下、ｉの値がNUM_POINT以上になるまでステップ３１１４乃至ステップ３１１８が繰り返される。一方、ステップ３１１８でｉの値がNUM_POINT以上になった場合、ステップ３１２０に進む。ステップ３１２０で、total_timeを２で除し、その商をtotal_timeとし、その後ステップ３１２２に進み、サブルーチンを終了する。
【００８１】
図３２は、パワーセーブ・モードに移行するためのタイマによる割り込み動作を示した流れ図である。ステップ３２１０でパワーセーブ・モードに移行するためのタイマによる割り込みのプログラムが開始されると、ステップ３２１２で現在ＨＤＤがコマンドを処理中か否か判断される。コマンドを処理中であれば、ステップ３２２２に進み、プログラムを終了する。コマンドを処理中でなければ、ステップ３２１４に進み、現在ＨＤＤがパワーセーブ・モードに入っているか否か判断される。既にパワーセーブ・モードに入っていればステップ３２２２に進み、プログラムを終了する。まだパワーセーブ・モードに入っていなければステップ３２１６に進み、ＨＤＤ内のＭＰＵの内部タイマTimerから直前に完了したコマンドの完了時刻comp_timeを減じ、その差を経過時間elapsed_timeとする。次に、ステップ３２１８に進み、elapsed_timeの値が次にパワーセーブ・モードに移行するまでの時間next_delayの値以上か否か判断される。elapsed_timeの値が次にパワーセーブ・モードに移行するまでの時間next_delayの値以上である場合、ステップ３２２０に進み、パワーセーブ・モードに入り、続くステップ３２２２でプログラムを終了する。一方、ステップ３２１８でelapsed_timeの値が次にパワーセーブ・モードに移行するまでの時間next_delayの値以上でない場合、ステップ３２２２に進み、プログラムを終了する。
【００８２】
（８）適用例の実験結果
表１及び表２に実際のＨＤＤを用いた実験結果を示す。表１は、パワーセーブ・モードなし(No Power Save)の場合、ABLE2アルゴリズムを用いた場合及び本発明によるアルゴリズム(New Algorithm)を用いた場合のそれぞれについて、バッテリーの使用時間を比較するためのベンチマーク・プログラムの一つをＨＤＤが実行したときの平均消費電力を示す。表において、マイクロコードはABLE2のアルゴリズムを用いてパワーセーブ・モードを制御しており、３個のパワーセーブ・モードを用いている。新しいアルゴリズムでも同じ３個のパワーセーブ・モードを制御するようにしている。表中でABLE Modeとあるのは移行することを許している最も深いレベルのパワーセーブ・モードを制御するためのパラメータであり、この数が小さいほど深いレベルのパワーセーブ・モードを許すこととしている。また、表２は、表１と同様の各場合について、ＨＤＤのスループットを測定するためのベンチマーク・プログラムの一つをＨＤＤが実行したときのスコア（高いほど良いとされる）を示す。
【表１】
0003819166.tif 000002
【表２】
0003819166.tif 000003
【００８３】
以上より、表１における平均消費電力は、本発明による新しいアルゴリズムの方がＡＢＬＥ２に比べて、最も深いパワーセーブモードを使う場合で約９％少なくなっていることが分かる。
【００８４】
また、表２におけるスコアは新しいアルゴリズムの方がＡＢＬＥ２の場合に比べて１％程度良くなっており、パワーセーブを全くしない場合にほぼ等しい。これは、ＡＢＬＥ２で不適当なタイミングでパワーセーブ・モードに入ってしまうケースがたまにあったのが、新しいアルゴリズムでほとんどなくなったためであると推測される。
【００８５】
【発明の効果】
本発明によれば、ＨＤＤの消費電力をより低減させることができる。
【００８６】
また、本発明によれば、パワーセーブ・モードに移行した場合に節約が期待される消費電力量を計算することができる方法及び装置を提供することができる。
【００８７】
さらに、本発明によれば、ＨＤＤの非動作の時間が短いにもかかわらず、ホスト・コンピュータから受け取るコマンドの見かけ上の密度が低くなってしまい、不適当なタイミングでパワーセーブ・モードに移行してしまうという不都合を解消し、真にＨＤＤが非動作である時間に応じてホスト・コンピュータから受け取るコマンドの密度を計算する方法及び装置を提供することができる。
【図面の簡単な説明】
【図１】本発明が適用されるＨＤＤのブロック図である。
【図２】パワーセーブ・モードの前後にわたる消費電力の推移を示す図である。
【図３】次のコマンドを受け取るタイミングと節約できる消費電力量ＴＥＧ及び遅延時間の関係を示す図である。
【図４】ＨＤＤがアイドル・モードからアイドル２・モードへ移行するときのコマンド間隔と節約できる消費電力量及び遅延時間との関係を示す図である。
【図５】ＨＤＤがアイドル２・モードからアイドル３・モードへ移行するときのコマンド間隔と節約できる消費電力量及び遅延時間との関係を示す図である。
【図６】ＨＤＤがアイドル３・モードからスタンバイ・モードへ移行するときのコマンド間隔と節約できる消費電力量及び遅延時間との関係を示す図である。
【図７】あるオペレーティング・プログラムのブート・プログラムを実行したときのコマンド間隔の分布を示す図である。
【図８】図４におけるアイドル２・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、アイドル２・モードへの移行開始までの時間と節約できる消費電力量及び遅延率の関係を示す図である。
【図９】図５におけるアイドル３・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、アイドル３・モードへの移行開始までの時間と節約できる消費電力及び遅延率の関係を示す図である。
【図１０】図６におけるスタンバイ・モードへの移行開始までの時間として図７のコマンド間隔の分布を適用して重み付けをしたときに、スタンバイ・モードへの移行開始までの時間と節約できる消費電力及び遅延率の関係を示す図である。
【図１１】バッテリーの使用時間を比較するためのベンチマーク・プログラムの一つを実行したときのコマンド間隔の分布を示す図である。
【図１２】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１３】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１４】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１５】ビジネス用アプリケーション・プログラムの実行性能を比較するためのベンチマーク・プログラムの一つを実行したときのコマンド間隔の分布を示す図である。
【図１６】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１７】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１８】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図１９】バッテリーの使用時間を比較するためのベンチマーク・プログラムの他の一つを実行したときのコマンド間隔の分布を示す図である。
【図２０】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図２１】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図２２】各パワーセーブ・モードの移行にこの分布を適用した場合の節約できる消費電力及び遅延率の変化を示す図である。
【図２３】コマンド間隔の分布を求めるための方法を示した流れ図である。
【図２４】オペレーティング時にＨＤＤがコマンドを受け取った場合の動作を示した流れ図である。
【図２５】図２４におけるステップ２４１２のコマンドを受け取るサブルーチンを詳述した流れ図である。
【図２６】図２４におけるステップ２４２０のコマンドを完了するサブルーチンを詳述した流れ図である。
【図２７】図２８とともに図２６におけるステップ２６２０の次にパワーモードに入る時期を決定するサブルーチンを詳述した流れ図である。
【図２８】図２７とともに図２６におけるステップ２６２０の次にパワーモードに入る時期を決定するサブルーチンを詳述した流れ図である。
【図２９】図２８におけるステップ２７３２の節約エネルギーを計算するサブルーチンを詳述した流れ図である。
【図３０】図２８におけるステップ２７４６の節約されるエネルギーが最大になる時間を予測するサブルーチンを詳述した流れ図である。
【図３１】図２６におけるステップ２６１６の過去のコマンド・アクセスの影響を減少させるサブルーチンを詳述した流れ図である。
【図３２】パワーセーブ・モードに移行するためのタイマによる割り込み動作を示した流れ図である。
【符号の説明】
１００  ディスク装置
１１０  コントローラ部
１１２  ホスト・インターフェース・コントローラ（ＨＩＣ）
１１４  ハード・ディスク・コントローラ（ＨＤＣ）
１１６  チャネル
１１８  ＭＰＵ
１２０  ＲＡＭ
１３０  ディスク部
１３２  スピンドル
１３４  モータ
１３６  ディスク
１３８  ヘッド
１４０  アクチュエータ・アーム
１４２  ピボット・シャフト
１４４  ボイス・コイル・モータ（ＶＣＭ）
【図１】
0003819166.tif 000004
【図２】
0003819166.tif 000005
【図３】
0003819166.tif 000006
【図４】
0003819166.tif 000007
【図５】
0003819166.tif 000008
【図６】
0003819166.tif 000009
【図７】
0003819166.tif 000010
【図８】
0003819166.tif 000011
【図９】
0003819166.tif 000012
【図１０】
0003819166.tif 000013
【図１１】
0003819166.tif 000014
【図１２】
0003819166.tif 000015
【図１３】
0003819166.tif 000016
【図１４】
0003819166.tif 000017
【図１５】
0003819166.tif 000018
【図１６】
0003819166.tif 000019
【図１７】
0003819166.tif 000020
【図１８】
0003819166.tif 000021
【図１９】
0003819166.tif 000022
【図２０】
0003819166.tif 000023
【図２１】
0003819166.tif 000024
【図２２】
0003819166.tif 000025
【図２３】
0003819166.tif 000026
【図２４】
0003819166.tif 000027
【図２５】
0003819166.tif 000028
【図２６】
0003819166.tif 000029
【図２７】
0003819166.tif 000030
【図２８】
0003819166.tif 000031
【図２９】
0003819166.tif 000032
【図３０】
0003819166.tif 000033
【図３１】
0003819166.tif 000034
【図３２】
0003819166.tif 000035