特許第5989908号(P5989908)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル コーポレイションの特許一覧

特許5989908不揮発性メモリにコードをキャッシュする方法、システムおよび装置
<>
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000002
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000003
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000004
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000005
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000006
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000007
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000008
  • 特許5989908-不揮発性メモリにコードをキャッシュする方法、システムおよび装置 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5989908
(24)【登録日】2016年8月19日
(45)【発行日】2016年9月7日
(54)【発明の名称】不揮発性メモリにコードをキャッシュする方法、システムおよび装置
(51)【国際特許分類】
   G06F 9/45 20060101AFI20160825BHJP
   G06F 12/08 20160101ALI20160825BHJP
【FI】
   G06F9/44 322H
   G06F9/44 322L
   G06F9/44 320H
   G06F12/08 553B
   G06F12/08 543B
   G06F12/08 541C
   G06F12/08 563
   G06F12/08 517C
【請求項の数】16
【全頁数】22
(21)【出願番号】特願2015-528725(P2015-528725)
(86)(22)【出願日】2013年9月19日
(65)【公表番号】特表2015-525940(P2015-525940A)
(43)【公表日】2015年9月7日
(86)【国際出願番号】US2013060624
(87)【国際公開番号】WO2014052157
(87)【国際公開日】20140403
【審査請求日】2015年2月18日
(31)【優先権主張番号】13/630,651
(32)【優先日】2012年9月28日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】593096712
【氏名又は名称】インテル コーポレイション
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】チョン,ジェウン
(72)【発明者】
【氏名】ウー,ヨウフオン
(72)【発明者】
【氏名】ワーン,チュヨン
【審査官】 多賀 実
(56)【参考文献】
【文献】 米国特許出願公開第2007/0094648(US,A1)
【文献】 特開平10−255483(JP,A)
【文献】 特開2004−118367(JP,A)
【文献】 特開2011−059777(JP,A)
【文献】 特開2012−048361(JP,A)
【文献】 国際公開第2003/042837(WO,A1)
【文献】 特開2008−139927(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44− 9/455
G06F12/08−12/12
G06F12/16
(57)【特許請求の範囲】
【請求項1】
コードをキャッシュする方法であって、
第1のコードに対するコードリクエストのインスタンスを特定するステップと、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定するステップと、を含み、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、
前記方法は、さらに、
前記第1の条件が満たされない場合に、前記第1の条件および第2の条件に対応する総計閾値が満たされるか否かを判断するステップ、を含む、
ことを特徴とする方法。
【請求項2】
コードをキャッシュする方法であって、
第1のコードに対するコードリクエストのインスタンスを特定するステップと、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定するステップと、を含み、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、
前記第1の条件は、アクセス頻度カウントが閾値を超えること、を含み、
前記方法は、さらに、
第2のコードのアクセス頻度カウント値に基づいて、前記アクセス頻度カウントに対する閾値を設定するステップ、または、
複数の他のコードに関するアクセス頻度カウント値に基づいて、前記アクセス頻度カウントに対する閾値を設定するステップ、を含む、
ことを特徴とする方法。
【請求項3】
コードをキャッシュする方法であって、
第1のコードに対するコードリクエストのインスタンスを特定するステップと、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定するステップと、を含み、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、
前記方法は、さらに、
前記NV RAMキャッシュに対する書き込みオペレーションの回数をトラックして、前記回数が、寿命の最大書き込み回数に関する書き込み閾値を超えるときに、警告を発生するステップ、を含む、
ことを特徴とする方法。
【請求項4】
前記方法は、さらに、
前記第1のコードを前記NV RAMキャッシュに追加する前に、バイナリトランスレータを用いて前記第1のコードをコンパイルするステップと、
を含む、請求項1乃至3いずれか一項に記載の方法。
【請求項5】
前記方法は、さらに、
前記第1のコードに対するプロセッサリクエストの回数をトラックし、前記回数に基づいて、前記第1のコードを前記NV RAMキャッシュに追加するステップ、
を含む、請求項1乃至3いずれか一項に記載の方法。
【請求項6】
前記方法は、さらに、
前記第1のコードが第1レベルのキャッシュに居ないときに、前記NV RAMキャッシュに対する書き込みを行う試みを無視するステップ、を含み、
前記NV RAMキャッシュに対する前記書き込みを行う試みは、最低使用頻度ストレージポリシに関連している、
請求項1乃至3いずれか一項に記載の方法。
【請求項7】
インストラクションを含むコンピュータプログラムであって、コンピュータによってインストラクションが実行されると、少なくとも、
第1のコードに対するコードリクエストのインスタンスを特定し、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定し、かつ、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、さらに、
前記第1の条件が満たされない場合に、前記第1の条件および第2の条件に対応する総計閾値が満たされるか否かを判断する、
ことを特徴とするコンピュータプログラム
【請求項8】
インストラクションを含むコンピュータプログラムであって、コンピュータによってインストラクションが実行されると、少なくとも、
第1のコードに対するコードリクエストのインスタンスを特定し、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定し、かつ、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、さらに、
第2コードのアクセス頻度カウント値に基づいて、アクセス頻度カウントに対する閾値を設定するか、もしくは、
複数の他のコードに関するアクセス頻度カウント値に基づいて、アクセス頻度カウントに対する閾値を設定する、
ことを特徴とするコンピュータプログラム
【請求項9】
インストラクションを含むコンピュータプログラムであって、コンピュータによってインストラクションが実行されると、少なくとも、
第1のコードに対するコードリクエストのインスタンスを特定し、
前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定し、かつ、
前記第1のコードが前記NV RAMキャッシュに居ない場合に、
前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、
前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止し、さらに、
前記NV RAMキャッシュに対する書き込みオペレーションの回数をトラックして、前記回数が、寿命の最大書き込み回数に関する書き込み閾値を超えるときに、警告を発生する、
ことを特徴とするコンピュータプログラム
【請求項10】
前記インストラクションが実行されると
前記第1の条件が、アクセス頻度カウント閾値をいつ超えたかを特定する、
請求項7乃至9いずれか一項に記載のコンピュータプログラム
【請求項11】
前記インストラクションが実行されると
前記第1のコードに対するプロセッサリクエストの回数をトラックし、前記リクエストの回数に基づいて、前記第1のコードを前記NV RAMキャッシュに追加する、 請求項7乃至9いずれか一項に記載のコンピュータプログラム
【請求項12】
前記インストラクションが実行されると
前記第1のコードが第1レベルのキャッシュに居ないときに、前記NV RAMキャッシュに対する書き込みを行う試みを無視する、
請求項7乃至9いずれか一項に記載のコンピュータプログラム
【請求項13】
コンパイルされたコードを動的に保管する装置であって、
前記コンパイルされたコードを保管するための第1レベルのキャッシュと、
前記コンパイルされたコードを保管するための第2レベルの不揮発性ランダムアクセスメモリ(NV RAM)キャッシュと、
キャッシュインターフェイスであり、前記コンパイルされたコードが閾値より多い頻度でアクセスされる場合は、前記NV RAMに前記コンパイルされたコードを保管することを許可し、かつ、前記閾値の頻度が満たされない場合は、前記NV RAMに前記コンパイルされたコードを保管することをブロックする、キャッシュインターフェイスと、
を含み、
前記NV RAMキャッシュに対する書き込みオペレーションの回数をトラックして、前記回数が、寿命の最大書き込み回数に関する書き込み閾値を超えるときに、警告を発生する、
ことを特徴とする装置。
【請求項14】
前記装置は、さらに、
前記NV RAMキャッシュについて期待される寿命の書き込みカウント値を、前記NV RAMキャッシュの書き込みカウントインスタンスの現在の回数と比較する、プロファイルマネージャ、を含む、
請求項13に記載の装置。
【請求項15】
前記装置は、さらに、
前記NV RAMキャッシに対する書き込みカウントインスタンスの頻度を低減するために、第2の条件に関する閾値を設定する、条件閾値エンジン、を含む、
請求項14に記載の装置。
【請求項16】
請求項7乃至12いずれか一項に記載のコンピュータプログラムを記憶した、
コンピュータで読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明開示は、一般的にコンパイラに関する。より特定的には、不揮発性メモリにコードをキャッシュする方法、システムおよび装置に関する。
【背景技術】
【0002】
ダイナミックコンパイラは、一つまたはそれ以上のプラットフォームプログラムが実行されているランタイムの最中にコードを最適化しようと試みる。コンパイラは、プロセッサのパフォーマンスを改善するためにコードを最適化しようと試みる。しかしながら、コンパイラのコード最適化タスクも、また、プロセッサのリソースを消費する。このことは、そうした最適化エフォート(effort)が最適化コード自身によって節約し得るよりも大きな量のプロセッサリソースを消費する場合に、結果として生じる最適化されたコードの一つまたはそれ以上の利点を打ち消してしまう。
【発明の概要】
【発明が解決しようとする課題】
【0003】
コンパイラは、プロセッサのパフォーマンスを改善するためにコードを最適化しようと試みる。しかしながら、コンパイラのコード最適化タスクも、また、プロセッサのリソースを消費する。
【課題を解決するための手段】
【0004】
ここにおいて開示される方法、装置、システム、及び/又は、製品は、不揮発性RAMベースの持続性(persistent)コードキャッシュを使用する。電源オフの期間中にメモリコンテンツを維持し、従来のL1/L2キャッシュと同等なレイテンシ特性を示し、かつ、NV RAMキャッシュに関するライフサイクルの観点でメモリライフを延長するやり方で書き込みオペレーションを管理するものである。
【図面の簡単な説明】
【0005】
図1図1は、本発明開示の教示に従って、不揮発性メモリの中にコードをキャッシュするためのプロセッサプラットフォームに係る実施例を模式的に示している。
図2図2は、図1のプラットフォームにおいてキャッシュマネージャによって生成されたコード条件スコアの実施例である。
図3図3は、図1のプラットフォームにおいてキャッシュマネージャによって生成されたコードパフォーマンスチャートの実施例である。
図4図4は、図1のキャッシュマネージャの実施例を模式的に示している。
図5A図5Aは、不揮発性メモリの中にコードをキャッシュするために実行されるマシンで読取り可能なインストラクションの代表的な実施例に係るフローチャートである。
図5B図5Bは、不揮発性メモリの中にコードをキャッシュするために実行されるマシンで読取り可能なインストラクションの代表的な実施例に係るフローチャートである。
図6図6は、不揮発性メモリの中にコードをキャッシュするために実行されるマシンで読取り可能なインストラクションの代表的な実施例に係るフローチャートである。
図7図7は、図1−4の実施例に係るシステムおよび装置を実施するために、図5A、5B、および6に係るインストラクションを実行するプロセッサの実施例を模式的に示している。
【発明を実施するための形態】
【0006】
コード最適化技術は、ランタイムにダイナミックコンパイラを使用して、プログラムの実行を最適化、及び/又は、そうでなければ改善する。インタープリタされたコードは、例えば、ジャストインタイム(JIT)コンパイラを介して実行の最中にマシンコードにコンパイルされ、キャッシュされる。コンパイルされたコードがキャッシュメモリからアクセスされるので、一つまたはそれ以上のファンクション(例えば、プロセス、サブルーチン、等)に対するプロセッサによる後続のリクエストが、比較的に早く生じるようにである。他の実施例においては、ダイナミックバイナリトランスレータが、ソースインストラクションをターゲットインストラクションに翻訳する。ターゲットマシン(例えば、プロセッサ)が、インストラクションを実行できるようにする方法においてである。プロセッサが最初にコードをリクエストするとき(例えば、ファンクションコール)には、ソースコードをプロセッサが取り扱えるフォーマットへと翻訳するために余分な時間(例えば、プロセッサのクロックサイクル)が費やされる。しかしながら、翻訳されたコードは、キャッシュメモリの中に保管され、後続の時間にプロセッサがターゲットコードを取り戻すことができるようにする。そこでは、キャッシュメモリへのアクセスが、ソースコードを再度コンパイルすることよりも早い。
【0007】
いくつかのシステムにおいて、コードは、スタートアップに際してコンパイルされ、キャッシュされる。しかしながら、そうしたスタートアップ時のコンパイルは、後の使用のためのコンパイルされたコードを生成するために、著しい量のプロセッサのオーバーヘッドを消費する。オーバーヘッドは、しばしば、「ウォームアップタイム」または「ラグタイム」として参照される。そうしたエフォートは、プログラムの実行における早期のプロセッサパフォーマンスを犠牲にしている。プログラムが、比較的に長い時間期間に動作し、及び/又は、比較的頻繁に同じファンクションを繰り返しコールする場合における、ロングランでより良い結果を出すためのエフォートにおけるものである。最適にコンパイルされたコードは、オリジナルコードを再度コンパイルする将来の必要性を回避するために、ハードディスク(例えば、磁気ハードドライブ、半導体ディスク、等)上に保管される。しかしながら、ハードディスクのアクセスタイムは、ダイナミックコンパイラがオリジナルコードを再度コンパイルするのに必要な時間量よりも遅いことがあり、それにより、プログラムが開始されたとき(例えば、プラットフォームを電源オンした後)、初期的に遅いスタートアップタイム(つまり、比較的に大きいラグタイム)を結果として生じている。別の言葉で言えば、最適化されコンパイルされたコードをストレージから取り戻すための時間量は、プロセッサがコードに対するリクエストをする場合に、オリジナルコードを再度コンパイルする、及び/又は、再度最適化するための時間量よりも長い時間がかかる。
【0008】
一方、プロセッサキャッシュ及び/又はDRAMへのアクセスをイネーブル(enabling)することは、ハードディスクのアクセス待ち時間と比較したときに、以前に最適化されコンパイルされたコードを取り戻す時間量を削減する。プロセッサのキャッシュは、揮発性メモリであり、電源が取り外されたときに、メモリコンテンツを喪失する。プラットフォームのシャットダウンに係るインスタンスの最中といったときである。プロセッサキャッシュは、あらゆる数量のキャッシュレイヤ(layer)を含んでよい。レベル−1(L1)、レベル−2(L2)(例えば、マルチレベルのキャッシュ)といったものである。マルチレベルのキャッシュは、プロセッサのフェッチ待ち時間を低減する。ハードディスクストレージからのコードのための比較的により時間のかかるフェッチを試みる以前に、プロセッサが、キャッシュの中にある所望のコードをチェックできることによるものである。キャッシュは、典型的には、階層的な形式で構成されている。レベル1(例えば、L1)では、小さい待ち時間、高コスト、より小さなストレージを用い、それぞれ後続のレベル(例えば、L2、L3、等)では、より遅く、より大きく、そして、より安価なストレージを実施する。
【0009】
L1とL2キャッシュ、及び/又は、あらゆる他のキャッシュレベルは、典型的に、プロセッサ及び/又はプロセッサプラットフォームと関連するランダルアクセスメモリ(RAM)より小さい。しかし、典型的にはより早く、かつ、フェッチ待ち時間を低減するためにプロセッサに対して物理的により近い。キャッシュは、また、比較的にRAMより小さい。なぜなら、部分的に、プロセッサのフットプリント(例えば、ダイキャッシュ上のもの)を一部を使用するからである。加えて、第1のレベルのキャッシュ(L1)は、典型的に、後続のキャッシュレベル及び/又はRAMを超えるスピードパフォーマンス特性を伴って製造されており、それにより、比較的に高い価格ポイントを要求している。後続のキャッシュレイヤは、典型的に、比較的大きなストレージ容量を含んでいるが、物理的にさらに離れており、及び/又は、第1レイヤのキャッシュよりパフォーマンス特性が低い。プロセッサが、所望のコード(例えば、一つまたはそれ以上のインストラクション、最適化コード、等)を第1レイヤのキャッシュ(例えば、L1キャッシュ)の中に置かない場合には、外部ストレージ(例えば、ハードディスク、フラッシュメモリ、半導体ディスク、等)に対するプロセッサのフェッチ(fetch)以前に、第2または後続レイヤのキャッシュ(例えば、L2キャッシュ、DRAM)がチェックされる。このように、ほとんどのキャッシュは、第1レイヤのキャッシュに書き込まれたデータを、全てのレベルのキャッシュ(例えば、L2、L3、等)において重複して保管するように構成されており、メインメモリへのアクセスを削減する。
【0010】
コンパイルされたコードをキャッシュの中に保管することは、再度の最適化、再度のコンパイル、及び/又は、メインメモリへのアクセス試行の必要性を削減することによってレイテンシ(latency)低減を促進する。一方で、キャッシュは揮発性である。プラットフォームがシャットダウン、及び/又は、そうでなければ電源オフされたときに、キャッシュの全てのコンテンツは失われる。いくつかの実施例において、キャッシュメモリ(例えば、L1キャッシュ、L2キャッシュ、等)はダイナミックRAM(DRAM)を含んでおり、バイト(byte)レベルのアクセスができるが、電源オフされるとデータを失ってしまう。バイトレベルのアクセス可能性により、プロセッサ及び/又はバイナリトランスレータは、メモリの大きなブロックより、むしろ、比較的に少量の情報に対して迅速にオペレーションすることができる。いくつかの実施例において、プロセッサは、コードの大きなブロックより、むしろ、コードのバイトレベル部分においてオペレーションすることだけが必要である。コードの大きなブロックがフェッチされた場合には、プロセッサによって必要とされないコード部分を取得するために、追加のフェッチ(転送)時間が浪費される。一方、フラッシュメモリは、電源オフされた後もメモリを維持している。フラッシュメモリは、バイトレベルの読み出し及び/又は書き込みを促進することはできないが、代わりに、ブロックでメモリにアクセスする。従って、フラッシュメモリは、バイトレベルにおけるより、むしろ、ブロックレベルにおける比較的大きなレイテンシアクセスタイムのせいで、最適なキャッシュメモリのタイプとしては、役に立たない。
【0011】
一方、不揮発性(NV)RAMは、L1、L2キャッシュ及び/又はダイナミックRAM(DRAM)に匹敵するデータ転送レイテンシ特性を示し得る。さらに、プラットフォームが電源オフされたとき(シャットダウン、リブート、スリープモード、等の最中)、NV RAMは、プラットフォームの電源が回復された後で使用するためにメモリコンテンツを維持する。さらに、なお、NV RAMは、バイトレベルのアクセス可能性を促進する。しかしながら、NV RAMは、従来のL1キャッシュメモリ、L2キャッシュメモリ、及び/又は、DRAMと比べると、ライフサイクルが比較的に短い。NV RAMに関連するメモリセルに対するライフサイクルは、セルが機能を停止する以前に、そのセルが行うことができるメモリ書き込みおよびオペレーションの数量を参照する。ここにおいて開示される方法、装置、システム、及び/又は、製品は、不揮発性RAMベースの持続性(persistent)コードキャッシュを使用する。電源オフの期間中にメモリコンテンツを維持し、従来のL1/L2キャッシュと同等なレイテンシ特性を示し、かつ、NV RAMキャッシュに関するライフサイクルの観点でメモリライフを延長するやり方で書き込みオペレーションを管理するものである。
【0012】
図1は、プロセッサプラットフォーム100の実施例の部分を示しており、プロセッサ102、RAM104、ストレージ106(例えば、ハードディスク)、キャッシュマネージャ108、および、キャッシュメモリシステム110を含んでいる。図1に示される実施例において、キャッシュメモリシステム110の例は、バス112を介してプロセッサ102と通信可能にに接続されているように示されているが、一方、キャッシュシステム110の例は、プロセッサ102の一部であってもよい。プロセッサダイ(die)に統合されている、といったものである。キャッシュメモリシステム110の実施例は、あらゆる数量のキャッシュデバイスを含んでよい。第1レベルのキャッシュ112(例えば、L1キャッシュ)、および、第2レベルのキャッシュ114(例えば、L2キャッシュ)といったものである。説明される実施例には、L1およびL2キャッシュが含まれており、L2キャッシュがNV RAMキャッシュである。図1のプラットフォーム100の実施例は、また、コンパイラ116を含んでおり、最適化されコンパイルされたコード120を生成するために、ストレージ106からオリジナルのコード部分118を取得する。図1のコンパイラの実施例は、ダイナミックコンパイラ(例えば、ジャストインタイム(JIT)コンパイラ)、または、バイナリトランスレータ、であってよい。
【0013】
オペレーションにおいて、プロセッサ102の例は、レイテンシを低減しようとして、キャッシュメモリシステム110を第1にアクセスすることによって一つまたはそれ以上のコード部分をリクエストする。リクエストされたコードが第1レベルのキャッシュ112において見い出された場合において、そのコードは、さらなる処理のために、第1レベルのキャッシュ112からプロセッサ102によって取得される。リクエストされたコードが第1レベルのキャッシュ112において見い出されなかった場合において、プロセッサ102は、存在するときには、階層的なキャッシュの一つまたはそれ以上の追加的なレベルを検索する。第2レベルのキャッシュ14の例といったものである。第2レベルのキャッシュ14の例の中で見い出された場合、プロセッサは、さらなる処理のために第2レベルのキャッシュからコードを取得する。リクエストされたコードが、キャッシュメモリシステム110のあらゆるレベルのキャッシュ(例えば、キャッシュレベル112、114)においても見い出されない(例えば、「キャッシュミス(”cache miss”)」が生じた)場合、プロセッサは、次に、ストレージ106の例に対してフェッチオペレーションを開始する。ストレージ(例えば、メインメモリ)116に対するフェッチオペレーションは、レイテンシ時間と関連している。キャッシュメモリシステム110の実施例に係るレベルに関するレイテンシ時間よりも、比較的に長い時間である。DRAMまたはキャッシュメモリお中に既に保管されていない場合に、ストレージ106から取得されたコンパイラの例116を介して、コンパイル、最適化、及び/又は、そうでなければ、コードの転換をすることによって追加のレイテンシが生じ得る。
【0014】
キャッシュミスに応じて、キャッシュマネージャ108の例は、プロセッサコードリクエストを分析して、リクエストされたコードが、コンパイラ116の例によってコンパイル、最適化、及び/又は、そうでなければ翻訳された後で、第2レベルのキャッシュ114の例の中に置かれるべきか否かを判断する。いくつかの実施例においては、最低使用頻度(LRU、least−recently used)エビクションポリシ(eviction policy)レベルが第1レベルのキャッシュ112の例と供に使用される。最も古く、及び/又は、そうでなければ最もアクセスが少ない、そこに保管されたデータが、プロセッサ102の例によってリクエストされた代替コードのためのスペースを割り当てるために、削除の候補として特定される。一方、第1レベルのキャッシュ112から立ち退かされたコードは、キャッシュ管理ポリシ(例えば、LRUポリシ)に準じたやり方で第2レベルのキャッシュ114の例に転送され、及び/又は、そうでなければ保管され得る。図1のキャッシュマネージャ108の例が、代わりに、コードに関する一つまたはそれ以上の条件を評価して、そのコードが第2レベルのキャッシュ114の例の中に保管されるべきか否か、もしくは、いずれかの現在のキャッシュポリシストレージアクションがブロックされ、及び/又は、そうでなければ上書きされるべきか否か、を判断する。いくつかの実施例において、キャッシュマネージャ108は、NV RAMに関する比較的に制限された書き込みサイクルの観点で、第2レベルのNV RAMキャッシュにコードを保管することを回避する。これは、従来の揮発性RAMデバイス(例えば、DRAM)に対する制限ではない。
【0015】
キャッシュマネージャ108の例による第2レベルのNV RAMキャッシュ114の例の中に保管するか又は保管を避けるかの判断に影響し得る条件は、これらに限定されるわけではないが、以下のものを含んでいる。(1)時間単位あたりに、プロセッサ102の例によってコードが呼び出される頻度(アクセス頻度)、(2)候補コードを翻訳し、コンパイルし、及び/又は、そうでなければ最適化するために、プラットフォームリソースによって費やされる時間量(例えば、プロセッササイクル)、(3)候補コードのサイズ、(4)候補コードがプロセッサによってアクセスされるのに用いる時間量(キャッシュアクセスレイテンシ)、及び/又は、(5)コードが電源投入アクティビティに関連するか否か(例えば、ブート関連コード)、である。いくつかの実施例において、図1のキャッシュマネージャ108は、一つまたはそれ以上の条件値を一つまたはそれ以上の閾値と比較して、候補コードを第2レベルのキャッシュ114に保管するか否かをか判断する。例えば、単位時間あたりにプロセッサ102がコードサンプルを呼び出す回数に関する第1の条件に応じて、キャッシュマネージャの例は、コードサンプルを第1レベルのキャッシュの中に保管するようにできる。しかし、コードサンプルが第2レベルのキャッシュの中に保管されることを防止する。一方、プロセッサ102がコードサンプルを呼び出す回数に関する第2の条件の例が、第1の条件の例より大きい(例えば、カウント閾値を超えている)場合には、キャッシュマネージャ108の例は、低減されたレイテンシを伴う将来の取得のために、コードサンプルがNV RAMキャッシュ114の中に保管されることを許可し得る。
【0016】
図2の実施例は、コードのブロックの例に関する5つの条件の例に対して、キャッシュマネージャ108によって生成されるコード条件スコアチャート200を示している。第1の条件の例はアクセス頻度スコア202を含んでおり、第2の条件の例は翻訳時間スコア204を含んでおり、第3の条件の例はコードサイズスコア206を含んでおり、第4の条件の例はアクセスタイムスコア208を含んでおり、そして、第5の条件の例はスタートアップスコア210を含んでいる。図2の実施例において示されたそれぞれのスコアは、プロセッサ102の例によってリクエストされ、及び/又は、コンパイラ116の例によってコンパイルされた、対応するコードをトラック(track)することにより生成される。いくつかの実施例において、それぞれの条件に対するスコアは、コンパイラ116の例によって決定、及び/又は、更新される。プラットフォーム100の例に関する一つまたはそれ以上のイテレーション(iteration)のプロファイリングの最中、及び/又は、プラットフォーム100の例の上で一つまたはそれ以上のプログラムを実行している最中である。図2は、コードサンプルの一つの例として5つの条件を示しているが、他のコードサンプルに対する他のチャートも同様に整備される。いくつかの実施例において、それぞれの条件タイプに対する閾値は、コードサンプルの選択にわたるといった、対応するコードサンプルに対する平均値に基づいている。
【0017】
図2のアクセス頻度スコア202の例は、候補コードサンプルがプロセッサによって呼び出される頻度を示している(例えば、単位時間あたりの呼び出し又はコールの回数)。候補コードサンプルが、プラットフォームに関する他のコードサンプル及び/又は実行しているプログラムと比べて比較的に頻繁に呼び出されている場合は、アクセス頻度スコア202の例は、比較的に高い値を示す。キャッシュマネージャ108の例は、候補コードサンプルの相対パフォーマンスの観点で閾値を確立し得る。一方、候補コードサンプルが比較的まれに呼び出される場合(例えば、プロセッサ102によって呼び出される他のコードと比較したとき)、アクセス頻度スコア202の例は低い値を示す。一般的に、チャート200の例におけるより高いスコア値は、候補コードサンプルを第2レベルのNV RAMキャッシュ114の中に保管するためのより大きな理由を反映している。一方、コードサンプルが比較的まれに呼び出される場合は、キャッシュマネージャ108の例は、書き込みオペレーションの回数を削減しようとして、候補コードサンプルがNV RAMキャッシュ114に書き込まれることを防止する。それによって、NV RAMキャッシュ114の使用可能な寿命を延長している。
【0018】
図2の翻訳時間スコア204の例は、対応するコードサンプルをコンパイル、及び/又は、そうでなければ翻訳するのにリソース(例えば、コンパイラ、トランスレータ、等)がどのくらい時間がかかるかの指標を反映している。候補コードサンプルをコンパイル、最適化、及び/又は、翻訳するのに比較的に長い時間量を要する場合、対応する翻訳時間スコア204は、より高い。一般的に、翻訳時間スコア204の例に対するより高い値は、候補コードサンプルがNV RAMキャッシュ114の中に保管されるべきことを示している。プロセッサ102の例による後続のコールの最中にコードサンプルを再度のコンパイル、再度の最適化、及び/又は、再度の翻訳をすることに関連する一つまたはそれ以上のレイテンシ効果を削減するためである。一方、候補コードサンプルが、他のコードサンプルと比較したとき、比較的迅速にコンパイル、最適化、及び/又は、翻訳される場合、キャッシュマネージャ108の例は、候補コードサンプルに対して比較的に低い翻訳時間スコア204を割り当てる。翻訳時間スコア204が対応する閾値より低い場合は、候補コードサンプルがNV RAMキャッシュ114に書き込まれることを防止する。再度のコンパイルのエフォートが望まないレイテンシをもたらすことがなさそうだからである。一つまたはそれ以上の閾値は、例えば、統計学的分析に基づいてもよい。いくつかの実施例においては、統計学的分析が、図2のチャート200の例といった、複数のコードサンプルおよび複数のチャートにわたり行われ得る。
【0019】
図2のコードサイズスコア206の例は、コンパイラ116の例によってコンパイルされた他のコードサンプル、及び/又は、プロセッサ102の例によって処理された他のコードサンプルと比べたときに、候補コードサンプルによって消費されるストレージスペースの相対量の指標を反映している。キャッシュマネージャ108の例は、NV RAMキャッシュ114の例のストレージスペースを保存しようとして、比較的に小さいサイズのコードサンプルに、より高いスコア値を割り当てる。アクセスタイムスコア208の例は、保管されたキャッシュがどのくらい迅速にアクセスされ得るかの指標を反映している。比較的迅速にアクセスされ得るコードサンプルは、キャッシュマネージャ108の例によって、アクセスするのにより長い時間がかかるコードサンプルと比べたときに、比較的より高いスコアを有するように割り当てられる。いくつかの実施例において、コードサンプルにアクセスするための時間量は、候補コードサンプルの対応するサイズに比例している。
【0020】
スタートアップスコア210の例は、候補コードサンプルが、ブートプロセスプログラムといった、スタートアップアクティビティと関連しているか否かの指標を反映している。いくつかの実施例において、スタートアップスコア210は、バイナリ値(はい/いいえ)であってよく、コードサンプルがスタートアップアクティビティに関与している状況についてより大きな重みが適用される。従って、以前に電源オフされた条件からブートするプラットフォームは、スタートアップタイムが改善され得る。対応するスタートアップコードが、ストレージ106から取得され、コンパイラ116の例によって処理、及び/又は、そうでなければコンパイルされるよりも、むしろ、NV RAMキャッシュ114の例からアクセスされたときに、そうである。
【0021】
図3の実施例は、候補コードサンプル間の相対的な差異を特定するために、キャッシュマネージャ108によって生成されたコードパフォーマンスチャート300の例を示している。図3のコードパフォーマンスチャート300の例は、サンプルA、B、C、および、Dを含んでおり、それぞれが対応する条件値を含んでいる。図3の条件値(メトリクス)の例は、これらに限定されるわけではないが、アクセス頻度条件302、翻訳時間条件304、コードサイズ条件306、アクセスタイム条件308、および、スタートアップ条件310、を含んでいる。それぞれの条件は、対応するコードサンプルについて対応する値を用いて設定されてよい。コンパイラ116及び/又はキャッシュマネージャ108の例に係る一つまたはそれ以上のプロファイルオペレーションによるものである。
【0022】
図3に示される実施例において、アクセス頻度条件302に関する値は、対応する候補コードサンプルがプロセッサ102によって呼び出されたインスタンスの回数を表しており、翻訳時間304に関する値は、対応する候補コードサンプルを翻訳、コンパイル、及び/又は、そうでなければ最適化するためにプロセッサ102によって費やされた時間またはプロセッササイクルを表している。加えて、コードサイズ条件306に関する値は、対応する候補コードサンプルのバイト値、アクセスタイム308に関する値は、対応する候補コードサンプルにアクセスするためにプロセッサ102によって費やされた時間またはプロセッササイクルを表しており、かつ、スタートアップ条件310に関する値は、対応する候補コードサンプルがプラットフォームの一つまたはそれ以上のアクティビティに参加しているか否かのバイナリ指標を表している。
【0023】
図4は、図1のキャッシュマネージャ108の実施例を模式的に示している。図4に示された実施例において、キャッシュマネージャ108は、プロセッサコールモニタ402、コード統計エンジン404、キャッシュインターフェイス406、条件閾値エンジン408、NV RAM優先度プロファイル410、および、警告モジュール412、を含んでいる。オペレーションにおいて、プロセッサコールモニタ402の例は、プロセッサ102の例がコードサンプルを呼び出そうと試みるか否かを判断する。プロセッサ102の例がコードサンプルに対するコールを行っていることの検出に応じて、コード統計エンジン404の例は、どのコードサンプルがコールされたかをログし、そうした更新統計値をストレージに保管する。図1のストレージ106の例、及び/又は、RAMといったものに対してである。示された実施例においては、コード統計エンジン404の例によって開拓、及び/又は、そうでなければトラックされた統計は以下のものを含んでいる。プロセッサ102の例によってコールされた所定のコードサンプル(例えば、ファンクション、サブルーチン、等)回数のカウント(例えば、コールカウント、単位時間あたりのコール、等)、所定のコードサンプルをコンパイルするために費やされたサイクル数量、所定のコードサンプルのサイズ、NV RAMキャッシュ114から所定のコードサンプルを取得するためのアクセスタイム、及び/又は、所定のコードサンプルがスタートアップアクティビティに参加しているか否か、である。
【0024】
キャッシュインターフェイス406の例は、プロセッサ102によってリクエストされたコードサンプルが第1レベルのキャッシュ112の中に置かれているか否かを判断し、そうである場合は、リクエストされたコードサンプルをプロセッサ102に対して転送する。一方、プロセッサ102によってリクエストされたコードサンプルが第1レベルのキャッシュ112の中に置かれていない場合、キャッシュインターフェイス406の例は、リクエストされたコードサンプルがNV RAMキャッシュ114の中に置かれているか否かを判断する。プロセッサ102によってリクエストされたコードサンプルがNV RAMキャッシュ114(第2レベルのキャッシュ)の中に置かれている場合、キャッシュインターフェイス406の例は、次に、リクエストされたコードサンプルをプロセッサ102に対して転送する。一方、プロセッサ102によってリクエストされたコードサンプルがNV RAMキャッシュ114の中に置かれていない場合、キャッシュマネージャ108の例が、将来のアクセスのためにリクエストされたコードサンプルがNV RAMキャッシュの中に置かれるべきか否かを判断するように進行する。
【0025】
将来のアクセスのためにリクエストされたコードサンプルがNV RAMキャッシュの中に置かれるべきか否かを評価するために、コード統計エンジン404の例は、以前にストレージ106の中に保管されているリクエストされたコードサンプルに関する統計にアクセスする。いくつかの実施例において、コード統計エンジン404は、プラットフォームがコールドブート(cold boot)から最後に電源投入されたとき以来取得されたコードサンプルのそれぞれに関連する統計を保持している。一方、プラットフォームの電源アプリケーションの以前に収集されたコード部分に係る統計は、消去、及び/又は、そうでなければ無視している。他の実施例において、コード統計エンジン404は、プラットフォームがそれぞれのコードサンプルを時間にわたり特性づけるようにオペレーションを開始して以来、コードサンプルのそれぞれに関連する統計を保持している。上述のように、それぞれのコード特性は、プロセッサ102の例によって処理、及び/又は、コンパイラ116の例によってコンパイルされたコード部分の相対的なパフォーマンスに基づいて、関連する閾値(個々の閾値)を有し得る。所与の候補コードサンプルについて、所定の条件に対する個々の閾値が超えられた場合に、キャッシュインターフェイス406の例は、次に、所与の候補コードサンプルをNV RAMキャッシュ114に追加する。
【0026】
いくつかの実施例においては、所与の候補コードサンプルについて閾値を超える個々の特性が無く、しかし、種々の条件タイプ(例えば、書き込み頻度カウント、翻訳時間、コードサイズ、アクセスタイム、等)に対する値の総計が、スコアの総計より大きい値に集計され得る。そうである場合、図4のキャッシュインターフェイス406の例は、候補コードをNV RAMキャッシュ114に追加する。それぞれの条件タイプについて個々の閾値を超えることが無く、かつ、2つまたはそれ以上の条件タイプの例について値の総計が、総計閾値を満足しないか、超えない場合、示された実施例に係るNV RAM優先度プロファイルマネージャ410は、候補コードサンプルがスタートアップタスクに関連するか否かを判断する。そうである場合、優先度プロファイルマネージャ410は、キャッシュインターフェイス406を呼び出して、NV RAMキャッシュ114に候補コードサンプルを追加する。プラットフォームが、電源サイクルの際に、より早くスタートアップするようにである。NV RAM優先度プロファイルマネージャ410の例は、以下のように構成され、及び/又は、そうでなければ仕立てられている。それぞれの条件タイプに対して個々の閾値を確立及び/又は調整し、2つまたはそれ以上の条件タイプに対して総計閾値を確立及び/又は調整し、及び/又は、一つまたはそれ以上のスタートアップタスクに関連する場合に、全て又はいくつかの候補コードをNV RAMキャッシュ114の中に保管するべきか否かを判断する、ようにである。
【0027】
いくつかの実施例において、キャッシュマネージャ108は、NV RAMキャッシュ114の有効寿命(useful life)をモニタする。例えば、いくつかのタイプのNV RAMは、書き込み回数10000回の寿命を有し、一方、他のタイプのNV RAMは、書き込み回数100000回の寿命を有する。現在及び/又は将来のタイプのNV RAMは、あらゆる他の書き込み回数の制限値を有し得るが、キャッシュマネージャ108の例は、有効寿命が近づいているか否かを判断するために、そうした書き込みサイクルをモニタし得る。一つまたはそれ以上の閾値は、例えば、一つまたはそれ以上のタイプのNV RAMに対する所定の有効寿命の予測に基づいて、調整され得る。いくつかの実施例において、NV RAMは、ユーザが保守可能であり、故障、ライフサイクル終了、及び/又は、アップデートアクティビティの場合に、NV RAMは置き換えられ得る。いくつかの実施例において、プロファイルマネージャ410は、NV RAMキャッシュ114に対して予測される寿命書き込み値を、現在の書き込みカウント値と比較する。予測される寿命書き込み値は、一つまたはそれ以上の製造者及び/又はNV RAMキャッシュのモデル間で、異なってもよい。現在のカウントが寿命カウント値に近い、及び/又は、超える場合、一つまたはそれ以上の警告が生成される。他の実施例において、図4のNV RAM優先度プロファイルマネージャ410は、書き込みサイクルの比率が、閾値を超えて増加するかを判断する。いずれの場合でも、警告モジュール412の例が呼び出され、一つまたはそれ以上のプラットフォーム警告が生成される。潜在的な故障がプラットフォームのオペレーションに影響する前に、ユーザ保守をなすようにである。
【0028】
プラットフォーム100の例を実行する実施例、及び/又は、不揮発性メモリの中にコードをキャッシュするキャッシュマネージャ108の例が、図1−4において説明されてきたが、図1−4に示された一つまたはそれ以上のエレメント、プロセス、及び/又は、デバイスは、結合され、分割され、再構成され、省略され、除去され、及び/又は、あらゆる他の方法で実施されてよい。さらに、図1−4に係るあらゆる又は全ての、キャッシュマネージャ108の例、第1のキャッシュ112の例、NV RAMキャッシュ114の例、プロセッサコールモニタ402の例、コード統計エンジン404の例、キャッシュインターフェイス406の例、条件閾値エンジン408の例、NV RAM優先度プロファイル410の例、及び/又は、警告モジュール412の例は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアのあらゆる組み合わせ、によって実施され得る。加えて、かつ、以下に説明されるように、図1−4に係るキャッシュマネージャ108の例、第1のキャッシュ112の例、NV RAMキャッシュ114の例、プロセッサコールモニタ402の例、コード統計エンジン404の例、キャッシュインターフェイス406の例、条件閾値エンジン408の例、NV RAM優先度プロファイル410の例、及び/又は、警告モジュール412の例は、ハードウェア、ソフトウェア、ファームウェア、及び/又は、ハードウェア、ソフトウェア及び/又はファームウェアのあらゆる組み合わせによって実施され得る。従って、例えば、図1−4に係るキャッシュマネージャ108の例、第1のキャッシュ112の例、NV RAMキャッシュ114の例、プロセッサコールモニタ402の例、コード統計エンジン404の例、キャッシュインターフェイス406の例、条件閾値エンジン408の例、NV RAM優先度プロファイル410の例、及び/又は、警告モジュール412の例のいずれかは、一つまたはそれ以上の回路、プログラム可能なプロセッサ、特定用途向け集積回路(ASIC)、プログラム可能ロジックデバイス(PLD)、及び/又は、フィールドでプログラム可能なロジックデバイス(FPLD)、等によって実施され得る。この特許のあらゆる装置クレームまたはシステムクレームが、純粋にソフトウェア及び/又はハードウェアの実施をカバーするように読み込まれる場合、図1−4に係るキャッシュマネージャ108の例、第1のキャッシュ112の例、NV RAMキャッシュ114の例、プロセッサコールモニタ402の例、コード統計エンジン404の例、キャッシュインターフェイス406の例、条件閾値エンジン408の例、NV RAM優先度プロファイル410の例、及び/又は、警告モジュール412の例のうち少なくとも一つは、ソフトウェア及び/又はファームウェアを保管している、メモリ、DVD、CD、ブルーレイ、等といった、有形のコンピュータで読取り可能なストレージ媒体を含むものと、ここにおいて明確に定義されてよい。さらに、なお、図1のプラットフォーム100の実施例および図4のキャッシュマネージャの例は、図1−4に示されたものに加えて、または代わりに、一つまたはそれ以上のエレメント、プロセス、及び/又は、デバイスを含んでよい。及び/又は、示されたエレメント、プロセス、および、デバイス、のうちあらゆる一つまたはそれ以上または全てを含んでよい。
【0029】
図5A図5Bおよび図6には、図1にプラットフォーム100および図1−4のキャッシュマネージャの例を実施するためのマシンで読取り可能なインストラクションの代表的な実施例に係るフローチャートが示されている。この実施例において、マシンで読取り可能なインストラクションは、以下に図7に関連して説明されるコンピュータ700の例において示されるプロセッサ712といったプロセッサによる実行のためのプログラムを含んでいる。プログラムは、有形のコンピュータで読取り可能なストレージ媒体上に保管されたソフトウェアにおいて具現化されてよい。CD−ROM、フロッピー(登録商標)ディスク、ハードドライブ、デジタル多用途ディスク(DVD)、ブルーレイディスク、または、プロセッサ712に関するメモリ、といったものである。しかし、プログラム全体及び/又は部分は、代替的にプロセッサ712以外のデバイスによって実行され、及び/又は、ファームウェアまたは専用ハードウェアにおいて具現化され得る。さらに、プログラムの実施例は図5A図5Bおよび図6に示されたフローチャートに関して説明されるが、プラットフォーム100の例および不揮発性メモリの中にコードをキャッシュするためのキャッシュマネージャ108の例を実施する他の多くの方法が代替的に使用されてよい。例えば、ブロックの実施順序は変更されてよく、及び/又は、説明されるブロックのいくつかは、変更、除去、または、結合されてよい。
【0030】
上述のように、図5A図5Bおよび図6に係るプロセスの実施例は、有形のコンピュータで読取り可能なストレージ媒体上に保管されたコード化されたインストラクション(例えば、コンピュータで読取り可能なインストラクション)を使用して実施され得る。媒体は、ハードディスク、フラッシュメモリ、読み出し専用メモリ(ROM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、キャッシュ、ランダムアクセスメモリ(RAM)、及び/又は、他のあらゆるストレージデバイス及び/又はストレージディスク、といったものである。ストレージデバイス及び/又はストレージディスクには、あらゆる持続時間(例えば、延長された時間期間、永久的、短いインスタンス、一時的なバッファリング、及び/又は、情報のキャッシュ)で情報が保管される。ここにおいて使用されるように、有形のコンピュータで読取り可能なストレージ媒体という用語は、あらゆるタイプのコンピュータで読取り可能なストレージデバイス及び/又はストレージディスクを含み、かつ、伝搬信号(propagating signal)を除くように明確に定義されている。追加的または代替的に、図5A図5Bおよび図6に係るプロセスの実施例は、固定のコンピュータで読取り可能なストレージ媒体上に保管されたコード化されたインストラクション(例えば、コンピュータで読取り可能なインストラクション)を使用して実施され得る。媒体は、ハードディスク、フラッシュメモリ、読み出し専用メモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び/又は、他のあらゆるストレージ媒体、といったものである。媒体には、あらゆる持続時間(例えば、延長された時間期間、永久的、短いインスタンス、一時的なバッファリング、及び/又は、情報のキャッシュ)で情報が保管される。ここにおいて使用されるように、固定のコンピュータで読取り可能なストレージ媒体という用語は、あらゆるタイプのコンピュータで読取り可能なストレージデバイス及び/又はストレージディスクを含み、かつ、伝搬信号(propagating signal)を除くように明確に定義されている。ここにおいて使用されるように、請求項のプリアンブルにおいてフレーズ「少なくとも一つの(”at least”)」が転換語として使用される場合は、用語「含む(”comprising”)」がオープンエンド(open−ended)であるのと同様にオープンエンドである。従って、プリアンブルにおいて転換語として「少なくとも一つの」を使用している請求項は、請求項の中で明確に列挙されたものに加えてエレメントを含んでよい。
【0031】
図5Aのプログラム500は、ブロック502で開始し、プロセッサ102の例がコードに対するコールを呼び出すか否かをプロセッサコールモニタ402の例が判断する。呼び出さない場合、プロセッサコールモニタ402の例はプロセッサコールを待つ。しかしながら、コールが生じた場合、コード統計エンジン404は、コードコールに関する統計をログする(ブロック504)。いくつかの実施例においては、プロセッサコールに係る一つまたはそれ以上の以前のイテレーション後まで、一つまたはそれ以上の統計が直ちに利用可能でなくてよい。上述のように、プラットフォーム100の例及び/又はプラットフォーム100上で実行されるコード部分の例を特性づけようとして、コードのそれぞれの候補部分に対する統計がモニタされ、保管される。コード統計は、候補コードがプロセッサ102によってリクエスト及び/又はそうでなければ呼び出される回数に限定されるものではないが、候補コードの翻訳、コンパイル、及び/又は、最適化によって費やされるプロセッササイクルの数または秒(例えば。ミリ秒)、コードのサイズ、及び/又は、キャッシュメモリから候補コードにアクセスするための時間(例えば、L1キャッシュ112のアクセスタイム、NV RAMキャッシュ114のアクセスタイム、等)を含んでよい。
【0032】
候補コードが第1レベルのキャッシュ112の中に置かれていると、キャッシュインターフェイス406の例が判断した場合(ブロック506)、候補コードは、次に、プロセッサ102の例に対して転送される(ブロック508)。候補コードが第1レベルのキャッシュ112の中に存在しない場合(ブロック506)、キャッシュインターフェイス406の例は、次に、候補コードが既にNV RAMキャッシュ114の中に存在するかを判断する。存在する場合、候補コードは、次に、プロセッサ102の例に対して転送され(ブロック508)、存在しない場合、キャッシュマネージャ108の例は、将来のアクセス可能性のために候補コードをNV RAMキャッシュ114の中に置くべきか否かを判断する。
【0033】
図5Bのプログラム512は、ブロック520で開始し、コード統計エンジン404の例が、図1のストレージ106の例といった、ディスク上に保管された候補コードに関するデータにアクセス、及び/又は、そうでなければデータをロードする。いくつかの実施例において、統計データは、ストレージ106の例からロードされ、レイテンシのアクセスタイムが削減するようにRAM104の中に保管される。条件閾値エンジン408の例は、プロセッサ102の例によってリクエストされた候補コードに関する統計を特定し、一つまたはそれ以上の個々の閾値が超えられているか否かを判断する(ブロック522)。上述のように、それぞれの条件は異なる閾値を有しており、超えた場合には、キャッシュインターフェイス406の例を呼び出して、候補コードをNV RAMキャッシュ114に追加する(ブロック524)。例えば、候補コードが比較的に高い頻度でアクセスされる場合(例えば、プロセッサ102の例によってリクエストされた他のコードと比較したとき)、対応するアクセスカウント値は、図2のアクセス頻度スコア202の例に関する閾値より高い。そうした環境の例においては、候補コードをNV RAMキャッシュに追加することが、より速いコードの実行を促進する。より長いレイテンシのディスクアクセスタイム及び/又は再度のコンパイルのエフォートを除去することによるものである。
【0034】
候補コードにより個々の条件閾値のどれも超えられない場合(ブロック522)、条件閾値エンジン408の例は、次に、総計スコア閾値が超えられたか否かを判断する(ブロック526)。超えられた場合、キャッシュインターフェイス406の例は、次に、候補コードをNV RAMキャッシュ114に追加する(ブロック524)。総計スコア閾値が超えられない場合(ブロック526)、NV RAM優先度プロファイルマネージャ410は、次に、候補コードが、ブートシーケンスコードといった、スタートアップタスクに関連しているか否かを判断する(ブロック528)。いくつかの実施例においては、候補コードがブートシーケンスに関連しているという指示により、キャッシュインターフェイス406が、候補コードをNV RAMキャッシュ114に追加する。再度のコンパイル、再度の最適化、及び/又は、再度の翻訳のエフォートを除去することによって、後続のスタートアップアクティビティがより速く動作するようにである。NV RAM優先度プロファイルマネージャ410の例は、興味のあるそれぞれのプラットフォームに関する一つまたはそれ以上のプロファイルを保管してよく、そうした候補コードがスタートアップタスクと関連している場合のNV RAMキャッシュに対する候補コードの自動的な追加に関するユーザコントロールのセッティングを促進する。個々の閾値がどれも超えられず(ブロック522)、かつ、総計スコア閾値が超えられない(ブロック526)場合に、キャッシュマネージャ108の例は、次に、一つまたはそれ以上のデフォルト(default)のキャッシュ最適化技術を採用する(ブロック530)。最低使用頻度(LRU)技術、デフォルトの再度のコンパイル、及び/又は、ストレージ106のアクセス、といったものである。
【0035】
いくつかの実施例において、キャッシュマネージャ108は、NV RAMキャッシュ114の例が有効寿命の書き込みサイクル値に近いか、または、超えているか否かを判断する。上述のように、NV RAMキャッシュ114は、DRAMと比較して有利なレイテンシ特性を示し、かつ、ディスクストレージ106に関する比較的に冗長なレイテンシのアクセスタイムを避けるように不揮発性である一方で、NV RAMキャッシュ114は、動作を停止する前の、制限されたキャッシュサイクル回数を有している。図6のプログラム600は、ブロック602で開始し、コード統計エンジン404の例が、NV RAM書き込みカウント値を取得する。NV RAM優先度プロファイルマネージャ410の例は、NV RAMキャッシュ114の書き込みカウントが寿命閾値を超えているか否かを判断する。超えている場合は、警告モジュール412の例を呼び出して、一つまたはそれ以上の警告を生成する(ブロック606)。警告モジュール412の例は、あらゆるタイプの警告を呼び出して、プラットフォームマネージャに、NV RAM キャッシュ 114が有効寿命の終わりに居るか、近づいていることを知らせる。システムが生成したメッセージ、及び/又は、プラットフォームの例のパワーオンリセットの最中に表示されるプロンプトメッセージといったものである。
【0036】
NV RAM優先度プロファイルマネージャ410が、NV RAMキャッシュ114は寿命閾値にないと判断した場合(ブロック604)、NV RAM優先度プロファイルマネージャ410の例は、次に、書き込みサイクル率が比率閾値より上であるか否かを判断する(ブロック608)。いくつかの実施例において、プラットフォーム100のオペレーションは、単位時間あたりの書き込みオペレーションの数量を加速させるやり方で変化し、比較的により短い時間期間の最中にNV RAMキャッシュ114の有効寿命を短くし得る。プラットフォームオペレーション及び/又は書き込みサイクル率におけるそうした変化は、警告モジュール412の例によって通信される(ブロック606)。プラットフォームマネージャが、プラットフォームコンポーネントの置き換えについて是正措置及び/又は計画が行えるようにである。図6のプログラム600の実施例は、書き込みカウント値が周期的、非周期的、及び/又は、手動ベースで更新され得るように、遅延(delay)を採用する(ブロック610)。
【0037】
図7は、図1のプラットフォーム100及び/又は図1−4のキャッシュマネージャ108を実施するために、図5A図5B、および図6に係るインストラクションを実行することができるプロセッサプラットフォーム700の実施例に係るブロックダイヤグラムである。プロセッサプラットフォーム700は、例えば、サーバー、パーソナルコンピュータ、インターネット装置、モバイルデバイス、または、あらゆる他のタイプのコンピューティングデバイス、であり得る。
【0038】
インスタント(instant)な実施例であるシステム700は、プロセッサ712を含んでいる。例えば、プロセッサ712は、あらゆる所望のファミリまたは製造者からの一つまたはそれ以上のマイクロプロセッサまたはコントローラによって実施例され得る。
【0039】
プロセッサ712は、ローカルメモリ713(例えば、キャッシュ、キャッシュ112、114といったもの)を含んでおり、バス718を介して、揮発性メモリ714および不揮発性メモリ716を含むメインメモリと通信している。揮発性メモリ714は、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUSダイナミックランダムアクセスメモリ(RDRAM)、及び/又は、あらゆる他のタイプのランダムアクセスメモリデバイスによって実施されてよい。不揮発性メモリ716は、フラッシュメモリ、及び/又は、あらゆる他の所望のタイプのメモリデバイスによって実施されてよい。メインメモリ714、716へのアクセスは、メモリコントローラによってコントロールされる。
【0040】
プロセッサプラットフォーム700は、また、インターフェイス回路720を含んでいる。インターフェイス回路720は、イーサネット(登録商標)(Ethenet)インターフェイス、ユニバーサルシリアルバス(USB)、及び/又は、PCIエクスプレスインターフェイスといった、あらゆるタイプのインターフェイス標準によって実施されてよい。
【0041】
一つまたはそれ以上の入力デバイス722は、インターフェイス回路720に接続されている。入力デバイス722により、ユーザは、データとコマンドをプロセッサ712の中に入れることができる。入力デバイスは、例えば、キーボード、マウス、タッチスクリーン、トラックパッド、トラックボール、イソポイント(isopoint)、及び/又は、音声認識システム、によって実施され得る。
【0042】
一つまたはそれ以上の出力デバイス724も、また、インターフェイス回路720に接続されている。出力デバイスは、例えば、ディスプレイデバイス(例えば、液晶ディスプレイ、カソッドレイチューブディスプレイ(CRT)、プリンタ、及び/又は、スピーカ)によって、実施され得る。インターフェイス回路720は、従って、典型的には、グラフィックドライバカードを含んでいる。
【0043】
インターフェイス回路720は、また、モデムまたはネットワークインターフェイスカードといった、通信デバイスも含んでおり、ネットワーク726(例えば、イーサネット接続、デジタル加入者線(DSL)、電話線、同軸ケーブル、携帯電話システム、等)を介して外部のコンピュータとのデータ交換を促進している。
【0044】
プロセッサプラットフォーム700は、また、ソフトウェアとデータを保管するために一つまたはそれ以上の大容量ストレージデバイス728も含んでいる。そうした大容量ストレージデバイスの実施例は、フロッピーディスクドライブ、ハードディスクドライブ、コンパンクトディスクドライブ、および、デジタル多用途ディスク(DVD)ドライブ、を含んでいる。
【0045】
図5A図5B、および図6のコード化されたインストラクション732は、大容量ストレージデバイス728の中、揮発性メモリ714の中、不揮発性メモリ716の中、及び/又は、CD又はDVDといった取り出し可能なストレージ媒体上に、保管されてよい。
【0046】
ここにおいて開示された不揮発性メモリの中にコードをキャッシュするための方法、装置、システム、および、製品は、ディスクストレージに対するプロセッサのフェッチオペレーションに関するレイテンシを低減することによって、プラットフォームのオペレーションを改善する。特に、プロセッサのディスクストレージフェッチオペレーションは、プラットフォームの電源リセットの後で比較的に頻繁に起こる。従来のキャッシュデバイスに保管された、以前にコンパイル、最適化、及び/又は、そうでなければ翻訳されたコードは、電源が取り除かれた場合、保持されないからである。加えて、ここにおいて開示された不揮発性メモリの中にコードをキャッシュするための方法、装置、システム、および、製品の実施例は、書き込みサイクル寿命が制限された回数である不揮発性ランダムアクセスメモリに対して書き込みを行う試みを賢明に管理する。
【0047】
方法、装置、システム、および、製品は、不揮発性メモリの中にコードをキャッシュするために開示されている。いくつかの開示された方法の実施例は、第1のコードに対するコードリクエストのインスタンスを特定するステップと、前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定するステップと、を含み、前記第1のコードが前記NV RAMキャッシュに居ない場合に、前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止する。開示された他の方法は、前記第1の条件が満たされない場合に、プロセッサによってコードリクエストが開始される。別の言葉で言えば、前記コードリクエストは、コンパイラまたはバイナリトランスレータプロセッサのうち少なくとも一つによって開始される。さらに開示された他の方法において、NV RAM キャッシュは、バイトレベルのアクセスを許可し、開示されたいくつかの方法において、第1の条件は、アクセス頻度カウントが閾値を超えること、を含む。そこでは、第2のコードのアクセス頻度カウント値に基づいて、前記アクセス頻度カウントに対する閾値を設定し、及び/又は、複数の他のコードに関するアクセス頻度カウント値に基づいて、前記アクセス頻度カウントに対する閾値を設定する。いくつかの実施例の方法では、第1の条件は、アクセス頻度カウント、翻訳時間、コードサイズ、または、キャッシュアクセスレイテンシ、のうち少なくとも一つを含む。他の実施例の方法では、第1のコードを前記NV RAMキャッシュに追加する前に、バイナリトランスレータを用いて前記第1のコードをコンパイルし、さらに他の実施例の方法では、第1のコードに対するプロセッサリクエストの回数をトラックし、そこでは、第1のコードに対する前記リクエストの回数に基づいて、前記第1のコードが前記NV RAMキャッシュに追加される。さらに他の方法の実施例では、NV RAMキャッシュに対する書き込みオペレーションの回数をトラックし、そこでは、NV RAMキャッシュに対する書き込みオペレーションの前記回数が、寿命の最大書き込み回数に関する書き込み閾値を超えるときに、警告を発生する。開示された実施例は、また、第1のコードが第1レベルのキャッシュに居ないときに、前記NV RAMキャッシュに対するストレージ試みを無視し、そこでは、NV RAMキャッシュに対する前記ストレージ試みは、最低使用頻度ストレージポリシに関連している。
【0048】
不揮発性メモリの中にコードをキャッシするための装置の実施例は、コンパイルされたコードを保管するための第1レベルのキャッシュと、コンパイルされたコードを保管するための第2レベルの不揮発性ランダムアクセスメモリ(NV RAM)キャッシュと、キャッシュインターフェイスであり、前記コンパイルされたコードが閾値より多い頻度でアクセスされる場合は、前記NV RAMに前記コンパイルされたコードを保管することを許可し、かつ、前記閾値の頻度が満たされない場合は、前記NV RAMに前記コンパイルされたコードを保管することをブロックする、キャッシュインターフェイスと、を含む。いくつかの開示された装置は、ダイナミックランダムアクセスメモリを有する第1レベルのキャッシュを含む。開示された装置の他の実施例は、NV RAMキャッシュについて期待される寿命の書き込みカウント値を、前記NV RAMキャッシュの書き込みカウントインスタンスの現在の回数と比較する、プロファイルマネージャと、を含む。さらに他の開示された装置は、NV RAMキャッシに対する書き込みカウントインスタンスの頻度を低減するために、第2の条件に関する閾値を設定する、条件閾値エンジンと、を含む。
【0049】
開示されたいくつかのマシンで読み取り可能なストレージ媒体の実施例は、インストラクションが実行されると、マシンは、少なくとも、第1のコードに対するコードリクエストのインスタンスを特定し、前記第1のコードが不揮発性ランダムアクセスメモリ(NV RAM)キャッシュ上に保管されるか否かを特定し、かつ、前記第1のコードが前記NV RAMキャッシュに居ない場合に、前記第1のコードに関する第1の条件が満たされるときは、前記第1のコードを前記NV RAMキャッシュに追加し、かつ、前記第1の条件が満たされないときは、前記第1のコードを前記NV RAMキャッシュに保管することを防止する。いくつかのマシンで読み取り可能なストレージ媒体の実施例は、第1の条件が満たされない場合に、前記第1の条件および第2の条件に対応する総計閾値が満たされるか否かを判断し、一方、他のものは、NV RAMキャッシュを介したバイトレベルのアクセスを許可する。他の開示されたマシンで読み取り可能なストレージ媒体は、インストラクションが実行されると、マシンが、第1の条件が、アクセス頻度カウント閾値をいつ超えたかを特定し、そこで、第2コードのアクセス頻度カウント値に基づいて、アクセス頻度カウントに対する閾値を設定する。さらに他の開示されたマシンで読み取り可能なストレージ媒体は、インストラクションが実行されると、マシンが、複数の他のコードに関するアクセス頻度カウント値に基づいて、アクセス頻度カウントに対する閾値を設定し、一方、他のものは、第1のコードに対するプロセッサリクエストの回数をトラックする。開示された他のマシンで読み取り可能なストレージ媒体は、インストラクションが実行されると、マシンが、第1のコードに対する前記リクエストの回数に基づいて、前記第1のコードを前記NV RAMキャッシュに追加する、そして、他のものは、NV RAMキャッシュに対する書き込みオペレーションの回数をトラックし、そこで、マシンは、NV RAMキャッシュに対する書き込みオペレーションの前記回数が、寿命の最大書き込み回数に関する書き込み閾値を超えるときに、警告を発生する。開示されたいくつかの他のマシンで読み取り可能なストレージ媒体は、インストラクションが実行されると、マシンが、第1のコードが第1レベルのキャッシュに居ないときに、前記NV RAMキャッシュに対するストレージ試みを無視する。
【0050】
ここにおいて所定の方法、装置、および、製品の実施例が説明されてきたが、本発明の範囲のカバレージは、これらに限定されるものではない。反対に、本発明に係る特許は、本特許出願の特許請求の範囲内に適正に留まる全ての方法、装置、および、製品をカバーするものである。
図1
図2
図3
図4
図5A
図5B
図6
図7