(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-01-25
(45)【発行日】2024-02-02
(54)【発明の名称】メモリ名前空間へデータをバインドするためのメモリシステム
(51)【国際特許分類】
G06F 12/06 20060101AFI20240126BHJP
G06F 12/02 20060101ALI20240126BHJP
G06F 12/1009 20160101ALI20240126BHJP
G06F 12/1027 20160101ALI20240126BHJP
【FI】
G06F12/06 515J
G06F12/02 570A
G06F12/1009
G06F12/1027
(21)【出願番号】P 2022517126
(86)(22)【出願日】2020-09-16
(86)【国際出願番号】 US2020051063
(87)【国際公開番号】W WO2021055469
(87)【国際公開日】2021-03-25
【審査請求日】2022-05-13
(32)【優先日】2019-09-17
(33)【優先権主張国・地域又は機関】US
【前置審査】
(73)【特許権者】
【識別番号】595168543
【氏名又は名称】マイクロン テクノロジー,インク.
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(72)【発明者】
【氏名】ブラッドショウ サムエル イー.
(72)【発明者】
【氏名】グナセカラン シヴァサンカル
(72)【発明者】
【氏名】ワン ホンギュ
(72)【発明者】
【氏名】エノ ジャスティン エム.
【審査官】北村 学
(56)【参考文献】
【文献】国際公開第2013/161073(WO,A1)
【文献】特開2008-077325(JP,A)
【文献】特開2016-115355(JP,A)
【文献】特開2018-018272(JP,A)
【文献】特開2006-099748(JP,A)
【文献】特開2017-027387(JP,A)
【文献】特開2019-057193(JP,A)
【文献】米国特許出願公開第2014/0207741(US,A1)
【文献】国際公開第2015/132873(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 3/06 - 3/08
G06F 12/00 - 12/06
G06F 12/08 - 12/128
(57)【特許請求の範囲】
【請求項1】
少なくとも1つの処理デバイスによって、異なるメモリタイプのメモリデバイス用の名前空間を作成することであって、前記名前空間が、第1のメモリタイプの第1のメモリデバイス用の第1の名前空間、及び第2のメモリタイプの第2のメモリデバイス用の第2の名前空間を含む、前記作成すること
と、
前記少なくとも1つの処理デバイス上で実行されるオペレーティングシステムによって、メモリの割り当ての要求をアプリケーションから受信することであって、前記要求は、前記アプリケーションに関連付けられたデータが前記第1のメモリタイプの物理メモリに格納されることを指定する、前記受信すること
と、
前記要求を受信することに応答して、
前記オペレーティングシステムによって、前記アプリケーションに関連付けられた前記データを前記第1の名前空間にバインドすること
と、
前記データを前記第1の名前空間にバインドすることに応答して、前記データを前記第1のメモリデバイスに格納すること
と、
を含
む方法。
【請求項2】
前記データを前記第1のメモリデバイスに格納することは、前記データを前記第2のメモリデバイスから前記第1のメモリデバイスに移動することを含む、請求項1に記載の方法。
【請求項3】
前記データを前記第1の名前空間にバインドすることは、前記第2の名前空間から前記第1の名前空間への前記データのバインドの変更を含む、請求項1に記載の方法。
【請求項4】
前記第1の名前空間は、前記要求に応答して、前記オペレーティングシステムによって作成される、請求項
1に記載の方法。
【請求項5】
前記名前空間を作成することは、それぞれの仮想アドレスを各名前空間に関連付けることを含む、請求項1に記載の方法。
【請求項6】
前記データを前記第1の名前空間にバインドすることは、前記第1の名前空間の仮想アドレスと前記第1のメモリデバイスの第1の物理アドレスとの間のマッピングを格納することを含む、請求項
5に記載の方法。
【請求項7】
前記第1の名前空間の前記仮想アドレスは、前記少なくとも1つの処理デバイスのアドレス空間の第1のアドレス範囲内にあり、前記マッピングを格納することは、前記第1のアドレス範囲を前記第1のメモリデバイスと関連付けるメタデータを格納することを含む、請求項
6に記載の方法。
【請求項8】
前記第1の名前空間の前記仮想アドレスは、ページテーブルを使用して
前記オペレーティングシステムによって管理されるプロセスの仮想ページに対応し、前記マッピングを格納することは、前記第1の物理アドレスに前記第1の名前空間の前記仮想アドレスをマップするページテーブルエントリを前記ページテーブルに生成することを含む、請求項
6に記載の方法。
【請求項9】
前記オペレーティングシステムによって
、メモリに、名前空間と前記名前空間にバインドされたデータのセットとの間の関連付けを格納することをさらに含む、請求項1に記載の方法。
【請求項10】
前記アプリケーションの優先度の増加を判定することをさらに含み、
前記データを前記第1の名前空間にバインドすることは、前記優先度の前記増加を判定することにさらに応答して実行され、前記データを前記第1の名前空間にバインドすることは、前記第2の名前空間から前記第1の名前空間へのバインドの変更を含み、前記第1のメモリデバイスの待ち時間は、前記第2のメモリデバイスの待ち時間よりも短い、請求項1に記載の方法。
【請求項11】
前記第1の名前空間を作成することは、前記第1の名前空間の識別情報を前記第1のメモリデバイスのメモリに格納することを含む、請求項1に記載の方法。
【請求項12】
第1のメモリタイプの第1のメモリデバイス
と、
少なくとも1つの処理デバイス
と、
メモリ
と、
を含むシステムであって、
前記メモリは、前記少なくとも1つの処理デバイスに、
アプリケーションによる要求
が、前記少なくとも1つの処理デバイス上で実行されるオペレーティングシステムによって受信されたことに応答して、
前記オペレーティングシステムによって、前記アプリケーションで使用するため
のメモリを名前空間か
ら割り当てることであって、前記名前空間は、物理アドレスが定義されている1つ以上の物理メモリデバイスへの論理的参照である、前記割り当てること
と、
前記名前空間を前記第1のメモリタイプにバインドすること
と、
前記名前空間を前記第1のメモリタイプにバインドすることに応答して、前記オペレーティングシステムによって、前記名前空間内の論理メモリアドレスを前記第1のメモリデバイスにマップするようにページテーブルを調整すること
と、
を命令するように構成された命令を含
む、前記システム。
【請求項13】
前記命令は、前記ページテーブルからのデータを使用して、前記名前空間の前記論理メモリアドレスに対応する前記第1のメモリデバイス内の第1の物理アドレスにあるデータにアクセスするように前記少なくとも1つの処理デバイスに命令するようにさらに構成される、請求項
12に記載のシステム。
【請求項14】
前記ページテーブルからの前記データは、トランスレーションルックアサイドバッファにてキャッシュされ、メモリ管理ユニットが、前記トランスレーションルックアサイドバッファにアクセスして、前記論理メモリアドレスを前記第1の物理アドレスに変換する、請求項
13に記載のシステム。
【請求項15】
第2のメモリタイプの第2のメモリデバイスをさらに備え、前記命令が、前記ページテーブルからのデータを使用して、
前記第2のメモリタイプの
前記第2のメモリデバイスから前記第1のメモリデバイスに前記データを移動することによって、前記第1のメモリデバイスにデータを格納するように前記少なくとも1つの処理デバイスに命令するようにさらに構成される、請求項
12に記載のシステム。
【請求項16】
少なくとも1つの処理デバイスで実行されるとき、前記少なくとも1つの処理デバイスに、少なくとも、
異なるメモリタイプのメモリデバイス用の名前空間を作成することであって、前記名前空間は、第1のメモリタイプの第1のメモリデバイス用の第1の名前空間と、第2のメモリタイプの第2のメモリデバイス用の第2の名前空間を含む、前記作成すること
と、
前記少なくとも1つの処理デバイス上で実行されるオペレーティングシステムによって、メモリの割り当ての要求をアプリケーションから受信することであって、前記要求は、前記アプリケーションに関連付けられたデータが前記第1のメモリタイプの物理メモリに格納されることを指定する、前記受信すること
と、
前記要求を受信することに応答して、
前記オペレーティングシステムによって、前記アプリケーションに関連付けられた前記データを前記第1の名前空間にバインドすること
と、
を引き起こす命令を格納する、非一時的な機械可読記憶媒体。
【請求項17】
前記データを前記第1の名前空間にバインドすることは、前記第2の名前空間から前記第1の名前空間への前記データのバインドの変更を含む、請求項
16に記載の非一時的な機械可読記憶媒体。
【請求項18】
前記データを前記第1の名前空間にバインドすることは、前記第1の名前空間の仮想アドレス範囲と前記第1のメモリデバイスの第1の物理アドレスとの間のマッピングを格納することを含み、
前記マッピングを格納することは、前記仮想アドレス範囲を前記第1のメモリデバイスに関連付けるメタデータを格納することを含む、請求項
16に記載の非一時的な機械可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願]
本願は、2019年9月17日に出願された「MEMORY SYSTEM FOR BINDING DATA TO A MEMORY NAMESPACE」という名称の米国特許出願第16/573,535号に対する優先権を主張するものであり、その米国特許出願の開示全体が参照により本明細書に組み込まれる。
【0002】
本明細書に開示される少なくともいくつかの実施形態は、概してメモリシステムに関し、より具体的には、名前空間へデータをバインドするためのメモリシステムに関連するが、これらに限定されない。
【背景技術】
【0003】
コンピュータシステムのメインメモリにデータを格納するために、様々なタイプのメモリデバイスを使用できる。揮発性メモリデバイスの1つのタイプは、ダイナミックランダムアクセスメモリ(DRAM)デバイスである。様々なタイプの不揮発性メモリデバイスには、NANDフラッシュメモリデバイスまたは不揮発性ランダムアクセスメモリ(NVRAM)デバイスが含まれる。
【0004】
オペレーティングシステムでは、メモリ管理はコンピュータシステムのメインメモリを管理することを担う。メモリ管理は、メインメモリ内のメモリの場所のステータス(例えば、割り当て済みまたは空きのいずれかのメモリステータス)を追跡する。メモリ管理はさらに、オペレーティングシステムで実行されている様々なプロセス間のメモリの割り当てを決定する。プロセスにメモリが割り当てられると、オペレーティングシステムがプロセスに割り当てられるメモリの場所を決定する。
【0005】
1つのアプローチでは、オペレーティングシステムはページ割り当てを使用して、メインメモリをページフレームと呼ばれる固定のサイズの単位に分割する。ソフトウェアプログラムの仮想アドレス空間は、同じサイズのページに分割される。ハードウェアメモリ管理ユニットは、ページを物理メモリ内のフレームにマップする。ページメモリ管理アプローチでは、各プロセスは通常、独自のアドレス空間で実行される。
【0006】
場合によっては、メモリ管理ユニット(MMU)はページングメモリ管理ユニット(PMMU)と呼ばれる。MMUは、オペレーティングシステムで使用されるすべてのメモリ参照を管理し、仮想メモリアドレスから物理アドレスへの変換を実行する。MMUは通常、プロセッサが使用するアドレスの範囲である仮想アドレス空間をページに分割する。
【0007】
一部のアプローチでは、MMUはページテーブルエントリを含むページテーブルを使用して、仮想ページ番号をメインメモリ内の物理ページ番号にマップする。場合によっては、仮想アドレスがマップされるときにメインメモリに格納されているページテーブルにアクセスする必要をなくすために、トランスレーションルックアサイドバッファ(TLB)と呼ばれるページテーブルエントリのキャッシュが使用される。仮想メモリを使用するとき、連続する範囲の仮想アドレスを、物理メモリのいくつかの連続しないブロックにマップできる。
【0008】
場合によっては、ページテーブルエントリにページの使用法に関する情報を含めることができる。様々な例には、データがページに書き込まれたかどうか、ページが最後に使用された日時、ページを読み書きできるプロセスのタイプ(例えば、ユーザモードまたはスーパーバイザーモード)、及びページをキャッシュする必要があるかどうかに関する情報が含まれる。
【0009】
1つのアプローチでは、TLBは連想メモリ(CAM)として実装される。検索キーは仮想アドレスであり、検索結果は物理アドレスである。要求されたアドレスがTLBにある場合、検索から取得された物理アドレスは、物理メモリデバイスへのアクセスに使用される。要求されたアドレスがTLBにない場合、ページテーブルはメインメモリでアクセスされる。
【0010】
場合によっては、仮想メモリ管理システムはプロセス識別子を使用して各ページをプロセスに関連付ける。プロセス識別子と仮想ページの関連付けは、ページアウトするページを選択するのに役立ち得る。例えば、プロセスのメインコードページがページアウトされている場合、そのプロセスに属する他のページがすぐに必要になる可能性は低くなる。
【0011】
より一般的には、コンピュータシステムは、1つまたは複数のメモリサブシステムを有することができる。メモリサブシステムは、デュアルインラインメモリモジュール(DIMM)、スモールアウトラインDIMM(SO-DIMM)、または不揮発性デュアルインラインメモリモジュール(NVDIMM)などのメモリモジュールであり得る。メモリサブシステムには、データを格納する1つ以上のメモリ構成要素を含めることができる。メモリ構成要素は、例えば、不揮発性メモリ構成要素及び揮発性メモリ構成要素であり得る。メモリ構成要素の例には、メモリ集積回路が含まれる。一部のメモリ集積回路は揮発性であり、格納されたデータを維持するために電力を必要とする。一部のメモリ集積回路は不揮発性であり、電源が入っていない場合でも格納されたデータを保持できる。不揮発性メモリの例には、フラッシュメモリ、読み取り専用メモリ(ROM)、プログラム可能読み取り専用メモリ(PROM)、消去可能プログラム可能読み取り専用メモリ(EPROM)、及び電子的消去可能プログラム可能読み取り専用メモリ(EEPROM)のメモリなどが含まれる。揮発性メモリの例には、ダイナミックランダムアクセスメモリ(DRAM)及び静的ランダムアクセスメモリ(SRAM)が含まれる。一般に、コンピュータシステムは、メモリサブシステムを利用して、メモリ構成要素にデータを格納し、メモリ構成要素からデータを取得することができる。
【0012】
例えば、コンピュータシステムは、コンピュータシステムに接続された1つまたは複数のメモリサブシステムを含むことができる。コンピュータシステムは、データ及び命令を格納及び/または検索するために、1つまたは複数のメモリサブシステムと通信する中央処理装置(CPU)を有することができる。コンピュータの命令には、オペレーティングシステム、デバイスドライバ、及びアプリケーションプログラムを含めることができる。オペレーティングシステムは、コンピュータ内のリソースを管理し、メモリ割り当てやリソースのタイムシェアリングなどのアプリケーションプログラムに共通のサービスを提供する。デバイスドライバは、コンピュータ内の特定のタイプのデバイスを操作または制御する。オペレーティングシステムは、デバイスドライバを使用して、デバイスのタイプによって提供されるリソース及び/またはサービスを提供する。コンピュータシステムの中央処理装置(CPU)は、オペレーティングシステムとデバイスドライバを実行して、アプリケーションプログラムにサービス及び/またはリソースを提供できる。中央処理装置(CPU)は、サービス及び/またはリソースを使用するアプリケーションプログラムを実行できる。例えば、あるタイプのアプリケーションを実装するアプリケーションプログラムは、中央処理装置(CPU)に、メモリサブシステムのメモリ構成要素にデータを格納し、メモリ構成要素からデータを取得するように命令できる。
【0013】
コンピュータシステムのオペレーティングシステムは、アプリケーションプログラムがメモリの仮想アドレスを使用して、コンピュータシステムの1つまたは複数のメモリサブシステムのメモリ構成要素にデータを格納し得、そこからデータを取得し得ることを可能にする。オペレーティングシステムは、仮想アドレスを、コンピュータシステムの中央処理装置(CPU)に接続された1つまたは複数のメモリサブシステムの物理アドレスにマップする。オペレーティングシステムは、仮想アドレスで指定されたメモリアクセスをメモリサブシステムの物理アドレスに変換する。
【0014】
仮想アドレス空間はページに分割できる。仮想メモリのページは、メモリサブシステム内の物理メモリのページにマップできる。オペレーティングシステムは、ページング技術を使用して、メモリモジュール内のメモリページを介してストレージデバイス内のメモリページにアクセスできる。異なる時点で、メモリモジュール内の同じ仮想メモリページをプロキシとして使用して、ストレージデバイスまたはコンピュータシステム内の別のストレージデバイス内の異なる物理ページのメモリにアクセスできる。
【0015】
コンピュータシステムには、仮想マシンを作成またはプロビジョニングするためのハイパーバイザ(または仮想マシンモニター)を含めることができる。仮想マシンは、コンピュータシステムで利用可能なリソースとサービスを使用して仮想的に実装されるコンピューティングデバイスである。ハイパーバイザは、仮想マシンの構成要素が専用の物理構成要素であるかのように、仮想マシンをオペレーティングシステムに提示する。ゲストオペレーティングシステムは仮想マシンで実行され、コンピュータシステムで実行されているホストオペレーティングシステムと同様に、仮想マシンで使用可能なリソースとサービスを管理する。ハイパーバイザを使用すると、複数の仮想マシンがコンピュータシステムのリソースを共有でき、仮想マシンがコンピュータ上で実質的に互いに独立して動作できるようになる。
【0016】
いくつかの実施形態を、添付の図面の図において、限定ではなく一例として例示する。同様の参照は、同様の要素を示している。
【図面の簡単な説明】
【0017】
【
図1】いくつかの実施形態による、メモリサブシステムを有する例示的なコンピュータシステムを示す。
【
図2】いくつかの実施形態による、メモリバスを使用してメモリモジュール内の異なるタイプのメモリにアクセスするモバイルデバイスを示す。
【
図3】いくつかの実施形態による、メモリサブシステムのメモリデバイスにアクセスするために使用されるメタデータを格納する例示的なコンピュータシステムを示す。
【
図4】いくつかの実施形態による、メモリモジュールの揮発性及び不揮発性メモリへのホストコンピュータシステムによるメモリバスアクセス用に構成されたメモリモジュールを示す。
【
図5】少なくともいくつかの実施形態による、メモリバスアクセスを使用してメモリモジュールにアクセスするホストオペレーティングシステムを示す。
【
図6】いくつかの実施形態による、アドレス空間内のプロセスの仮想アドレス範囲を、コンピュータシステム内のメモリデバイス用の物理アドレスに関連付ける格納されたメタデータに基づいて、コンピュータシステムのアドレス空間内のプロセスのメモリを管理する方法を示す。
【
図7】本開示の実施形態が動作することができる例示的なコンピュータシステムのブロック図である。
【
図8】いくつかの実施形態による、メモリバス上のメモリデバイスにアクセスするために1つまたは複数のページテーブルを使用する例示的なコンピュータシステムを示す。
【
図9】いくつかの実施形態による、ページテーブルエントリを有する例示的なページテーブルを示す。
【
図10】いくつかの実施形態による、仮想ページの仮想アドレスを異なるメモリタイプのメモリデバイス内の物理アドレスにマッピングするためのページテーブルエントリを生成するための方法を示す。
【
図11】いくつかの実施形態による、名前空間テーブルを使用して、名前空間をコンピュータシステム内の物理メモリの異なるメモリタイプにマッピングする例示的なコンピュータシステムを示す。
【
図12】いくつかの実施形態による、コンピュータシステムの異なるタイプのメモリに名前空間をマップするレコードを有する例示的な名前空間テーブルを示す。
【
図13】いくつかの実施形態による、異なるメモリタイプの物理メモリを有するメモリシステム内の名前空間にデータをバインドするための方法を示す。
【発明を実施するための形態】
【0018】
本明細書の少なくともいくつかの実施形態は、データが格納されているメモリシステムのメモリデバイスを識別するために格納されたメタデータにアクセスすることに関する。本明細書で論じられるような様々な実施形態では、メタデータは、様々なタイプのコンピュータシステムによって格納及びアクセスされ得る。一例では、コンピュータシステムは、システムオンチップ(SoC)デバイス上で実行されている1つまたは複数のプロセスによるメモリ使用量を管理するためのメタデータを格納するSoCデバイスである。一例では、モバイルデバイスは、SoCデバイスを使用して、モバイルデバイス上で実行されている1つまたは複数のアプリケーションのメインメモリの割り当てを管理する。
【0019】
他の実施形態は、仮想ページの仮想アドレスを、異なるメモリタイプのメモリデバイス内の物理アドレスにマッピングするページテーブルエントリに関する。これらの実施形態は、以下の「メモリタイプへのページテーブルフック」というタイトルのセクションで説明されている。
【0020】
さらに他の実施形態は、異なるメモリタイプの物理メモリを有するメモリシステム内の名前空間にデータをバインドすることに関する。これらの実施形態は、以下の「データを名前空間にバインドする」というタイトルのセクションで説明されている。
【0021】
以前のコンピュータシステムは、データを格納するために異なるタイプのメモリデバイスを使用することがよくある。通常使用されるメモリデバイスの1つのタイプはDRAMであり、これは一般に高速の読み取り及び書き込みアクセスを提供すると考えられている。DRAMは通常、コンピュータシステムのメインメモリにデータを格納するために使用される。
【0022】
フラッシュメモリなどの他のメモリデバイスは、通常、DRAMよりも低速であると見なされる。例えば、DRAMの読み取りまたは書き込みアクセス待ち時間は、通常、フラッシュメモリの読み取りまたは書き込みアクセス待ち時間よりも大幅に短くなる。特定の例として、一部のメモリデバイスの書き込みアクセス待ち時間は、DRAMデバイスの場合よりも数十倍または数百倍も大きくなる可能性がある。
【0023】
メインメモリにデータを格納するために異なるタイプの物理メモリデバイスを使用する以前のコンピュータシステムでは、様々なプロセスのメモリが実際にメモリデバイスにどのようにマッピングされるかをプロセッサが認識していないという技術的な問題が存在する。例えば、プロセッサは仮想アドレス範囲をプロセスに割り当てることができる。ただし、プロセッサは、仮想アドレス範囲が様々なメモリデバイスにどのようにマップされているかを認識していない。
【0024】
一例では、プロセスの仮想アドレス範囲が、他のメモリデバイス(例えば、DRAM)よりも大幅に遅い物理メモリデバイス(例えば、フラッシュメモリ)にマップされている場合、プロセスは、プロセスの実行を継続するために必要なメインメモリからデータに迅速にアクセスできないために、強制的に低速で実行される可能性がある。例えば、プロセスは、データ計算または他の処理を続行するためにメインメモリからの応答を必要とする場合がある(例えば、プロセスによる実行中に必要なデータを取得するためにプロセッサがメインメモリに対して行う読み取りアクセス要求のデータを含む応答)。メインメモリから必要なデータが実際に低速の物理メモリデバイスに格納されている場合、応答を待つ間、処理は大幅に遅れる。
【0025】
本開示の様々な実施形態は、上記の技術的問題の1つまたは複数に対する技術的解決策を提供する。いくつかの実施形態では、コンピュータシステムは、コンピュータシステムによって使用されるメモリデバイス(例えば、メインメモリを提供するために使用されるメモリデバイス)の待ち時間に関するデータを格納する。一例では、コンピュータシステムのプロセッサに見える様々なメモリ領域の待ち時間が知られている(例えば、以下で説明するように、格納されたメタデータに収集及び/または集約された情報によって表される)。
【0026】
いくつかの実施形態では、プロセッサ、オペレーティングシステム、及び/またはアプリケーション(ソフトウェア設計者によってプログラムされる)は、遅いメモリアクセスによる重大なプロセスの遅延を回避するために、コンピュータシステムによってアクションを開始及び/または実行することができる。例えば、高速メモリ応答を必要とする優先度の高いプロセスは、DRAMで実行するように構成できる。
【0027】
別の例では、モバイルデバイス上で実行されているアプリケーションの優先度を監視できる。アプリケーションの優先度が上がるときに(例えば、低から高に変わると)、プロセッサ及び/またはオペレーティングシステムは、低速メモリデバイスに対応するメインメモリのアドレス範囲からアプリケーションを自動的に転送し、アプリケーションを高速メモリデバイスに対応する新しいアドレス範囲に移動できる。
【0028】
一例では、メモリデバイスタイプには、DRAM、NVRAM、及びNANDフラッシュが含まれる。プロセスの優先順位は、プロセッサによって決定される(例えば、プロセスによる使用パターンに基づいて)。これらのメモリデバイスタイプへのアドレス範囲マッピングに関する格納されたメタデータに基づいて、プロセッサはプロセスを適切なメモリの待ち時間を有するアドレス範囲に割り当てる。例えば、プロセッサは、プロセスの優先度が低、中、高のいずれであるかを判断できる。プロセスが中の優先度を有すると判断することに基づいて、プロセスに関連するソフトウェア及び/またはデータは、中の待ち時間を有するNVRAMメモリデバイスタイプの物理ストレージに対応するアドレス範囲に格納される。
【0029】
一例では、NVRAMデバイスタイプは3D XPointメモリである。一例では、NVRAMデバイスタイプは、抵抗性ランダムアクセスメモリ、磁気抵抗性RAM、相変化RAM、及び/または強誘電体RAMであり得る。一例では、NVRAMチップは、コンピュータシステム(例えば、NVDIMM-P)のメインメモリとして使用される。一例では、NVRAMデバイスは、DIMMパッケージの不揮発性3D XPointメモリを使用して実装される。
【0030】
別の例では、プロセッサ及び/またはオペレーティングシステムが、優先順位の変更に応答してアプリケーションを異なるアドレス範囲に自動的に転送するように構成されていない場合、アプリケーションのソフトウェアコードは、それ自体、格納されたメタデータから1つ以上の値を読み取るように構成できる。読み取られた値に基づいて、アプリケーション自体がデータストレージを管理できるため、データはより高速なメモリデバイスに対応するアドレス範囲に優先的に保存される。一例では、アプリケーションは、格納されたメタデータへのアクセスを読み取るか、さもなければ提供されることに基づいて、コンピュータシステムで利用可能なメモリデバイスの相対的な待ち時間を決定することができる。一例では、格納されたメタデータは、どのデータが、異なる待ち時間を有する様々な異なるメモリデバイスのどのメモリデバイス上にあるかを指定する。このようにメモリデバイスを指定することにより、アプリケーションは、データの格納に使用されているメモリデバイスに応じて、特定のデータへのアクセスの待ち時間を決定できる。
【0031】
一例では、モバイルデバイス上のアプリケーションは、(例えば、システムオンチップデバイス上で実行する)オペレーティングシステムによるメインメモリの割り当てを要求するときに、格納されたメタデータを読み取る。一例では、アプリケーションは、特定のタイプのメモリデバイス及び/またはメモリの読み取りまたは書き込みアクセスに関連する特定の待ち時間に対応するメインメモリ内のアドレス範囲を要求する。
【0032】
一例では、アプリケーションは、格納されたメタデータを読み取るか、さもなければアクセスして、どのメモリが高速で、どのメモリが低速であるかを判断する。モバイルデバイスの第1のコンテキストでは、アプリケーションは高速メモリの割り当てを要求する。モバイルデバイスの第2のコンテキストでは、アプリケーションは低速メモリの割り当てを要求する。一例では、所定のコンテキストの検出に応答して、アプリケーションは、メモリの割り当ての変更を開始または要求する。一例では、アプリケーションは、(例えば、プロセッサによって)格納されたメタデータに対して行われた更新されたクエリ、及び/またはコンピュータシステムのプロセッサによってアプリケーションに提供されたデータ(例えば、モバイルデバイスの動作特性)に基づいて、コンテキストの変化を決定する。
【0033】
一実施形態では、コンピュータシステムは、第1のメモリデバイス(例えば、DRAM)及び第2のメモリデバイス(例えば、NVRAMまたはNANDフラッシュ)、及び1つまたは複数の処理デバイス(例えば、CPUまたはシステムオンチップ(SoC))を含む。コンピュータシステムはさらに、1つまたは複数の処理デバイスに、オペレーティングシステムによって維持されるアドレス空間のメモリにアクセスすることであって、アクセスすることがアドレス空間内のアドレスを使用した第1のメモリデバイスと第2のメモリデバイスへのアクセスを含む、アクセスすること、アドレス空間の第1のアドレス範囲を第1のメモリデバイスに関連付け、アドレス空間の第2のアドレス範囲を第2のメモリデバイスに関連付けるメタデータを格納すること、及び格納されたメタデータに基づいて、オペレーティングシステムによって、第1のプロセス及び第2のプロセスを含むプロセスを管理することであって、第1のプロセスのデータは第1のメモリデバイスに格納され、第2のプロセスのデータは第2のメモリデバイスに格納される、管理すること、を命令するように構成された命令を含む、メモリを含む。
【0034】
一実施形態では、コンピュータシステムは、DRAM、NVRAM、及びNANDフラッシュを含むメモリデバイスタイプを使用する。一例では、DRAMはNVRAMよりも高速であり、これはNANDフラッシュよりも高速である。コンピュータシステムは、仮想メモリアドレスを使用してコンピュータシステムのプロセッサが3つの異なるタイプのメモリすべてに直接アクセスできるように構成されている。一例では、プロセッサは、メモリ管理ユニットと通信して、仮想アドレスから物理アドレスへのマッピングシステムを実装する。
【0035】
一実施形態では、アプリケーションは、異なるタイプのメモリデバイスに基づくメモリ割り当ての最適化を管理または処理するように事前にプログラムされていないか、そうでなければ構成されていない。例えば、これはレガシーソフトウェアプログラムで発生する可能性がある。このタイプの状況では、アプリケーションのメモリ割り当ての最適化を管理するようにオペレーティングシステムを構成できる。
【0036】
一例では、オペレーティングシステムは、アプリケーションの1つまたは複数の特性を検出するか、さもなければ決定する。オペレーティングシステムは、特性に基づいて、格納されたメタデータを使用して、メインメモリ内の1つ以上のアドレス範囲をアプリケーションにアサインする。一例では、特性は、アプリケーション自体によって提供される情報に基づいて決定される(例えば、アプリケーションがモバイルデバイス上で起動されるとき)。別の例では、特性は、アプリケーションが実行されているコンピュータシステム以外のコンピューティングデバイスによって提供される。一例では、中央リポジトリを使用して、アプリケーションのデータベースまたは特性のテーブルを格納及び更新する。一例では、中央サーバは、使用する物理メモリのタイプに関してオペレーティングシステムにインディケーションを提供する。
【0037】
一実施形態では、オペレーティングシステムは、コンピュータシステム及び/またはアプリケーションの実行に関連するコンテキストを決定する。オペレーティングシステムは、コンテキストに基づいて、格納されたメタデータを使用して、メインメモリ内の1つ以上のアドレス範囲をアプリケーションにアサインする。
【0038】
一実施形態では、格納されたメタデータは、データが格納されているデバイスを識別するために使用される。メモリサブシステムには、メモリアドレス空間内のプロセッサ(例えば、SoC)でアドレス指定できる複数の物理メモリデバイス(例えば、DRAM、NVRAM、及びNANDフラッシュ)がある。メタデータは、どのメモリアドレス領域がどの物理メモリデバイスにマップされるかを指定するために使用される。メタデータをDRAM及び/またはプロセッサにロードして(例えば、プロセッサのキャッシュにロードして)、どのデータがどのデバイスにあるかを判断し、及び/またはそれぞれのデータへのアクセスの待ち時間を推定するために使用することができる。
【0039】
一実施形態では、アプリケーションは、メインメモリを使用するプロセッサを有するモバイルデバイス上で実行されている。アプリケーションは、モバイルデバイスのオペレーティングシステムがアプリケーションで使用するためにメインメモリの一部を割り当てることを要求する。割り当てられたメモリは、論理/仮想メモリ空間にある(例えば、プログラマとプロセッサの実行ユニットから見たメモリアドレスは仮想である)。一実施形態では、仮想メモリアドレスは、ページテーブルによって実際のメモリ/物理メモリにマッピングされる。ページテーブルのマッピングデータの一部は、プロセッサのバッファにキャッシュされる。一例では、バッファはトランスレーションルックアサイドバッファ(TLB)である。
【0040】
一実施形態では、コンピュータシステムは、DRAM、NVRAM、及びNANDフラッシュメモリデバイスを含む。コンピュータシステムのプロセッサは、アドレスによってメインメモリにランダムにアクセスする。メインメモリ内のアドレスは、これら3タイプのメモリデバイス上のデータストレージの物理的な場所に対応している。一例では、デバイスの各々は、同期メモリバスを使用してプロセッサによってアクセスされる。一例では、DRAMは、CPUとメモリコントローラハブとの間でデータを運ぶシステムバスと同期するインターフェイスを有する同期ダイナミックランダムアクセスメモリ(SDRAM)である。
【0041】
図1は、いくつかの実施形態による、メモリサブシステム110を有する例示的なコンピューティング環境100を示す。メモリサブシステム110は、メモリ構成要素109A~109Nなどの媒体を含むことができる。メモリ構成要素109A~109Nは、揮発性メモリ構成要素、不揮発性メモリ構成要素、またはそれらの組み合わせであり得る。いくつかの実施形態では、メモリサブシステム110はメモリモジュールである。メモリモジュールの例には、DIMMとNVDIMMが含まれる。いくつかの実施形態では、メモリサブシステム110は、ハイブリッドメモリ/ストレージサブシステムである。一般に、コンピューティング環境100は、メモリサブシステム110を使用するコンピュータシステム120を含むことができる。例えば、コンピュータシステム120は、メモリサブシステム110にデータを書き込み、メモリサブシステム110からデータを読み取ることができる。
【0042】
コンピュータシステム120は、コンピューティングデバイス、例えばモバイルデバイス、IoTデバイス、デスクトップコンピュータ、ラップトップコンピュータ、ネットワークサーバ、またはメモリ及び処理デバイスを含むそのようなコンピューティングデバイスであり得る。コンピュータシステム120は、メモリサブシステム110を含むか、またはそれに結合することができ、その結果、コンピュータシステム120は、メモリサブシステム110からデータを読み取る、またはメモリサブシステム110にデータを書き込むことができる。コンピュータシステム120は、物理ホストインターフェイスを介してメモリサブシステム110に結合することができる。本明細書で使用する場合、「結合する」とは、概して、構成要素間の接続を指し、これは、電気、光、磁気などの接続を含め、有線であろうと無線であろうと、間接的な通信接続または(例えば、介在する構成要素がない)直接的な通信接続であり得る。物理ホストインターフェイスの例には、シリアルアドバンストテクノロジーアタッチメント(SATA)インターフェイス、ペリフェラル構成要素インターコネクトエクスプレス(PCIe)インターフェイス、ユニバーサルシリアルバス(USB)インターフェイス、ファイバーチャネル、シリアル接続SCSI(SAS)、ダブルデータレート(DDR)メモリバスなどが含まれるが、これらに限定されない。物理ホストインターフェイスを使用して、コンピュータシステム120とメモリサブシステム110の間でデータを送信できる。コンピュータシステム120は、メモリサブシステム110がPCIeインターフェイスによってコンピュータシステム120と結合されているときに、NVM Express(NVMe)インターフェイスをさらに利用して、メモリ構成要素109A~109Nにアクセスすることができる。物理ホストインターフェイスは、メモリサブシステム110とコンピュータシステム120との間で制御、アドレス、データ、及び他の信号を渡すためのインターフェイスを提供することができる。
【0043】
図1は、例としてメモリサブシステム110を示している。一般に、コンピュータシステム120は、共有通信接続、複数の別個の通信接続、及び/または通信接続の組み合わせを介して、複数のメモリサブシステムにアクセスすることができる。一例では、各メモリサブシステム110は、メモリバスを介して処理デバイス118によってランダムにアクセスされる異なるタイプのメモリデバイスであり得る。
【0044】
コンピュータシステム120は、処理デバイス118及びコントローラ116を含む。処理デバイス118は、例えば、マイクロプロセッサ、中央処理装置(CPU)、プロセッサの処理コア、実行ユニットなどであり得る。場合によっては、コントローラ116は、メモリコントローラ、メモリ管理ユニット、及び/またはイニシエータと呼ばれることがある。一例では、コントローラ116は、コンピュータシステム120と1つまたは複数のメモリサブシステム110との間で結合されたバスを介した通信を制御する。
【0045】
一般に、コントローラ116は、メモリ構成要素109A~109Nへの所望のアクセスのために、コマンドまたは要求をメモリサブシステム110に送信することができる。コントローラ116は、メモリサブシステム110と通信するためのインターフェイス回路をさらに含むことができる。インターフェイス回路は、メモリサブシステム110から受信した応答をコンピュータシステム120のための情報に変換することができる。
【0046】
コンピュータシステム120のコントローラ116は、メモリサブシステム110のコントローラ115と通信して、メモリ構成要素109A~109Nでのデータの読み取り、データの書き込み、またはデータの消去などの動作及び他のそのような動作を実行することができる。場合によっては、コントローラ116は、処理デバイス118の同じパッケージ内に統合される。他の場合では、コントローラ116は、処理デバイス118のパッケージから分離されている。コントローラ116及び/または処理デバイス118は、ハードウェア、例えば1つまたは複数の集積回路及び/または個別の構成要素、バッファメモリ、キャッシュメモリ、またはそれらの組み合わせを含むことができる。コントローラ116及び/または処理デバイス118は、マイクロコントローラ、特殊目的の論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)など)、または別の適切なプロセッサであり得る。
【0047】
メモリ構成要素109A~109Nは、様々な異なるタイプの不揮発性メモリ構成要素及び/または揮発性メモリ構成要素の任意の組み合わせを含むことができる。不揮発性メモリ構成要素の例には、否定論理積(NAND)タイプのフラッシュメモリが含まれる。一例では、メモリ構成要素109A~109Nのそれぞれは、シングルレベルセル(SLC)またはマルチレベルセル(MLC)(例えば、トリプルレベルセル(TLC)またはクワッドレベルセル(QLC))などのメモリセルの1つまたは複数のアレイを含むことができる。いくつかの実施形態では、特定のメモリ構成要素は、メモリセルのSLC部分及びMLC部分の両方を含むことができる。メモリセルの各々は、コンピュータシステム120によって使用されるデータの1つまたは複数のビット(例えば、データブロック)を格納することができる。
【0048】
NANDタイプのフラッシュメモリなどの不揮発性メモリ構成要素は一例であるが、メモリ構成要素109A~109Nは、揮発性メモリなどの他の任意のタイプのメモリに基づくことができる。いくつかの実施形態では、メモリ構成要素109A~109Nは、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、同期ダイナミックランダムアクセスメモリ(SDRAM)、相変化メモリ(PCM)、磁気ランダムアクセスメモリ(MRAM)、スピン注入磁化反転(STT)MRAM、強誘電体トランジスタランダムアクセスメモリ(FeTRAM)、強誘電体RAM(FeRAM)、導電性ブリッジRAM(CBRAM)、抵抗性ランダムアクセスメモリ(RRAM)、酸化物ベースのRRAM(OxRAM)、否定論理和(NOR)フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、ナノワイヤベースの不揮発性メモリ、メモリスタテクノロジを組み込んだメモリ、及び不揮発性メモリセルの3D XPointアレイであり得るが、これらに限定されない。不揮発性メモリのクロスポイントアレイは、スタック可能なクロスグリッドデータアクセスアレイと組み合わせて、バルク抵抗の変化に基づいてビットストレージを実行できる。さらに、多くのフラッシュベースのメモリとは対照的に、クロスポイント不揮発性メモリは、不揮発性メモリセルを事前に消去せずに不揮発性メモリセルをプログラムできるインプレース書き込み操作を実行できる。さらに、メモリ構成要素109A~109Nのメモリセルは、データを格納するために使用されるメモリ構成要素のユニットを参照することができるメモリページまたはデータブロックとしてグループ化することができる。
【0049】
メモリサブシステム110のコントローラ115は、メモリ構成要素109A~109Nと通信して、メモリ構成要素109A~109Nでのデータの読み取り、データの書き込み、またはデータの消去などの操作及び他のそのような操作を実行できる(例えば、コントローラ116によってコマンドバスにスケジュールされたコマンドに応答して)。コントローラ115は、1つまたは複数の集積回路及び/または個別の構成要素、バッファメモリ、またはそれらの組み合わせなどのハードウェアを含むことができる。コントローラ115は、マイクロコントローラ、特殊目的の論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)など)、または別の適切なプロセッサであり得る。コントローラ115は、ローカルメモリ119に格納された命令を実行するように構成された処理デバイス117(プロセッサ)を含むことができる。図示の例では、コントローラ115のローカルメモリ119は、様々なプロセス、操作、論理フロー、及びメモリサブシステム110とコンピュータシステム120との間の通信の処理を含む、メモリサブシステム110の動作を制御するルーチンを実行するための命令を格納するように構成された埋め込みメモリを含む。いくつかの実施形態では、ローカルメモリ119は、メモリポインタ、フェッチされたデータを格納するメモリレジスタを含むことができる。ローカルメモリ119はまた、マイクロコードを記憶するための読み取り専用メモリ(ROM)を含むことができる。
図1の例示的なメモリサブシステム110は、コントローラ115を含むものとして示され、本開示の別の実施形態では、メモリサブシステム110は、コントローラ115を含まなくてもよく、代わりに、(例えば、外部ホストによって、またはメモリサブシステムとは別のプロセッサまたはコントローラによって提供される)外部制御に依拠し得る。
【0050】
一般に、コントローラ115は、コンピュータシステム120からコマンドまたは操作を受信することができ、コマンドまたは操作を命令または適切なコマンドに変換して、メモリ構成要素109A~109Nへの所望のアクセスを達成することができる。コントローラ115は、ウェアレベリング操作、ガベージコレクション操作、エラー検出及びエラー訂正コード(ECC)操作、暗号化操作、キャッシング操作、及び論理ブロックアドレスと物理ブロックアドレスとの間のアドレス変換などの他の操作を担うことができ、これらは、メモリ構成要素109A~109Nに関連付けられている。コントローラ115は、物理ホストインターフェイスを介してコンピュータシステム120と通信するためのホストインターフェイス回路をさらに含むことができる。ホストインターフェイス回路は、コンピュータシステムから受信したコマンドをコマンド命令に変換して、メモリ構成要素109A~109Nにアクセスし、また、メモリ構成要素109A~109Nに関連する応答をコンピュータシステム120の情報に変換することができる。
【0051】
メモリサブシステム110はまた、図示されていない追加の回路または構成要素を含むことができる。いくつかの実施形態では、メモリサブシステム110は、キャッシュまたはバッファ121(例えば、DRAMまたはSRAM)、及びコントローラ115からアドレスを受信し、メモリ構成要素109A~109Nにアクセスするためのアドレスを復号できるアドレス回路(例えば、行デコーダと列デコーダ)を含み得る。
【0052】
コンピューティング環境100は、データが格納されているメモリデバイスを識別するために使用されるメタデータを格納するコンピュータシステム120内のメタデータ構成要素113を含む(例えば、上記の様々な実施形態で論じられるように)。メタデータ構成要素113の一部は、コンピュータシステム120及び/またはメモリサブシステム110上に常駐することができる。一例では、メタデータの一部は、ローカルメモリ119及び/またはバッファ121に格納される。一例では、メタデータの一部は、代替的に及び/または追加的に、コントローラ116のキャッシュに格納される(例えば、トランスレーションルックアサイドバッファに格納される)。
【0053】
一例では、メモリサブシステム110は、DDRまたは他のタイプの同期メモリバスを介して、コンピュータシステム120が異なるタイプのメモリデバイス内のデータにアクセスすることを提供することができる。一実施形態では、DIMM上のNVRAM内のデータ及びDRAM内のデータへのアクセスが提供される。一例では、データは、DDRメモリバスを介して行われるホスト読み取り/書き込み要求中にアクセスするために、コンピュータシステム120のランダムアクセスメモリアドレス空間でアクセス可能にされる。
【0054】
一例では、コンピュータシステム120は、(ページへのアクセスのための)ページイン要求をコントローラ115に送信する。ページイン要求を受信することに応答して、コントローラ115は、不揮発性メモリデバイスなどの低速デバイスから揮発性メモリデバイス(例えば、メモリサブシステム110上のDRAM)にページを移動する。
【0055】
一例では、コンピュータシステム120は、ページアウト要求をコントローラ115に送信する。ページアウト要求を受信することに応答して、コントローラ115は、揮発性メモリ(例えば、メモリサブシステム110上のDRAM)からデータを、バッファ121を介して不揮発性メモリに移動する。
【0056】
いくつかの実施形態では、コンピュータシステム120内のコントローラ116及び/または処理デバイス118は、メタデータ構成要素113の少なくとも一部を含む。例えば、コントローラ116及び/または処理デバイス118は、メタデータ構成要素113を実装する論理回路を含むことができる。例えば、コンピュータシステム120の処理デバイス118(プロセッサ)は、本明細書で説明するように、どのデバイスにデータがメタデータ構成要素113用に格納されているかを識別する操作を実行するためにメモリに格納された命令を実行するように構成することができる。いくつかの実施形態では、メタデータ構成要素113は、コンピュータシステム120のオペレーティングシステム、デバイスドライバ、またはアプリケーション(例えば、コンピュータシステム120上で実行されるアプリケーション)の一部である。
【0057】
いくつかの実施形態では、メモリサブシステム110内のコントローラ115及び/または処理デバイス117は、メタデータ構成要素113の少なくとも一部を含む。例えば、コントローラ115及び/または処理デバイス117は、メタデータ構成要素113を実装する論理回路を含むことができる。
【0058】
一例では、中央処理装置(CPU)は、CPUに接続されたメモリシステム内のメモリにアクセスすることができる。例えば、中央処理装置(CPU)は、メタデータ構成要素113の格納されたメタデータへのクエリに基づいてメモリにアクセスするように構成することができる。
【0059】
図2は、いくつかの実施形態による、メモリバス203を使用してメモリモジュール205内の異なるタイプのメモリにアクセスするモバイルデバイス200を示す。
図2は、異なるタイプのメモリを有するコンピュータシステムを示している。
図2のコンピュータシステムは、モバイルデバイス200と、メモリバス203を介してモバイルデバイス200に接続されたメモリモジュール205とを含む。メモリモジュール205は、
図1に示されるメモリサブシステム110の例である。
【0060】
モバイルデバイス200は、中央処理装置または1つまたは複数の処理コアを備えたマイクロプロセッサであり得る処理デバイス118を含む。モバイルデバイス200は、キャッシュメモリ211を有することができる。キャッシュメモリ211の少なくとも一部は、任意選択で、処理デバイス118の同じ集積回路パッケージ内に統合することができる。
【0061】
図2に示されるメモリモジュール205は、複数のタイプのメモリがある(例えば、221と223)。例えば、タイプAのメモリ221(例えば、DRAM)は、タイプBのメモリ223(例えば、NVRAM)よりも高速である。例えば、メモリバス203は、ダブルデータレートバスであり得る。一般に、いくつかのメモリモジュール(例えば、205)をメモリバス203に結合することができる。
【0062】
処理デバイス118は、メタデータ構成要素113を使用してコンピュータシステム内のメモリの一部にアクセスするように、命令(例えば、オペレーティングシステム及び/または1つまたは複数のデバイスドライバ)を介して構成される。例えば、メモリモジュール205のタイプBのメモリ223(例えば、NVRAM)にアクセスすることができ、またはメモリモジュール205のタイプAのメモリ221(例えば、DRAM)にアクセスすることができる。一実施形態では、メモリモジュール205のタイプBのメモリ223は、メモリモジュール205のタイプAのメモリ221をアドレス指定することによってのみアクセス可能である。
【0063】
タイプAのメモリ221及びタイプBのメモリ223へのデータアクセスを管理するために、コントローラ227をメモリモジュール205に設けることができる。一実施形態では、コントローラ227は、バッファ121との間でデータを転送するときに、モバイルデバイス200及びメモリモジュール205によるDRAMまたはNVRAMへのアクセスを多重化する。一例では、メモリバス203は、モバイルデバイス200とメモリモジュール205との間のDDRインターフェイスとしてホストDDRチャネルを提供する。一例では、ページがNVRAMメモリからバッファ121に取り出されると、従来のDDR4スロット(例えば、ホストDDRチャネル)を介してモバイルデバイスがアクセスするためにページをロードすることができる。
【0064】
一般に、メモリサブシステム(例えば、205)は、メモリ(例えば、221、…、223)などの媒体を含むことができる。メモリ(例えば、221、…、223)は、揮発性メモリ、不揮発性メモリ(NVM)、及び/またはそれらの組み合わせを含むことができる。処理デバイス118は、各メモリサブシステム(例えば、メモリモジュール205)にデータを書き込み、メモリサブシステム(例えば、メモリモジュール205)から直接または間接的にデータを読み取ることができる。
【0065】
一実施形態では、メモリモジュール205は、バッファ121を使用することによって、不揮発性メモリまたは揮発性メモリへのメモリバスアクセスを提供する。一例では、メモリモジュール205は、DDRバスを介してモバイルデバイス200に結合されたDIMMである。記憶媒体は、例えば、クロスポイントメモリである。
【0066】
一実施形態では、モバイルデバイスは、読み取り/書き込み操作のために(例えば、DDR4バスを使用して)通信チャネルを介してメモリモジュールと通信する。モバイルデバイスは、メモリモジュールなどのコンピュータ周辺機器をコンピュータバス(例えば、シリアルAT接続(SATA)、周辺機器相互接続(PCI)、PCIeXtended(PCI-X)、PCIExpress(PCIe))、通信部分、及び/またはコンピュータネットワークなどの相互接続を介して接続できる1つまたは複数の中央処理装置(CPU)を持つことができる。
【0067】
一実施形態では、メモリモジュールを使用して、プロセッサのデータを不揮発性または揮発性の記憶媒体に記憶することができる。メモリモジュールは、通信チャネルを使用してモバイルデバイスとの通信を実装するホストインターフェイスを有する。一実施形態では、メモリモジュール205は、例えば、処理デバイス118からの通信に応答して動作を実行するためのファームウェアを実行するコントローラ227を有する。一例では、メモリモジュールは、揮発性ダイナミックランダムアクセスメモリ(DRAM)及びNVRAMを含む。DRAM及びNVRAMは、処理デバイス118によってアクセス可能なデータをメモリアドレス空間に格納する。
【0068】
図示のように、
図2のコンピュータシステムは、モバイルデバイスを実装するために使用される。処理デバイス118は、メモリサブシステム(例えば、205)からデータを読み取る、またはメモリサブシステムにデータを書き込むことができる。
【0069】
物理ホストインターフェイスを使用して、処理デバイス118とメモリサブシステム(例えば、205)との間でデータを送信することができる。物理ホストインターフェイスは、メモリサブシステム(例えば、205)と処理デバイス118との間で制御、アドレス、データ、及び他の信号を渡すためのインターフェイスを提供することができる。
【0070】
一般に、メモリサブシステム(例えば、メモリモジュール205)は、メモリ(例えば、221、…、223)を提供するメモリ集積回路などのメモリデバイスのセットを接続するプリント回路基板を含む。メモリサブシステム(例えば、205)上のメモリ(例えば、221、…、223)は、異なるタイプの不揮発性メモリデバイス及び/または揮発性メモリデバイスの任意の組み合わせを含むことができる。
【0071】
いくつかの実装形態では、メモリ(例えば、221、…、223)は、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリ(SRAM)、同期ダイナミックランダムアクセスメモリ(SDRAM)、相変化メモリ(PCM)、磁気ランダムアクセスメモリ(MRAM)、否定論理和(NOR)フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、及び/または不揮発性メモリセルのクロスポイントアレイを含むことができるが、これらに限定されない。
【0072】
メモリサブシステム(例えば、メモリモジュール205)は、処理デバイス118からの要求、コマンドまたは命令に応答して、メモリ(例えば、221、…、223)と通信し、メモリ(例えば、221、…、223)のデータの読み取り、データの書き込み、またはデータの消去などの操作及び他のそのような操作を実行するコントローラ(例えば、227)を有することができる。コントローラ(例えば、227)は、1つまたは複数の集積回路及び/または個別の構成要素、バッファメモリ、またはそれらの組み合わせなどのハードウェアを含むことができる。コントローラ(例えば、227)は、マイクロコントローラ、特殊目的の論理回路(例えば、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)など)、または別の適切なプロセッサであり得る。コントローラ(例えば、227)は、ローカルメモリに格納された命令を実行するように構成された1つまたは複数のプロセッサ(処理デバイス)を含むことができる。
【0073】
コントローラ(例えば、227)のローカルメモリは、メモリサブシステム(例えば、205)と処理デバイス118との間の通信の処理を含む、メモリサブシステム(例えば、205)の動作を制御する様々なプロセス、操作、論理フロー、及びルーチンを実行するための命令、及び以下でより詳細に説明される他の機能を格納するように構成された組み込みメモリを含むことができる。コントローラ(例えば、227)のローカルメモリは、マイクロコードを格納するための読み取り専用メモリ(ROM)及び/または、例えば、メモリポインタ、フェッチされたデータなどを格納するメモリレジスタを含むことができる。
【0074】
図2の例示的なメモリサブシステム205は、コントローラ227を含むものとして示され、本開示の別の実施形態では、メモリサブシステム(例えば、205)は、コントローラ(例えば、227)を含まなくてもよく、代わりに、(例えば、メモリサブシステム(例えば、205)とは別のプロセッサまたはコントローラによって提供される)外部制御に依拠し得る。
【0075】
一般に、コントローラ(例えば、227)は、通信チャネル(例えば、203)の標準通信プロトコルに従って、処理デバイス118からコマンド、要求、または命令を受信することができ、メモリ(例えば、221、…、223)への所望のアクセスを達成するために、標準プロトコルに準拠したコマンド、要求、または命令をメモリサブシステム(例えば、205)内の詳細な命令または適切なコマンドに変換することができる。例えば、コントローラ(例えば、227)は、メモリ(例えば、221、…、223)に関連付けられている論理アドレスと物理アドレスの間のアドレス変換などの操作を担う。コントローラ(例えば、227)は、物理ホストインターフェイスを介して処理デバイス118と通信するためのホストインターフェイス回路をさらに含むことができる。ホストインターフェイス回路は、処理デバイス118から受信したコマンドをコマンド命令に変換して、メモリデバイス(例えば、221、…、223)にアクセスし、また、メモリデバイス(例えば、221、…、223)に関連する応答を処理デバイス118のための情報に変換することができる。
【0076】
メモリサブシステム(例えば、205)はまた、図示されていない追加の回路または構成要素を含むことができる。いくつかの実施形態では、メモリサブシステム205は、キャッシュまたはバッファ(例えば、DRAM)、及びコントローラ(例えば、227)からアドレスを受信し、メモリ(例えば、221、…、223)にアクセスするためにアドレスを復号できるアドレス回路(例えば、行デコーダと列デコーダ)を含み得る。
【0077】
一例では、メモリバス203は、メモリサブシステム(例えば、205)に電力を供給し、及び/または所定のプロトコルを介してメモリサブシステム(例えば、205)と通信するための1つまたは複数のコネクタを有し、メモリサブシステム(例えば、205)は、処理デバイス118から電力、データ、及びコマンドを受信するための1つまたは複数のコネクタを有する。一例では、処理デバイス118は、1つまたは複数のオペレーティングシステムを実行して、コンピュータシステム内のメモリの一部(例えば、NVRAMに格納されたページ)が同期メモリアクセスを使用してアクセスされるメモリアクセスを含むサービスを提供することができる。
【0078】
図3は、いくつかの実施形態による、メモリサブシステム302のメモリデバイスにアクセスするために使用されるメタデータ320を格納する例示的なコンピュータシステム300を示す。メモリサブシステム302でアクセスされるメモリデバイスには、DRAM304、NVRAM306、及びNANDフラッシュ308が含まれる。一実施形態では、コンピュータシステム300は、代替的に及び/または追加的に、メモリデバイスにアクセスするために使用されるDRAM304にメタデータ322を格納する。
【0079】
一実施形態では、コンピュータシステム300の処理デバイス310は、アドレス空間内のメモリにアクセスする。一例では、メモリは、1つまたは複数のアプリケーションを実行するときに処理デバイス310によって使用されるメインメモリである。処理デバイス310は、アドレス空間内のアドレスを使用して異なるメモリデバイスにアクセスする。
【0080】
一実施形態では、メタデータ320、322は、アドレス空間の第1のアドレス範囲をメモリデバイス(例えば、DRAM304)に関連付け、アドレス空間の第2のアドレス範囲を、異なるメモリデバイス(例えば、NVRAM306またはNANDフラッシュ308)に関連付ける。一例では、DRAM304の待ち時間は、NVRAM306及びNANDフラッシュ308の待ち時間よりも短い。
【0081】
処理デバイス310上で実行されるアプリケーションは、メモリタイプ314を含むように構成されるアプリケーション312を含む。アプリケーション312が最初に起動されるとき、アプリケーション312は、コンピュータシステム300のメインメモリ内のメモリの割り当ての要求とともに、メモリタイプ314を処理デバイス310に提供する。
【0082】
メモリの割り当ての要求に応答して、処理デバイス310は、メタデータ320へのクエリを行い、及び/またはメタデータ322へのクエリを送信する。これらのクエリの一方または両方からの結果に基づいて、処理デバイス310は、アドレス空間内のアドレス範囲をアプリケーション312に割り当てる。
【0083】
一実施形態では、アプリケーション312は、メモリデバイスに関連する待ち時間のインディケーションを処理デバイス310に要求する。処理デバイス310は、メタデータ320、322にアクセスして結果を取得し、この結果に基づいて、アプリケーション312への待ち時間のインディケーションを提供する。アプリケーション312は、待ち時間のインディケーションを受信することに応答して、メモリデバイスの特定の1つに対応するメモリの割り当て、メモリタイプ314に対応するメモリデバイス、または少なくとも1つ以上の所定の閾値及び/または要件を満たす性能特性を有するメモリの割り当てを要求する。
【0084】
一実施形態では、メタデータ322は、仮想アドレス空間内のアドレス範囲をメモリサブシステム302のメモリデバイス内の物理アドレスに関連付けるデータを格納する。一例では、メタデータ322は、NVRAMの場合はアドレス範囲324を格納し、NANDフラッシュの場合はアドレス範囲326を格納する。一例では、アドレス範囲324は、処理デバイス310の仮想アドレスまたは論理アドレスをNVRAM306の物理アドレスにマッピングする。一例では、アドレス範囲326は、処理デバイス310の仮想アドレスまたは論理アドレスをNANDフラッシュ308の物理アドレスにマッピングする。一実施形態では、メタデータ320または322は、DRAM304に格納されたデータのために処理デバイス310のアドレスをマッピングする1つまたは複数のアドレス範囲を格納する。
【0085】
一実施形態では、メタデータ322は、コンピュータシステム300のメモリ管理ユニット316の物理アドレスへの仮想アドレスのマッピングを提供するページテーブル328の一部として格納される。処理デバイス310は、メモリ管理ユニット316に仮想アドレスを提供し、メモリ管理ユニット316は、トランスレーションルックアサイドバッファ318にアクセスして、メモリサブシステム302のメモリデバイスの1つで物理アドレスを取得する。
【0086】
一実施形態では、トランスレーションルックアサイドバッファ318は、ページテーブル328からのデータの一部を格納するキャッシュである。一例では、バッファ318は、メタデータ322の一部を格納する。一実施形態では、コンピュータシステム300に格納されたメタデータ320の一部は、メモリサブシステム302内のメモリデバイスにアクセスするときにメモリ管理ユニット316によるアクセスのためにトランスレーションルックアサイドバッファ318にコピーされる。
【0087】
一実施形態では、処理デバイス310は、異なるメモリデバイスのメモリ特性をアプリケーション312に提供する。アプリケーション312は、提供されたメモリ特性に基づいてメモリの割り当てを要求する。
【0088】
一実施形態では、処理デバイス310は、アプリケーション312から要求された待ち時間を受け取る。アドレス範囲は、要求された待ち時間に基づいてアプリケーション312に割り当てられる。
【0089】
一実施形態では、処理デバイス310は、アプリケーション312に関連する優先度を決定する。アプリケーション312に割り当てられるアドレス範囲は、決定された優先度に基づく。一例では、決定された優先度で使用するために、より高速なメモリデバイスタイプが選択される。処理デバイス310は、メタデータ320、322を使用して、選択されたより高速なメモリデバイスタイプのメモリデバイスにデータを物理的に格納するアドレス範囲を選択する。
【0090】
一実施形態では、処理デバイス310は、アプリケーション312の優先度の変更を決定する。一例では、アプリケーション312の優先度の増加に基づいて、処理デバイス310は、アドレス空間においてアプリケーション312に使用されるメモリ割り当てを変更する。一例では、優先度の増加に応答して、処理デバイス310は、メタデータ320、322にアクセスして、より高速な物理メモリデバイスに対応するアドレス範囲を決定する。
【0091】
一実施形態では、処理デバイス310は、アドレス空間におけるアプリケーション312によるデータアクセスに関連する特性を観察することに基づいて、アプリケーション312の優先度を決定する。観察された特性は、アプリケーション312のメモリ使用量を割り当てるために使用することができる。一実施形態では、処理デバイス310は、物理メモリデバイスに関連する1つまたは複数の待ち時間を決定する。メタデータ320、322は、決定された1つまたは複数の待ち時間に関するデータを格納し、これは、メインメモリの割り当てを最初に割り当て及び/または変更するときに処理デバイス310によって使用することができる。
【0092】
図4は、いくつかの実施形態による、ホストコンピュータシステム(図示せず)による揮発性メモリ402及び不揮発性メモリ404へのメモリバスアクセスのために構成されるメモリモジュール401を示す。メモリモジュール401は、メモリサブシステム302またはメモリモジュール205の例である。一例では、メモリモジュール401はハイブリッドDIMMである。揮発性メモリ402は、例えば、DRAMである。
【0093】
メモリモジュール401は、マルチプレクサ408を使用して、メモリコントローラ416による揮発性メモリ402及び不揮発性メモリ404へのアクセスを提供する。メモリコントローラ416は、ホストシステムによる読み取り/書き込みアクセスを処理するためにホストインターフェイス406に結合されている。一実施形態では、マルチプレクサ408は、ホストインターフェイス406を介してホストシステムから読み取りまたは書き込みコマンドを受信することに応答して、メモリコントローラ416から受信された信号に基づいて制御される。
【0094】
一例では、ホストシステムは、メモリモジュール401(例えば、DIMM)上のメモリ空間(例えば、DRAMメモリアドレス空間)にアクセスする。DIMMは、DRAMのチャネルとして自身をホストに公開する。一実施形態では、ホストシステムのハイパーバイザは、DIMM上のデータ移動を制御する。例えば、メモリブロックをDRAMアドレス空間に出し入れし、DRAMページをホスト上で実行されているソフトウェアに公開するように要求される。ソフトウェアは、例えば、仮想マシン(VM)で実行される。
【0095】
一例では、ドライバが現在DRAMまたはNVRAMにあるページを要求するために、ページイン/アウト制御パスが提供される。一例では、NVRAMはDRAMよりもはるかに大きな容量を有する。
【0096】
一例では、メモリモジュール401はDIMMとして実装される。不揮発性メモリ404は、3D XPointメモリパッケージによって提供される。一例では、3D XPointメモリから取得されたデータのページがバッファにコピーされ、バッファからコピーされる(ページイン/ページアウト)。
【0097】
一例では、ホストシステムは、通常のDDR4タイミングを使用して、任意のDRAMまたはNVRAMアドレスへの読み取り/書き込みアクセスを有する。例えば、ホストは、これらの時間帯にDDR4ルールごとに任意のトラフィックを生成できる。
【0098】
一例では、不揮発性メモリ404の完全なDDRアドレス空間がホストシステムに公開されている。様々な実施形態によれば、コンピュータシステム120のコントローラ(例えば、コントローラ116)は、従来のDRAMへのアクセスの場合と同じように(例えば、同じ読み取り/書き込み及びリフレッシュタイミングサイクル)動作することができる。
【0099】
図5は、少なくともいくつかの実施形態による、メモリバスを使用してメモリモジュール502にアクセスするホストオペレーティングシステム241を示している。メモリモジュール502は、バッファ410を含む。バッファ410は、バッファ121の例である。一例では、バッファ410は、メタデータ322及び/またはページテーブル328の少なくとも一部を格納する。コマンド及びデータは、ホストインターフェイス406を介してホストオペレーティングシステム241から受信される。一例では、ホストオペレーティングシステム241は、コンピュータシステム120または300上で実行される。
【0100】
一実施形態では、デバイスドライバ247(例えば、バックエンドドライバ)は、ハイパーバイザ245を介したメモリアクセスのために構成される。一例では、
図5のシステムは、
図1~
図3のコンピュータシステムに実装されている。
【0101】
一例では、ホストオペレーティングシステム241は、
図1または
図2のコンピュータシステムの処理デバイス118、または
図3の処理デバイス310上で動作する。ホストオペレーティングシステム241は、メモリモジュール205またはメモリサブシステム302などのメモリサブシステムのメモリ(例えば、221、…、223)を使用してメモリサービスを提供する1つまたは複数のデバイスドライバ(例えば、247)を含む。
【0102】
一実施形態では、バックエンドドライバ247は、マッピングテーブル246を維持する。例えば、ドライバ247は、DRAM304、NVRAM306、及びNANDフラッシュ308に格納されたデータのページのマッピングを含むようにマッピングテーブル246を維持する。
【0103】
一実施形態では、ホストオペレーティングシステム241は、仮想マシン249をプロビジョニングするハイパーバイザ245を含む。仮想マシン249は、
図1~
図3のコンピューティングシステムのハードウェアを使用してホストオペレーティングシステム241によって提供されるリソース及びサービスを介して実装される仮想ハードウェアを有する。例えば、ハイパーバイザ245は、メモリモジュール205などのメモリサブシステムのメモリの一部(例えば、221、…、223)を使用して、仮想マシン249の一部として仮想メモリをプロビジョニングすることができる。
【0104】
仮想マシン249は、ゲストオペレーティングシステム243が、オペレーティングシステム243が仮想マシンでのプロビジョニングと同じまたは類似のハードウェアのセットを有する物理コンピューティングマシン上で実行されているのと同じように、ゲストオペレーティングシステム243で実行されているアプリケーション(例えば、251、…、253)にリソース及び/またはサービスを提供することを可能にする。ハイパーバイザ245は、仮想マシンにプロビジョニングされた仮想ハードウェアと、ホストオペレーティングシステム241によって管理されるコンピューティングシステム内のハードウェアのサービスとの間のマッピングを管理する。
【0105】
デバイスドライバ248(例えば、フロントエンドドライバ)は、バックエンドドライバ247と通信する。ドライバ247及びドライバ248は、追加のDDR容量(例えば、DRAMまたはNVRAMの容量)が利用可能である場合、メモリバルーニングのために通信することができる。
【0106】
図5は、仮想マシン249がハイパーバイザ245によってプロビジョニングされる例を示している。一般に、ハイパーバイザ245は、同じゲストオペレーティングシステム243または異なるゲストオペレーティングシステムを実行できる複数の仮想マシン(例えば、249)をプロビジョニングすることができる。様々な仮想マシンを使用するために、様々なユーザ及び/またはアプリケーションプログラムのセットをアサインすることができる。
【0107】
場合によっては、ホストオペレーティングシステム241は、仮想マシンのプロビジョニングのためのサービスを提供することに特化されており、他のアプリケーションプログラムを実行しない。あるいは、ホストオペレーティングシステム241は、アプリケーション(例えば、251、…、253)などの他のアプリケーションプログラムをサポートするための追加のサービスを提供することができる。
【0108】
一実施形態では、デバイスドライバ247は、仮想マシン249によって使用するために、より遅いメモリ(例えば、NVRAM)からより速いメモリ(例えば、DRAM)へのページのページインを要求するように構成され得る。この要求は、アプリケーション(例えば、
図3のアプリケーション312)からの要求に応答して行われ得る。ページを要求した後、データのページを低速のメモリから高速のメモリにロード及び/または転送することにより、ページは高速のメモリで使用可能になる。一例では、処理デバイス310は、メタデータ320、322として格納されたアドレス範囲情報に基づいて、ページを低速メモリから高速メモリに移動する。一例では、低速メモリは、メモリモジュール401内の不揮発性メモリ404であり得、より高速なメモリは、同じメモリモジュール401内の揮発性メモリ402である。
【0109】
一実施形態では、(例えば、ホストオペレーティングシステム241によるページイン要求に応答して実行される)データの転送は、同じメモリモジュール401内などの同じメモリサブシステム内で実行され、メモリバス203などの処理デバイス118に接続された通信チャネルの輻輳を回避または低減する。例えば、データは、デバイスドライバ247からの1つまたは複数のコマンド、要求、及び/または命令に応答して、メモリモジュール205内のコントローラ227の制御下にて、メモリモジュール205内のより遅いメモリ223(例えば、NVRAMまたはNANDフラッシュ)からメモリモジュール205内のより速いメモリ221(例えば、DRAM)にコピーされ得る。
【0110】
一実施形態では、ハイパーバイザ245は、デバイスドライバ247に、メモリサブシステム(例えば、メモリモジュール205)内のメモリ(例えば、221、…、223)にアクセスするように要求するだけでなく、デバイスドライバ247に、使用するメモリ(例えば、221、…、223)内のページの管理に使用できる情報を提供する。一例では、提供される情報は、格納されたメタデータ320または322を含む。
【0111】
一例では、ドライバ247は、メモリモジュール502(例えば、DIMM)内のメモリアドレス空間にアクセスするために使用されるメモリモードドライバである。ドライバ247は、どのページがDIMMの揮発性メモリにあるかをいつでも制御できる。1つのアプローチでは、例えば、メモリアドレス空間はゲストオペレーティングシステム243に公開される。このハイパーバイザ環境では、ゲストオペレーティングシステム243は、DIMMの不揮発性メモリ(例えば、NVRAM及びDRAM)の全記憶容量を見る。
【0112】
一例では、DDR DRAM内にあるいくつかのページのみが、ホストオペレーティングシステム241を介してアクティブにページインされる。存在しないページへのゲストアクセスがある場合、ホストシステムのメモリ管理ユニット(MMU)のページフォールトパスは、ドライバ247をトリガーして、ページのロード(ページイン)を引き起こす。一例では、ページは制御レジスタを介してロードされる。ページが実際にDDR DRAMに存在すると、ドライバ247は(マッピングテーブル246を介して)MMUマッピングを設定できるため、ゲストアプリケーションはそのデータを直接読み書きできる。
【0113】
一例では、ゲストのフロントエンドドライバとホストのバックエンドドライバは、メモリアドレス空間へのアクセスに関して通信する。一例では、ページが古くなっていると判断する場合(例えば、所定の閾値に基づいて頻繁に使用されていない場合)、DDRメモリアドレス空間に現在マップされているデータの一部をNVRAMメモリ(例えば、SRAMバッファを介して)にプッシュバックして他のページをページインするためにDRAMメモリ内のスペースを利用可能にするように要求される。バックエンドドライバ247は、DDR DRAMからNVRAMメモリにデータを移動するためのページアウト要求を通信する。
【0114】
一実施形態では、バックエンドドライバ247は、メモリモードドライバとして動作する。ドライバ247がロードされるまで、メモリモジュール502のNVRAMメモリ容量にアクセスできない。メモリモードドライバとしてのこの動作中、ゲストオペレーティングシステム243はメモリを通常どおりに認識し、ドライバ247はページイン及びページアウト操作用にメモリモジュールにDRAMページを予約する。
【0115】
ドライバ247は、NVRAMメモリをゲストオペレーティングシステム243に公開し、(例えば、マッピングテーブル246において)ページマッピングを維持する。例えば、ドライバ247は、現在DRAMにあるページとNVRAMメモリにあるページの間のマッピングを維持する。
【0116】
一例では、ドライバ247は、現在DRAMに格納されている任意のページをマッピングするために、ホストシステムにメモリ管理ユニットマッピングテーブルを設定する。マップされたページの外部にアクセスしてページイン要求をトリガーする場合は、ゲストからのページフォールトパスを使用できる。ページアウト要求を実行して、DRAMのメモリ空間を維持することができる。
【0117】
一実施形態では、動作はメモリモードに限定されない。ドライバ247は、NVRAMメモリがブロックモードストレージとして公開されているブロックモードドライバとしても動作できる。
【0118】
一実施形態では、メモリモジュール502は、SRAMバッファ(図示せず)にあるページのリストを含むそれ自体のマッピングテーブルを維持する。これらにより、ホストシステムがこれらの特定のページ(複数可)にアクセスするまでの待ち時間を短縮できる。ドライバ247は、そのマッピングが設定されるまで、ページイン要求が完了するまでホストがそのページ(複数可)にアクセスしないことを保証する。
【0119】
一実施形態では、ドライバ247は、ページアウト操作を実施する。一例では、この操作はスレッドとしてトリガーされる。この操作は、空きページをDRAMメモリから交換し、有効なページのマッピングを変更する。
【0120】
図6は、いくつかの実施形態による、アドレス空間内のプロセスの仮想アドレス範囲をコンピュータシステム内のメモリデバイス用の物理アドレスに関連付ける格納されたメタデータに基づいて、コンピュータシステムのアドレス空間内のプロセスのメモリを管理する方法を示す。例えば、
図6の方法は、
図1~
図3のシステムに実装することができる。
【0121】
図6の方法は、ハードウェア(例えば、処理デバイス、回路、専用論理、プログラム可能な論理、マイクロコード、デバイスのハードウェア、集積回路など)、ソフトウェア(例えば、処理デバイスで実行される命令)、またはそれらの組み合わせを含むことができる処理論理によって実行することができる。いくつかの実施形態では、
図6の方法は、少なくとも部分的に、1つまたは複数の処理デバイス(例えば、
図3の処理デバイス310)によって実行される。
【0122】
特定のシーケンスまたは順序で示されているが、別段の指定がない限り、プロセスの順序は変更することができる。したがって、図示された実施形態は例としてのみ理解されるべきであり、図示されたプロセスは異なる順序で実行することができ、いくつかのプロセスは並行して実行することができる。さらに、様々な実施形態では、1つまたは複数のプロセスを省略することができる。したがって、すべての実施形態ですべてのプロセスが必要とされるわけではない。他のプロセスフローも可能である。
【0123】
ブロック601において、オペレーティングシステムは、アドレス空間にメモリを維持する。アドレス空間内のアドレスを使用して第1のメモリデバイス及び第2のメモリデバイスにアクセスすることを含めて、メモリにアクセスする。一例では、オペレーティングシステムは、
図3の処理デバイス310上で実行される。一例では、第1のメモリデバイスは、DRAM304であり、第2のメモリデバイスは、NVRAM306である。一例では、第1のメモリデバイスは、NVRAM306であり、第2のメモリデバイスは、NANDフラッシュ308である。
【0124】
ブロック603において、アドレス空間の第1のアドレス範囲を第1のメモリデバイスに関連付けるメタデータが格納される。メタデータは、アドレス空間の第2のアドレス範囲を第2のメモリデバイスにも関連付ける。一例では、格納されたメタデータは、
図3のメタデータ320及び/または322である。一例では、第1のアドレス範囲はアドレス範囲324であり、第2のアドレス範囲はアドレス範囲326である。
【0125】
ブロック605において、コンピュータシステムで実行されているプロセスは、格納されたメタデータに基づいて管理される。プロセスには、第1のプロセスと第2のプロセスが含まれる。第1のプロセスのデータは第1のメモリデバイスに格納され、第2のプロセスのデータは第2のメモリデバイスに格納される。一例では、第1のプロセスのデータは、アドレス範囲324に格納され、第2のプロセスのデータは、アドレス範囲326に格納される。一例では、第1のプロセスのデータは、メタデータ320、322のアドレス範囲に格納され、DRAM304の物理メモリストレージに対応する。一例では、コンピュータシステムは、コンピュータシステム120または300である。
【0126】
一実施形態では、方法は、コンピュータシステムの処理デバイス(例えば、
図3の処理デバイス310)によって、アドレス空間内のメモリにアクセスすることであって、コンピュータシステムのメモリデバイスは、アドレス空間のアドレスを使用する処理デバイスによりアクセスされる、アクセスすること、アドレス空間の第1のアドレス範囲を第1のメモリデバイス(例えば、DRAM304)に関連付け、アドレス空間の第2のアドレス範囲を第2のメモリデバイス(例えば、NVRAM306)に関連付けるメタデータ(例えば、メタデータ320及び/または322)を格納することであって、第1のメモリデバイスの第1の待ち時間は、第2のメモリデバイスの第2の待ち時間とは異なる、格納すること、及び格納されたメタデータに基づいて、コンピュータシステム上で実行されているアプリケーション(例えば、アプリケーション312)に第1のアドレス範囲を割り当てること、を含む。
【0127】
一実施形態では、第1のアドレス範囲をアプリケーションに割り当てることは、アプリケーションによる要求に応答して実行される。
【0128】
一実施形態では、方法は、アプリケーションによる第1の要求に応答して、第1の待ち時間が第2の待ち時間よりも大きいというインディケーションを提供すること、インディケーションに基づいてアプリケーションによって行われた第2の要求を受信すること、及び第2の要求の受信に応答して、第2のアドレス範囲をアプリケーションに割り当てること、をさらに含む。
【0129】
一実施形態では、第1の待ち時間は第2の待ち時間よりも短く、メタデータは第1のメモリデバイスに格納される。
【0130】
一実施形態では、コンピュータシステムは、メモリバスを使用して、第1のメモリデバイス及び第2のメモリデバイスにアクセスし、メタデータは、第2のメモリデバイスに格納される。
【0131】
一実施形態では、メタデータは、第1のメモリデバイスに格納され、方法は、メタデータの少なくとも一部をバッファ(例えば、トランスレーションルックアサイドバッファ318)にロードすることをさらに含み、処理デバイスは、バッファをクエリし、第1のアドレス範囲の仮想アドレスに対応する物理アドレスを決定する。
【0132】
一実施形態では、コンピュータシステムはシステムオンチップデバイスであり、バッファはトランスレーションルックアサイドバッファである。
【0133】
一実施形態では、方法は、アプリケーションに、第1のメモリデバイス及び第2のメモリデバイスのメモリ特性を提供することをさらに含み、第1のアドレス範囲をアプリケーションに割り当てることは、提供されたメモリ特性に基づいてアプリケーションによって行われた要求に応答することである。
【0134】
一実施形態では、方法は、アプリケーションから要求された待ち時間を受信することをさらに含み、第1のアドレス範囲をアプリケーションに割り当てることは、要求された待ち時間にさらに基づく。
【0135】
一実施形態では、方法は、アプリケーションに関連する優先度を決定することをさらに含み、第1のアドレス範囲をアプリケーションに割り当てることは、優先度にさらに基づく。
【0136】
一実施形態では、第1の待ち時間は第2の待ち時間よりも短く、第1のアドレス範囲をアプリケーションに割り当てる前に、アプリケーションは第2のアドレス範囲に割り当てられ、第1のアドレス範囲をアプリケーションに割り当てることは、アプリケーションに関連する優先度の増加を決定することに応答して実行される。
【0137】
一実施形態では、アプリケーションに関連する優先度の増加を決定することは、アドレス空間におけるアプリケーションによるデータアクセスに関する1つまたは複数の観察に基づく。
【0138】
一実施形態では、方法は、処理デバイスによって、メモリデバイスに関連する待ち時間を決定することをさらに含み、メタデータを格納することは、決定された待ち時間をさらに格納することを含む。
【0139】
一実施形態では、システムは、第1のメモリデバイス、第2のメモリデバイス、少なくとも1つの処理デバイス、並びに少なくとも1つの処理デバイスに、オペレーティングシステムによって維持されるアドレス空間のメモリにアクセスすることであって、アクセスすることがアドレス空間内のアドレスを使用した第1のメモリデバイスと第2のメモリデバイスへのアクセスを含む、アクセスすること、アドレス空間の第1のアドレス範囲を第1のメモリデバイスに関連付け、アドレス空間の第2のアドレス範囲を第2のメモリデバイスに関連付けるメタデータを格納すること、及び格納されたメタデータに基づいて、オペレーティングシステムによって、第1のプロセス及び第2のプロセスを含むプロセスを管理することであって、第1のプロセスのデータは第1のメモリデバイスに格納され、第2のプロセスのデータは第2のメモリデバイスに格納される、管理すること、を命令するように構成された命令を含むメモリ、を含む。
【0140】
一実施形態では、第1のプロセスは第1の優先度を有し、第2のプロセスは第2の優先度を有し、第1のメモリデバイスは、第1の優先度が第2の優先度よりも高いとの決定に応答して、第1のプロセスのデータを格納するように選択される。
【0141】
一実施形態では、第1のプロセスは、第1のアプリケーションに対応し、命令はさらに、データを格納するために使用するメモリのタイプを示す第1のアプリケーションからの要求を受信するように少なくとも1つの処理デバイスに命令するように構成され、第1のメモリデバイスは、示されたタイプのメモリに基づいて、第1のプロセスのデータを格納するために選択される。
【0142】
一実施形態では、システムは、メタデータを格納するためのバッファをさらに含み、オペレーティングシステムは、第1のプロセスから第1のアドレス範囲の仮想アドレスを受け取り、バッファにアクセスして、仮想アドレスに対応する第1のメモリデバイスの物理アドレスを決定する。
【0143】
一実施形態では、第1のメモリデバイスの読み取り待ち時間は、第2のメモリデバイスの読み取り待ち時間よりも短く、命令は、メタデータを第1のメモリデバイスに格納するように少なくとも1つの処理デバイスに指示するようにさらに構成される。
【0144】
一実施形態では、システムは、第1のプロセスのために格納されたデータにアクセスするときに、第1のアドレス範囲の仮想アドレスを第1のメモリデバイスの物理アドレスにマッピングするように構成されたメモリ管理ユニット(例えば、メモリ管理ユニット316)をさらに備える。
【0145】
一実施形態では、非一時的な機械可読(machine-readable)記憶媒体は、少なくとも1つの処理デバイスで実行されるとき、少なくとも1つの処理デバイスに、少なくとも、アドレスのメモリにアクセスすることであって、コンピュータシステムのメモリデバイスは、アドレス空間内のアドレスを使用して、少なくとも1つの処理デバイスによってアクセスされる、アクセスすること、アドレス空間の第1のアドレス範囲を第1のメモリデバイスに関連付け、アドレス空間の第2のアドレス範囲を第2のメモリデバイスに関連付けるメタデータを格納すること、コンピュータシステム上で実行されるアプリケーションに、第1のメモリデバイスの第1の待ち時間が第2のメモリデバイスの第2の待ち時間よりも小さいことを示す第1のデータを提供すること、アプリケーションに第1のデータを提供することに応答して、アプリケーションに関連する第2のデータが第1のメモリデバイスに格納されるという要求をアプリケーションから受信すること、第2のデータを保存するというアプリケーションからの要求に応答して、格納されたメタデータをクエリして結果を提供すること、及び結果に基づいて、第2のデータを第1のメモリデバイスに格納すること、を引き起こす命令を格納する。
【0146】
図7は、本開示の実施形態が動作することができる例示的なコンピュータシステムのブロック図である。
図7は、コンピュータシステム600の例示的なマシンを示しており、その中で、マシンに、本明細書で論じられる方法論のいずれか1つまたは複数を実行させるための命令のセットを実行することができる。いくつかの実施形態では、コンピュータシステム600は、メモリサブシステム(例えば、
図1のメモリサブシステム110)を含む、メモリサブシステムに結合される、またはメモリサブシステムを利用するホストシステム(例えば、
図1のコンピュータシステム120)に対応することができる、またはメタデータ構成要素113の動作を実行するために使用することができる(例えば、
図1~
図6を参照して説明したメタデータ構成要素113に対応する動作を実行するための命令を実行するため)。代替の実施形態では、マシンを、LAN、イントラネット、エキストラネット、及び/またはインターネット内の他のマシンに接続する(例えば、ネットワーク接続する)ことができる。マシンは、クライアントサーバネットワーク環境内のサーバまたはクライアントマシンの資格(capacity)で、ピアツーピア(または分散)ネットワーク環境内のピアマシンとして、またはクラウドコンピューティングインフラストラクチャまたは環境内のサーバまたはクライアントマシンとして動作することができる。
【0147】
マシンは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、パーソナルデジタルアシスタント(PDA)、携帯電話、ウェブアプライアンス、サーバ、ネットワークルータ、スイッチもしくはブリッジ、モノのインターネット(IOT)デバイス、またはそのマシンによって講じられるアクションを指定する命令のセットを(連続してまたは別の方法で)実行できる任意のマシンである場合がある。さらに、単一のマシンが例示されるが、用語「マシン(machine)」はまた、本明細書で考察される方法論のうちの任意の1つまたは複数の全てあるいは一部を実行するために、個々でまたは共同して命令のセット(または複数のセット)を実行するマシンの任意の集まりを含めるように利用されるべきである。
【0148】
例示的なコンピュータシステム600は、処理デバイス602、メインメモリ604(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ、ダイナミックランダムアクセスメモリ(DRAM)、例えば同期DRAM(SDRAM)またはラムバスDRAM(RDRAM)、静的ランダムアクセスメモリ(SRAM)など)、及びデータストレージシステム618を含んでおり、これらは、バス630(多重バスを含むことができる)を介して互いに通信する。
【0149】
処理デバイス602は、マイクロプロセッサ、中央処理装置などのような1つ以上の汎用処理デバイスを表すことができる。より詳細には、処理デバイスは、複合命令セットコンピューティング(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、または他の命令セットを実施するプロセッサ、または命令セットの組み合わせを実施するプロセッサとすることができる。処理デバイス602はまた、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、ネットワークプロセッサなどのような、1つ以上の専用処理デバイスとすることができる。処理デバイス602は、本明細書で論じられる動作及びステップを遂行するための命令626を実行するように構成することができる。コンピュータシステム600は、ネットワーク620を介して通信するためのネットワークインターフェイスデバイス608を、さらに含むことができる。
【0150】
データストレージシステム618は、本明細書で説明される方法論または機能のうちの任意の1つ以上を具体化する命令626またはソフトウェアの1つまたは複数のセットが記憶される機械可読記憶媒体624(コンピュータ可読媒体としても知られる)を含むことができる。命令626はまた、メインメモリ604内または処理デバイス602内に、コンピュータシステム600による当該処理デバイスの実行中に完全にまたは少なくとも部分的に常駐することができ、メインメモリ604及び/または処理デバイス602はまた、機械可読記憶媒体を構成する。機械可読記憶媒体624、データストレージシステム618、及び/またはメインメモリ604は、
図1のメモリサブシステム110に対応することができる。
【0151】
一実施形態では、命令626は、メタデータ構成要素113(例えば、
図1~
図6を参照して説明されたメタデータ構成要素113)に対応する機能を実装するための命令を含む。機械可読記憶媒体624は単一の媒体であるように一例の実施形態には示されているが、用語「機械可読記憶媒体」は、命令の1つまたは複数のセットを格納する単一の媒体または複数の媒体を含むように利用されるべきである。
【0152】
[メモリタイプへのページテーブルフック]
次に、仮想ページの仮想アドレスを異なるメモリタイプのメモリデバイス内の物理アドレスにマッピングするページテーブルエントリに関連する様々な実施形態を以下に説明する。以下の説明の一般性は、上記の様々な実施形態によって制限されない。
【0153】
データを格納するために異なるタイプの物理メモリデバイスを使用するコンピュータシステムの以前のメモリ管理ユニットでは、様々な仮想ページのメモリが異なるタイプのメモリデバイスに物理的にマッピングされる方法(例えば、仮想ページがDRAM対NVRAMまたはフラッシュメモリの物理アドレスにマップされているかどうか)をMMUが認識しないという技術的な問題が存在する。例えば、MMUは、各仮想ページが様々なタイプのメモリデバイスにどのようにマップされるかに関するデータを格納しない。さらに、メモリタイプの無知は1つの制限にすぎない。物理アドレスが異なれば、同種のメモリシステム(例えば、NUMAアーキテクチャ)でもアクセス特性(MMUは認識しない)に違いが生じる可能性がある。
【0154】
一例では、プロセスの仮想ページが、他のメモリデバイス(DRAMなど)よりも大幅に遅い物理メモリデバイス(フラッシュメモリなど)にマップされている場合、プロセスは、データに迅速にアクセスできないために強制的に低速で実行される可能性がある。例えば、プロセスを続行するために、メインメモリからの仮想ページが必要になる場合がある。必要な仮想ページが実際に低速の物理メモリデバイスに格納されている場合、仮想ページへのアクセスを待機している間、プロセスは大幅に遅れる。
【0155】
以下に説明する様々な実施形態は、上記の技術的問題の1つまたは複数に対する技術的解決策を提供する。一実施形態では、方法は、少なくとも1つの処理デバイス(例えば、CPU及び/またはMMU)によって、仮想ページを第1のメモリタイプと関連付けること、仮想ページの仮想アドレスを第1のメモリタイプの第1のメモリデバイス内の物理アドレスにマップするためのページテーブルエントリを生成すること、及び、ページテーブルエントリを使用して、第1のメモリデバイスの物理アドレスに仮想ページを格納することを含む。一例では、ページテーブルエントリは、メモリ管理ユニット及び/またはマイクロプロセッサのキャッシュにコピーされている。一例では、ページテーブルエントリは、中央処理装置のメインメモリに仮想ページを格納するときにメモリ管理ユニットによって使用されるトランスレーションルックアサイドバッファ(TLB)にコピーされている。
【0156】
一実施形態では、モバイルデバイスのオペレーティングシステムは、メモリタイプに関連付けられた仮想ページの位置を管理する。例えば、メモリタイプは、DRAM、NVRAM、またはNANDフラッシュである。仮想ページが特定のメモリタイプに関連付けられているとき、オペレーティングシステムは、仮想ページの論理アドレスを対応するメモリタイプにマップするためのページテーブルエントリを生成する。プロセッサは、メモリタイプを変更することにより、メモリページを別のタイプのメモリに転送するように要求できる。
【0157】
一例では、コンピューティングデバイス上で実行されるアプリケーションまたは他のソフトウェアは、アプリケーションまたは他のソフトウェアが処理に使用することを望むメモリタイプを識別する情報をオペレーティングシステムに提供した。それに応じて、オペレーティングシステムは、アプリケーションまたはソフトウェアの1つまたは複数の仮想ページを、アプリケーションまたはソフトウェアによって要求された識別されたメモリタイプに対応する物理メモリデバイスに関連付ける。例えば、アプリケーションからのNVRAMメモリタイプの要求に応答して、仮想ページがアプリケーションに割り当てられる。割り当てられた仮想ページに対応する物理アドレスは、NVRAMデバイス(例えば、クロスポイントメモリデバイス)にデータを格納するために使用される。
【0158】
図8は、いくつかの実施形態による、メモリバス812上のメモリデバイスにアクセスするために1つまたは複数のページテーブル804、806を使用する例示的なコンピュータシステム800を示す。メモリデバイスは、メモリサブシステム802のDRAM304、NVRAM306、及びNANDフラッシュ308を含むことができる。
【0159】
コンピュータシステム800は、
図3のコンピュータシステム300の例である。メモリサブシステム802は、
図3のメモリサブシステム302の例である。メモリバス812は、
図2のメモリバス203の例である。
【0160】
オペレーティングシステム808は、処理デバイス310上で実行される。オペレーティングシステム808は、処理デバイス310のメインメモリを様々なアプリケーションに割り当てる。これらのアプリケーションには、メモリタイプ314を有するアプリケーション312が含まれる。一例では、メモリタイプ314は、アプリケーション312のコードに埋め込まれている。一例では、メモリタイプ314は、異なるコンピューティングデバイス(図示せず)によって処理デバイス310に提供される。一例では、異なるコンピューティングデバイスは、メモリ割り当てのためのアプリケーション312による要求に関連してメモリタイプ314を提供するサーバである。
【0161】
オペレーティングシステム808は、メモリ管理ユニット(MMU)316を使用してコンピュータシステム800のメモリを管理する。一実施形態では、アプリケーション312を含むアプリケーションに関連付けられた仮想ページは、メモリサブシステム802に存在する物理メモリにマッピングされる。MMU316は、ページテーブルエントリにアクセスして、アプリケーションがアクセスする必要のある仮想ページに対応するメモリ内の物理アドレスを決定する。
【0162】
ページテーブルエントリは、ページテーブル804及び/またはページテーブル806に格納することができる。一例では、MMU316は、仮想ページに対応する仮想アドレスを提供することによって、ページテーブル804、806をクエリする。クエリの結果は、メモリデバイス(DRAM304など)の物理アドレスである。
【0163】
一実施形態では、ページテーブル804は、DRAM304に格納されている。一実施形態では、ページテーブル806は、コンピュータシステム800のメモリに格納される。一例では、ページテーブルエントリがコンピュータシステム800に存在しないとき、MMU316はページテーブル804にアクセスする。一例では、ページテーブルエントリは、ページテーブル804とページテーブル806との間で分割される。一例では、ページテーブル806のページテーブルエントリは、より高い優先度を有するプロセスに対応する。一例では、処理デバイス310は、アプリケーションに対応する処理デバイス310によって受信されたメモリタイプに基づいて、アプリケーションに対応するプロセスに優先度をアサインする。
【0164】
一実施形態では、MMU316は、メモリ管理のためにページテーブル804とメタデータ322の両方を使用する。一例では、MMU316は、メタデータ322を使用して、仮想ページに対応するデータを記憶するためのメモリデバイスを選択する。選択されたメモリデバイスは、要求されたメモリタイプ(例えば、メモリタイプ314)に対応することができる。一実施形態では、MMU316は、メモリ管理のためにページテーブル806とメタデータ320の両方を使用する。
【0165】
一実施形態では、ページテーブル804、806からのページテーブルエントリのいくつかは、トランスレーションルックアサイドバッファ(TLB)810にコピーされる。仮想アドレスを物理アドレスにマッピングするとき、MMU316は最初に仮想アドレスに対応するページテーブルエントリのためのTLB810をチェックする。TLB810のページテーブルエントリには、メタデータ320、322からコピーされたデータを含めることもできる。
【0166】
一実施形態では、アプリケーション312は、処理デバイス310によるメモリの割り当てを要求する。それに応答して、オペレーティングシステム808は、MMU316を使用してページテーブルエントリを生成し、アプリケーション312の仮想ページの仮想アドレスをメモリデバイス内の物理アドレスにマッピングする。メモリデバイスは、メモリタイプ314のものとして選択される。一実施形態では、メタデータ322は、メモリデバイスを選択するために使用される。一実施形態では、ページテーブルエントリを生成した後、ページテーブルエントリのコピーがTLB810に格納され、及び/またはメタデータ320、322が更新される。
【0167】
一実施形態では、処理デバイス310は、アプリケーション312に関連する変更を決定する。一例では、変更は、アプリケーション312によって実行される1つまたは複数の機能の優先度の変更である。一例では、変更は、セキュリティコンテキストなど、アプリケーション312に関連するコンテキストの変更である。
【0168】
変更を決定することに応答して、オペレーティングシステム808は、アプリケーション312の1つまたは複数の仮想ページを新しいメモリタイプに関連付ける。例えば、アプリケーション312のメモリタイプは、アプリケーション312のより高い優先度を決定することに応答して、NVRAMからDRAMに変更することができる。新しいメモリタイプへの変更に応答して、ページテーブルエントリが更新され、仮想ページの仮想アドレスが新しいメモリタイプの新しいメモリデバイスの物理アドレスにマップされる。次に、MMU316は、更新されたページテーブルエントリを使用して、現在使用されているメモリデバイスから新しいメモリデバイスに仮想ページを転送する。
【0169】
一実施形態では、コンピュータシステム800及び/または処理デバイス310は、システムオンチップ(SoC)である。一例では、SoCは、コンピューティングデバイスの任意の2つ以上の構成要素を統合する集積回路またはチップであるか、またはそれらを含むことができる。2つ以上の構成要素は、中央処理装置(CPU)、グラフィックス処理デバイス(GPU)、メモリ、入出力ポート、及びセカンダリストレージのうちの少なくとも1つまたは複数を含むことができる。例えば、SoCには、CPU、GPU、グラフィックス及びメモリインターフェイス、ハードディスク、USB接続、ランダムアクセスメモリ、読み取り専用メモリ、セカンダリストレージ、またはそれらの任意の組み合わせを単一の回路ダイに含めることができる。また、プロセッサチップがSoCである場合、SoCは少なくともCPU及び/またはGPUを含むことができる。
【0170】
SoCの一例では、2つ以上の構成要素を単一の基板またはマイクロチップ(チップ)に埋め込むことができる。一般に、SoCは、SoCがそのすべての構成要素を単一の集積回路に統合するという点で、従来のマザーボードベースのアーキテクチャとは異なるが、一方、マザーボードは取り外し可能または交換可能な構成要素を収納して接続する。2つ以上の構成要素が単一の基板またはチップに統合されているため、SoCは、同等の機能を備えたマルチチップ設計よりも消費電力が少なく、占有面積もはるかに少なくなる。いくつかの実施形態では、本明細書で説明するメモリシステムまたはサブシステムは、モバイルコンピューティングデバイス(スマートフォンなど)、組み込みシステム、及びモノのインターネット(IoT)デバイスのSoCに接続するか、またはその一部にすることができる。一実施形態では、メモリサブシステム802は、SoCであるか、またはSoCに含まれることができる。また、メモリサブシステム802がSoCである場合、SoCは、少なくともデータ処理ユニットを含むことができる。
【0171】
図9は、いくつかの実施形態による、ページテーブルエントリ902、904を有する例示的なページテーブル900を示す。各ページテーブルエントリ902、904は、仮想アドレス、対応する物理アドレス、及びメモリタイプを含む。一例では、メモリタイプはメモリタイプ314である。一例では、メモリタイプ314は、プロセスへのメインメモリの新しい割り当てまたは割り当ての変更に応答してページテーブルエントリを更新するために使用される。様々な実施形態では、各エントリ902、904は、プロセス識別子、使用状況データ、及び/またはメモリデバイス識別子をさらに含み得る。ページテーブル900は、ページテーブル804または806の例である。
【0172】
一実施形態では、各ページテーブルエントリについて、仮想アドレスは、アプリケーション312などのアプリケーションの仮想ページに対応する。物理アドレスは、メモリサブシステム802のメモリデバイス内の場所に対応する。メモリタイプは、物理アドレスのメモリデバイスのタイプに対応している。
【0173】
一実施形態では、各ページテーブルエントリのプロセス識別子は、仮想アドレスで仮想ページを使用している処理デバイス310上で実行されているプロセスを識別するために使用される。例えば、プロセス識別子は、コンピュータシステム800で実行されている各プロセスの一意の識別子である。
【0174】
一実施形態では、各ページテーブルエントリの使用状況データは、ページテーブルエントリの仮想アドレスで仮想ページに格納されたデータに関連するアクセスまたは他の使用法に関するデータに対応することができる。一例では、使用状況データは、仮想ページの使用パターンに関連している。一例では、使用パターンは、仮想ページ内のデータへのアクセスの頻度である。一例では、アクセスの頻度は、読み取り及び/または書き込みアクセスのためであり得る。一例では、使用状況データは、仮想ページ内のデータの最後の使用時間に関連している。
【0175】
一実施形態では、各ページテーブルエントリは、メモリデバイス識別子を含むことができる。一例では、メモリデバイス識別子は、仮想アドレスに対応するデータが格納されている物理メモリデバイスを一意に識別する。一例では、メモリデバイス識別子は、DRAM304またはNVRAM306に一意に対応する。
【0176】
一実施形態では、各ページテーブルエントリは、メタデータ320及び/または322の少なくとも一部をさらに含むことができる。一例では、含まれるメタデータは、物理メモリデバイスのアドレス範囲である可能性がある。
【0177】
図10は、いくつかの実施形態による、仮想ページの仮想アドレスを異なるメモリタイプのメモリデバイス内の物理アドレスにマッピングするためのページテーブルエントリを生成するための方法を示す。例えば、
図10の方法は、
図8のシステム、または
図7のコンピュータシステム600に実装することができる。
【0178】
図10の方法は、ハードウェア(例えば、処理デバイス、回路、専用論理、プログラム可能な論理、マイクロコード、デバイスのハードウェア、集積回路など)、ソフトウェア(例えば、処理デバイスで実行される命令)、またはそれらの組み合わせを含むことができる処理論理によって実行することができる。いくつかの実施形態では、
図10の方法は、少なくとも部分的に、1つまたは複数の処理デバイス(例えば、
図8の処理デバイス310)によって実行される。
【0179】
特定のシーケンスまたは順序で示されているが、別段の指定がない限り、プロセスの順序は変更することができる。したがって、図示された実施形態は例としてのみ理解されるべきであり、図示されたプロセスは異なる順序で実行することができ、いくつかのプロセスは並行して実行することができる。さらに、様々な実施形態では、1つまたは複数のプロセスを省略することができる。したがって、すべての実施形態ですべてのプロセスが必要とされるわけではない。他のプロセスフローも可能である。
【0180】
ブロック1001において、仮想ページは、第1のメモリタイプに関連付けられている。一例では、第1のメモリタイプはDRAM、NVRAM、またはフラッシュメモリである。一例では、仮想ページはアプリケーション312に対応する。一例では、仮想ページは、処理デバイス310によって使用されるメインメモリの割り当ての要求に応答して、アプリケーション312に割り当てられたメモリに対応する。
【0181】
ブロック1003で、ページテーブルエントリが生成される。ページテーブルエントリは、仮想ページの仮想アドレスを、第1のメモリタイプのメモリデバイスの物理アドレスにマップする。一例では、ページテーブルエントリは、ページテーブル804または806に存在する。一例では、メモリデバイスは、DRAM304、NVRAM306、またはNANDフラッシュ308である。
【0182】
ブロック1005で、ページテーブルエントリを使用して、仮想ページはメモリデバイスの物理アドレスに格納される。一例では、メモリ管理ユニット316は、トランスレーションルックアサイドバッファ810にキャッシュされたページテーブルエントリを使用して仮想ページを格納する。
【0183】
一実施形態では、方法は、少なくとも1つの処理デバイス(例えば、処理デバイス310及び/またはメモリ管理ユニット316)によって、仮想ページを第1のメモリタイプと関連付けること、仮想ページの仮想アドレスを第1のメモリタイプの第1のメモリデバイス(例えば、DRAM304)内の物理アドレスにマップするためのページテーブルエントリ(例えば、ページテーブルエントリ902)を生成すること、及びページテーブルエントリを使用して、第1のメモリデバイスの物理アドレスに仮想ページを格納することを含む。
【0184】
一実施形態では、方法は、少なくとも1つの処理デバイスによって、仮想ページを第2のメモリタイプに関連付けること、ページテーブルエントリを更新して、仮想ページの仮想アドレスを、第2のメモリタイプの第2のメモリデバイス(例えば、NVRAM306)内の物理アドレスにマッピングすること、及び更新されたページテーブルエントリを使用して、仮想ページを第1のメモリデバイスから第2のメモリデバイスに転送することをさらに含む。
【0185】
一実施形態では、オペレーティングシステム(例えば、オペレーティングシステム808)は、少なくとも1つの処理デバイス上で実行され、ページテーブルエントリの生成は、仮想ページを第1のメモリタイプに関連付けることに応答して、オペレーティングシステムによって実行される。
【0186】
一実施形態では、仮想ページを第1のメモリタイプに関連付けることは、オペレーティングシステムによってアプリケーション(例えば、アプリケーション312)から受信された要求に応答して実行される。
【0187】
一実施形態では、第1のメモリタイプ(例えば、メモリタイプ314)は、アプリケーションからの要求とともに提供される。
【0188】
一実施形態では、方法は、コンピューティングデバイスのオペレーティングシステムによって、メモリデバイスに格納された仮想ページの物理的場所を管理することをさらに含み、メモリデバイスは、第1のメモリデバイス及び第2のメモリタイプの第2のメモリデバイスを含み、第1のメモリデバイスの待ち時間は、第2のメモリデバイスの待ち時間よりも短い。
【0189】
一実施形態では、待ち時間以外に、及び/または待ち時間に加えて、第1のメモリデバイスと第2のメモリデバイスとの間に差異が存在し得る。一例では、第1のメモリデバイスの電力及び/または性能特性は、第2のメモリデバイスとは異なり、これはより低い電力のメモリ及び/またはより耐久性のあるメモリを有する。異なるメモリデバイスまたはタイプまたはメモリの間のメモリ特性の違いの例には、性能、電力、耐久性、エラー率、及び/またはそれらの組み合わせが含まれ得る。場合によっては、例えば、これらの違いは同じメモリタイプのデバイス間に存在する可能性がある(例えば、プロセスのデータを格納するために使用される同じメモリタイプの異なるチップごとにエラー率が異なる)。
【0190】
一実施形態では、第1のメモリタイプはダイナミックランダムアクセスメモリであり、第2のメモリタイプは不揮発性ランダムアクセスメモリまたはフラッシュメモリである。
【0191】
一実施形態では、方法は、オペレーティングシステムによって、少なくとも1つの処理デバイス上で実行されているアプリケーションを監視すること、及び監視に基づいて、仮想ページの仮想アドレスを第2のメモリタイプの第2のメモリデバイス内の物理アドレスにマッピングするようにページテーブルエントリを更新することをさらに含む。
【0192】
一実施形態では、方法は、少なくとも1つの処理デバイスに関連する動作のコンテキストを決定すること、決定されたコンテキストに基づいて、第2のメモリタイプを選択すること、及び第2のメモリタイプを選択することに応答して、仮想ページの仮想アドレスを第2のメモリタイプの第2のメモリデバイス内の物理アドレスにマッピングするようにページテーブルエントリを更新することをさらに含む。
【0193】
一実施形態では、方法は、少なくとも1つの処理デバイスによって、仮想ページを第2のメモリタイプに関連付けること、仮想ページを第2のメモリタイプに関連付けることに応答して、トランスレーションルックアサイドバッファ(例えば、TLB810)内のマッピングデータを更新すること、及びトランスレーションルックアサイドバッファ内の更新されたマッピングデータへのアクセスに基づくメモリ管理ユニットによって、仮想ページを第1のメモリデバイスから第2のメモリデバイスに転送することをさらに含む。
【0194】
一実施形態では、プロセスは少なくとも1つの処理デバイス上で実行されており、ページテーブルエントリは、仮想ページを使用する第1のプロセスのプロセス識別子を含む。
【0195】
一実施形態では、ページテーブルエントリは、少なくとも1つの処理デバイス上で実行されている1つまたは複数のアプリケーションによる使用パターンに関するデータを含む。
【0196】
一実施形態では、使用パターンに関するデータは、使用頻度または最後の使用時間のうちの少なくとも1つである。
【0197】
一実施形態では、システムは、第1のメモリデバイス、異なるメモリタイプのメモリデバイスの物理アドレスに仮想アドレスをマップするページテーブルエントリを格納するページテーブルであって、メモリデバイスが第1のメモリデバイスを含む、ページテーブル、少なくとも1つの処理デバイス、並びに少なくとも1つの処理デバイスに、仮想ページの第1のメモリタイプへの関連付けを決定すること、第1のメモリデバイスが第1のメモリタイプに対応することを決定すること、及び仮想ページの仮想アドレスを第1のメモリデバイスの第1の物理アドレスにマップするためのページテーブルエントリを生成すること、を命令するように構成された命令を含むメモリ、を含む。
【0198】
一実施形態では、少なくとも1つの処理デバイスは、メモリデバイスに格納されたデータを有するメインメモリを使用し、仮想ページの第1のメモリタイプへの関連付けを決定することは、メインメモリの割り当てのアプリケーションによる要求に応答して実行される。
【0199】
一実施形態では、命令は、少なくとも1つの処理デバイスに、メインメモリ内のアドレス範囲をメモリデバイス内の物理アドレスに関連付けるメタデータ(例えば、メタデータ320、322)を格納することを命令するようにさらに構成され、第1のメモリデバイスが第1のメモリタイプに対応することを決定することは、格納されたメタデータに基づく。
【0200】
一実施形態では、命令は、ページテーブルエントリを使用して、第1のメモリデバイスの第1の物理アドレスに仮想ページを格納するように少なくとも1つの処理デバイスに命令するようにさらに構成される。
【0201】
一実施形態では、システムは、メモリ管理ユニット(例えば、メモリ管理ユニット316)及びトランスレーションルックアサイドバッファをさらに含み、命令は、少なくとも1つの処理デバイスに、仮想ページに関連付けられたメモリタイプの第1のメモリタイプから第2のメモリタイプへの変更に基づくトランスレーションルックアサイドバッファのマッピングデータを更新すること、及び更新されたマッピングデータに基づいて、メモリ管理ユニットによって、仮想ページを第1のメモリデバイスから第2のメモリタイプの第2のメモリデバイスに転送することを命令するようにさらに構成される。
【0202】
一実施形態では、メモリタイプの変更は、少なくとも1つの処理デバイス上で実行されるアプリケーションによる要求に応答して、またはプロセスまたはアプリケーションの優先度が変更した少なくとも1つの処理デバイスによる決定に応答して、実行される。
【0203】
一実施形態では、非一時的な機械可読記憶媒体は、少なくとも1つの処理デバイスで実行されるとき、少なくとも1つの処理デバイスに、少なくとも、仮想ページを第1のメモリタイプに関連付けること、仮想ページの仮想アドレスを、第1のメモリタイプの第1のメモリデバイス内の物理アドレスにマップするためのページテーブルエントリを生成すること、及びページテーブルエントリを使用して、第1のメモリデバイスの物理アドレスに仮想ページを格納すること、を引き起こす命令を格納する。
【0204】
[名前空間へのデータのバインド]
次に、異なるメモリタイプの物理メモリを有するメモリシステム内の名前空間にデータをバインドすることに関連する様々な実施形態を以下に説明する。以下の説明の一般性は、上記の様々な実施形態によって制限されない。
【0205】
以前のメモリシステムでは、メインメモリはオペレーティングシステムによってアプリケーションにアクセス可能にされ、単一の論理アドレス空間から(例えば、アドレス空間内の仮想アドレスから)割り当てられる。特に、オペレーティングシステムは、アプリケーションがいずれかのマッピングコントロールにアクセスできるようにしないため、アプリケーションは、データの格納に使用されるメモリの種類を制御できない。代わりに、オペレーティングシステム及び/またはプロセッサは、ページテーブルとトランスレーションルックアサイドバッファを介してマッピングを制御する。ページテーブルは、コンピュータシステムのメモリデバイス内の論理アドレスのページから物理メモリユニットのページへのマッピングを定義する。ページテーブルの合計サイズは比較的大きい。したがって、ほとんどのページテーブルはメモリ(例えば、メインメモリのDRAM)に格納される。物理メモリアドレスを見つけるために現在使用されているページテーブルのデータの一部は、プロセッサ/メモリコントローラのトランスレーションルックアサイドバッファにキャッシュされる。
【0206】
以前のメモリシステムの前述の状況は、データを格納する実際の物理メモリデバイスの待ち時間が大きいため、アプリケーションが特定のデータにタイムリーにアクセスできないという技術的な問題を引き起こす。したがって、アプリケーションの実行が長期間延期され得る。場合によっては、この遅れにより、タイムリーな応答またはその他のアクションを必要とするシステムの障害が発生する可能性がある。例えば、リアルタイム制御システムは、メインメモリからのデータアクセスが遅いために失敗する可能性がある。一例では、自動運転車のナビゲーションの制御は、重要なデータが格納されているメインメモリの部分の過度の待ち時間のために失敗する可能性がある。
【0207】
アプリケーションが特定の物理メモリデバイスへのメインメモリ使用量のマッピングを制御できないことも、アプリケーションがより高い信頼性を持つメモリを選択することを妨げる。これにより、メモリの機能障害(例えば、障害率の高い物理メモリデバイスからのデータアクセスの障害)が原因で重要なデータが失われる可能性があるという技術的な問題が発生する。
【0208】
以下に説明する様々な実施形態は、上記の技術的問題の1つまたは複数に対する技術的解決策を提供する。一実施形態では、アプリケーションは、データが格納されるメモリタイプを指定することによって、ランダムメモリアクセスのためにオペレーティングシステムによって使用される物理メモリデバイスへのマッピングを管理する。アプリケーションは、オペレーティングシステムを使用してメモリの一部を割り当て(例えば、アプリケーションからオペレーティングシステムへの要求に基づいて)、メモリユニットのメモリアドレスに基づいて指定されたメモリタイプのメモリユニットを使用する。一例では、オペレーティングシステムは、指定されたメモリタイプに対応する仮想メモリアドレス範囲をアプリケーションに通知する。
【0209】
一実施形態では、データへのアクセスは、オペレーティングシステムによって管理される名前空間テーブルを介してオペレーティングシステムによって実行される。一実施形態では、名前空間テーブルは、メインメモリ内のメモリアドレスに名前をアサインする。一実施形態では、名前は、アプリケーションによって使用されるメインメモリのアドレス空間内の仮想アドレスの範囲にアサインされる。一実施形態では、名前空間は、名前空間識別子によって識別される(例えば、任意の識別子、名前空間A、名前空間B、及び名前空間Cを使用し、各識別子は、異なるタイプのメモリに関連付けられる)。
【0210】
一実施形態では、名前空間は、メモリアクセスに使用される。各名前空間は、メモリアドレスが定義されているメモリユニットのセットへの名前付き論理的参照である。アプリケーションは名前空間からメモリを割り当てる。オペレーティングシステムは、名前空間を特定のタイプのメモリ(DRAM、NVRAM、NANDフラッシュなど)にバインド及び/または再バインドするためにアプリケーションから呼び出すことができるサービスを提供する。名前空間がメモリのタイプにバインドされるとき、オペレーティングシステムは、1つ以上のページテーブルを調整して、名前空間の論理メモリアドレスをコンピュータシステムの特定のメモリタイプの物理メモリユニットにマップする。名前空間内の論理アドレスを介してメモリユニットにアクセスするとき、1つ以上のページテーブルからのデータがロードされ、物理メモリアドレスに変換するためにプロセッサ/メモリコントローラのトランスレーションルックアサイドバッファにキャッシュされる。
【0211】
一実施形態では、名前空間は、異なるタイプのメモリデバイス(例えば、DRAM、NVRAM、及びNANDフラッシュ)に作成される。アプリケーションは、データのセットと名前空間の間のバインドを動的に変更して、データを所望のメモリデバイスに移動できる。一実施形態では、オペレーティングシステムは、バインドの変化を検出し、データを移動させる。一実施形態では、オペレーティングシステムは、メモリ管理ユニットにページテーブルを更新させて、データが現在使用されているメモリデバイスから所望のメモリデバイスに移動されるようにする。
【0212】
一実施形態では、メインメモリとしてランダムアクセスのために格納されたデータは、様々な仮想アドレス範囲によって編成される。仮想アドレス範囲のセットは、名前空間識別子に関連付けることができる。
【0213】
一実施形態では、オペレーティングシステムのカーネルは、ファームウェア及びデバイスドライバの支援を受けて、コンピュータシステム内のすべてのハードウェアデバイスを制御する。カーネルは、ランダムアクセスメモリ(RAM)内のプログラムのメモリアクセスを管理し、特定のハードウェアリソースにアクセスするプログラムを決定する。
【0214】
オペレーティングシステムは、アプリケーションプログラムとコンピュータシステムのコンピュータハードウェア間のインターフェイスを提供する。アプリケーションプログラムは、オペレーティングシステムによって管理される手順に基づいてハードウェアと相互作用する。オペレーティングシステムは、アプリケーションプログラムにもサービスを提供する。アプリケーションプログラムが実行されるとき、オペレーティングシステムのカーネルがプロセスを作成する。カーネルは、プロセスにメモリ空間と優先度をアサインし、プログラムのバイナリコードをメモリにロードし、アプリケーションプログラムの実行を開始する。
【0215】
一実施形態では、カーネルによるメモリ空間のアサインは、少なくとも部分的に、アプリケーションから提供される名前空間データに基づく。一例では、アプリケーションは、メモリタイプに対応する名前空間を提供する。それに応じて、カーネルはそのメモリタイプの物理メモリデバイスに対応するメモリ空間をアサインする。一例では、カーネルは仮想メモリのアドレス指定(例えば、ページングまたはセグメンテーション)を使用して、各プログラムがいつでもアクセスできるメモリを決定する。
【0216】
図11は、いくつかの実施形態による、名前空間テーブル1104を使用して、名前空間をコンピュータシステム内の物理メモリの異なるメモリタイプにマッピングする例示的なコンピュータシステムを示す。物理メモリは、メモリバス812を介してコンピュータシステム1100によってアクセス可能なランダムアクセスメモリを提供するために使用される。メモリサブシステム1102は、ランダムアクセスメモリとして使用され、メモリ管理ユニット316を使用して処理デバイス310によってアクセスされる物理メモリを提供する。一例では、コンピュータシステム1100及びメモリサブシステム1102は、同じ集積回路(IC)チップ上または異なるICチップ上にある。一例では、コンピュータシステム1100及びメモリサブシステム1102は、それぞれ、チップ上の同じシステム(SoC)の一部である。
【0217】
コンピュータシステム1100は、
図8のコンピュータシステム800の例である。メモリサブシステム1102は、
図8のメモリサブシステム802の例である。
【0218】
物理メモリは、DRAM304、NVRAM306、NANDフラッシュ308などの異なるメモリタイプのメモリデバイスによって提供される。他の実施形態では、様々な他のタイプのメモリ及び/または他のメモリタイプの組み合わせを使用することができる。
【0219】
各メモリデバイスは、名前空間識別子に対応している。例えば、DRAM304は識別子「名前空間A」に対応する。NVRAM306は、識別子「名前空間B」に対応する。NANDフラッシュ308は、識別子「名前空間C」に対応する。
【0220】
一実施形態では、各メモリデバイスは、アサインされた名前空間に関連付けられた様々なデータを格納することができる。それぞれの名前空間データが、
図11に、「名前空間Aデータ」、「名前空間Bデータ」、及び「名前空間Cデータ」として示されている。一例では、名前空間データは名前空間識別子を含む。一例では、名前空間データは、DRAM304に対応する物理アドレス範囲を含む。一例では、名前空間データは、メタデータ320、322からのデータの一部を含む。一例では、名前空間データは、ページテーブル804からのデータの一部を含む。
【0221】
一実施形態では、名前空間テーブル1104は、コンピュータシステム1100のメモリに格納される。名前空間テーブル1104は、名前空間識別子とメモリタイプとの間のマッピングを提供する。例えば、名前空間識別子「名前空間A」は、DRAMのメモリタイプにマップされる。
【0222】
一実施形態では、アプリケーション312がランダムアクセスメモリの割り当てを処理デバイス310に要求すると、オペレーティングシステム808は名前空間識別子を作成し、メモリタイプを名前空間識別子に関連付ける。名前空間テーブル1104は、この関連付けを格納するように更新される。一例では、メモリタイプは、アプリケーション312によって提供されるメモリタイプ314である。一例では、オペレーティングシステム808は、アプリケーション312に関連する特性に基づいてメモリタイプを決定する。一例では、オペレーティングシステム808は、アプリケーション312の優先度に基づいてメモリタイプを決定する。
【0223】
一実施形態では、アプリケーション312は、メモリ管理に関連するオペレーティングシステム808に要求を提供する。要求には、識別されたデータに関連付けられている、または関係する名前空間識別子が含まれている。要求を受信することに応答して、オペレーティングシステム808は、識別されたデータに関連する1つまたは複数の様々なアクションまたは操作を実行するために名前空間テーブル1104にアクセスする。一例では、オペレーティングシステム808は、識別されたデータを、あるメモリタイプの既存のメモリデバイスから、受信した名前空間識別子に対応する別のメモリタイプの新しいメモリデバイスに移動する。一例では、オペレーティングシステム808は、識別されたデータに対して1つまたは複数の操作を実行し、操作の結果を、要求とともに提供される名前空間に関連付けられたメモリタイプに格納する。一例では、オペレーティングシステム808は、アクションの完了の確認をアプリケーション312に提供する。
【0224】
一実施形態では、メモリは、アプリケーション312によって使用するために割り当てられる。メモリは名前空間から割り当てられる。一例では、名前空間は名前空間テーブル1104にすでに存在している。別の例では、名前空間はメモリ割り当ての要求に応答して作成される。作成された名前空間は、名前空間テーブル1104に格納される。
【0225】
既存または新しく作成された名前空間は、メモリタイプにバインドされる。名前空間をメモリタイプにバインドすることに応答して、1つまたは複数のページテーブルが調整され、論理メモリアドレスと名前空間がメモリタイプのメモリデバイスにマップされる。一例では、ページテーブル806及び/またはページテーブル804は、名前空間をメモリタイプにバインドすることに応答して更新される。
【0226】
一実施形態では、オペレーティングシステム808は、メモリデバイスの名前空間を作成する。データは名前空間にバインドされる。一例では、データは仮想アドレス範囲によって識別される。データを名前空間にバインドすることに応答して、データは作成された名前空間に関連付けられたメモリデバイスに格納される。一例では、データを名前空間にバインドすることは、名前空間の仮想アドレスとメモリデバイスの物理アドレスとの間のマッピングを格納することを含む。
【0227】
一実施形態では、名前空間の1つまたは複数の仮想アドレスは、ページテーブル804を使用してオペレーティングシステム808によって管理されるプロセスの仮想ページに対応する。一例では、ページテーブル804は、名前空間の仮想アドレスをメモリデバイスの物理アドレスにマップするページテーブルエントリを含む。
【0228】
図12は、いくつかの実施形態による、コンピュータシステムの異なるタイプのメモリに名前空間をマップするレコード1202、1204、1206を有する例示的な名前空間テーブル1200を示す。一例では、コンピュータシステムは、コンピュータシステム1100である。名前空間テーブル1200は、名前空間テーブル1104の例である。
【0229】
各レコードには、メモリタイプ(例えば、DRAMまたはNVRAM)に関連付けられた名前空間識別子(例えば、名前空間A)が含まれている。一例では、レコード1202のメモリタイプの変更により、ページテーブル900が更新され、ページテーブルエントリ902が一致するメモリタイプを有するようになる。
【0230】
各レコードには、仮想アドレス、物理アドレス、及び/またはデータ識別子をさらに含めることができる。一例では、仮想アドレスは、レコードのメモリタイプに対応する仮想アドレス範囲であり得る。一例では、物理アドレスは、レコードのメモリタイプの1つまたは複数のメモリデバイスに対応する物理アドレス範囲であり得る。
【0231】
一例では、データ識別子は、名前空間識別子に関連付けられているデータを識別する。一例では、データ識別子は、処理デバイス310のアドレス空間内のアドレス範囲である。一例では、データ識別子は、レコードのメモリタイプの1つまたは複数のメモリデバイスに格納されたデータの物理アドレス範囲である。
【0232】
一実施形態では、格納されたメタデータ320、322からのデータの一部は、名前空間テーブル1200内のレコードにコピーされる。一例では、データの一部は、レコードの名前空間識別子に関連付けられているメモリタイプの変更に応答してコピーされる。一例では、データの一部は、レコードに関連付けられた仮想アドレス、物理アドレス、及び/またはデータ識別子の変更に応答してコピーされる。
【0233】
図13は、いくつかの実施形態による、異なるメモリタイプの物理メモリを有するメモリシステム内の名前空間にデータをバインドするための方法を示す。例えば、
図13の方法は、
図11のシステムに実装することができる。
【0234】
図13の方法は、ハードウェア(例えば、処理デバイス、回路、専用論理、プログラム可能な論理、マイクロコード、デバイスのハードウェア、集積回路など)、ソフトウェア(例えば、処理デバイスで実行される命令)、またはそれらの組み合わせを含むことができる処理論理によって実行することができる。いくつかの実施形態では、
図13の方法は、少なくとも部分的に、1つまたは複数の処理デバイス(例えば、
図11の処理デバイス310)によって実行される。
【0235】
特定のシーケンスまたは順序で示されているが、別段の指定がない限り、プロセスの順序は変更することができる。したがって、図示された実施形態は例としてのみ理解されるべきであり、図示されたプロセスは異なる順序で実行することができ、いくつかのプロセスは並行して実行することができる。さらに、様々な実施形態では、1つまたは複数のプロセスを省略することができる。したがって、すべての実施形態ですべてのプロセスが必要とされるわけではない。他のプロセスフローも可能である。
【0236】
ブロック1301において、メモリは、アプリケーションによって使用されるために名前空間から割り当てられる。名前空間は、物理アドレスが定義されている1つ以上の物理メモリデバイスへの論理的参照である。一例では、物理アドレスは、オペレーティングシステム808によって定義される。一例では、アプリケーションはアプリケーション312である。
【0237】
ブロック1303で、名前空間はメモリタイプにバインドされている。一例では、名前空間はメモリタイプ314にバインドされている。一例では、メモリタイプへの名前空間のバインドは、名前空間テーブル1104に格納される。
【0238】
ブロック1305で、名前空間をメモリタイプにバインドすることに応答して、名前空間の論理メモリアドレスがメモリタイプのメモリデバイスにマップされるようにページテーブルが調整される。一例では、ページテーブル804及び/またはページテーブル806が調整される。一例では、論理メモリアドレスは、アプリケーション312の仮想ページの仮想アドレスである。一例では、メモリデバイスはDRAM304である。
【0239】
一実施形態では、方法は、1つの処理デバイス(例えば、処理デバイス310及び/またはメモリ管理ユニット316)によって、異なるメモリタイプのメモリデバイス(例えば、DRAM304、NVRAM306、及びNANDフラッシュ308)の名前空間を作成することであって、名前空間が第1のメモリタイプの第1のメモリデバイスのための第1の名前空間(例えば、「名前空間A」)、及び第2のメモリタイプの第2のメモリデバイスのための第2の名前空間(例えば、「名前空間B」)を含む、作成すること、データを第1の名前空間にバインドする(例えば、名前空間テーブル1104のバインドを格納する)こと、及びデータを第1の名前空間にバインドすることに応答して、データを第1のメモリデバイスに格納することを含む。
【0240】
一実施形態では、データを第1のメモリデバイスに格納することは、データを第2のメモリデバイスから第1のメモリデバイスに移動することを含む。
【0241】
一実施形態では、データを第1の名前空間にバインドすることは、第2の名前空間から第1の名前空間へのデータのバインドの変更を含む。
【0242】
一実施形態では、オペレーティングシステム(例えば、オペレーティングシステム808)は、1つの処理デバイス上で実行され、データを第1の名前空間にバインドすることは、アプリケーション(例えば、アプリケーション312)による要求に応答してオペレーティングシステムによって実行される。
【0243】
一実施形態では、第1の名前空間は、アプリケーションによる要求に応答してオペレーティングシステムによって作成される。
【0244】
一実施形態では、名前空間を作成することは、それぞれの仮想アドレス(例えば、ページテーブル804、806の仮想アドレス、メタデータ320、322の仮想アドレス)を各名前空間に関連付けることを含む。
【0245】
一実施形態では、データを第1の名前空間にバインドすることは、第1の名前空間の仮想アドレス(例えば、ページテーブル804、806の仮想アドレス、メタデータ320、322の仮想アドレス)と、第1のメモリデバイスの第1の物理アドレスとの間のマッピングを格納することを含む。
【0246】
一実施形態では、第1の名前空間の仮想アドレスは、1つの処理デバイスのアドレス空間の第1のアドレス範囲内にあり、マッピングを格納することは、第1のアドレス範囲を第1のメモリデバイスに関連付けるメタデータ(例えば、メタデータ320、322)を格納することを含む。
【0247】
一実施形態では、第1の名前空間の仮想アドレスは、ページテーブル(例えば、ページテーブル804、806)を使用してオペレーティングシステムによって管理されるプロセスの仮想ページに対応し、マッピングを格納することは、第1の名前空間の仮想アドレスを第1の物理アドレスにマップするテーブルエントリをページテーブルに生成することを含む。
【0248】
一実施形態では、方法は、オペレーティングシステムによってメモリに、名前空間と名前空間にバインドされたデータのセットとの間の関連付け(例えば、名前空間テーブル1104内のレコードのバインド)を格納することをさらに含む。
【0249】
一実施形態では、方法は、1つの処理デバイス上で実行されるアプリケーションの優先度の増加を決定することをさらに含み、データを第1の名前空間にバインドすることは、優先度の増加を決定することに応答して実行され、データを第1の名前空間にバインドすることは、第2の名前空間から第1の名前空間へのバインドの変更を含み、第1のメモリデバイス(例えば、DRAM304)の待ち時間は、第2のメモリデバイス(例えば、NVRAM306またはNANDフラッシュ308)の待ち時間よりも短い。
【0250】
一実施形態では、システムは、データを第1の名前空間(第1のメモリデバイスの待ち時間がより短い)にバインドする結果となる優先度の増加を決定する代わりに、プロセスが書き込みに極めて集中すると判定された場合(例えば、所定の量及び/または頻度の書き込みを超えた場合)、データを、例えばより耐久性のあるメモリによって支持された名前空間にバインドすることができる。別の例では、プロセスがミッションクリティカルであると判断された場合、システムはデータをより復元力(resilient)のあるメモリによって(またはプロセスの重要性が低い、または重要でないと判定された場合は、復元力の低いメモリによって)支持された名前空間にバインドできる。
【0251】
一実施形態では、プロセスは、1つまたは複数の特定の特性(例えば、優先度、結果、双方向性、帯域幅/電力消費など)を有するように判定することができる。そのような判定に基づいて、プロセスに関連するデータは、判定された1つまたは複数の特性に対応する、及び/またはより適している相補的な特性を備えたメモリに支持された名前空間にバインドされる。
【0252】
一実施形態では、第1の名前空間を作成することは、第1の名前空間の識別情報を第1のメモリデバイスのメモリに格納すること(例えば、
図11の「名前空間Aデータ」の一部として名前空間識別子及び/または他の識別情報を格納すること)を含む。
【0253】
一実施形態では、方法は、アプリケーションから、メモリの割り当ての要求を受信することをさらに含み、要求は、データが第1のメモリタイプ(例えば、DRAM)の物理メモリに格納されることを指定する。
【0254】
一実施形態では、システムは、第1のメモリタイプの第1のメモリデバイス、少なくとも1つの処理デバイス、並びに1つの処理デバイスに、オペレーティングシステムによって、アプリケーションによって使用するために名前空間からメモリを割り当てることであって、名前空間は、物理アドレスが定義されている1つまたは複数の物理メモリデバイスへの論理的参照である、割り当てること、名前空間を第1のメモリタイプにバインドすること、及び名前空間を第1のメモリタイプにバインドすることに応答して、オペレーティングシステムによって、名前空間内の論理メモリアドレスを第1のメモリデバイスにマップするようにページテーブルを調整すること、を命令するように構成された命令を含むメモリ、を含む。
【0255】
一実施形態では、命令は、ページテーブルからのデータを使用して、名前空間の論理メモリアドレスに対応する第1のメモリデバイスの第1の物理アドレスのデータにアクセスするように1つの処理デバイスに命令するようにさらに構成される。
【0256】
一実施形態では、ページテーブルからのデータは、トランスレーションルックアサイドバッファ(例えば、TLB810)にキャッシュされ、メモリ管理ユニット(例えば、MMU316)は、トランスレーションルックアサイドバッファにアクセスして、論理メモリアドレスを第1の物理アドレスに変換する。
【0257】
一実施形態では、システムは、第2のメモリタイプの第2のメモリデバイスをさらに含み、命令は、ページテーブルからのデータを使用して、第2のメモリタイプの第2のメモリデバイスから第1のメモリデバイスへデータ移動することによって第1のメモリデバイスにデータを格納するように少なくとも1つの処理デバイスに命令するようにさらに構成される。
【0258】
一実施形態では、非一時的な機械可読記憶媒体は、少なくとも1つの処理デバイスで実行されるとき、少なくとも1つの処理デバイスに、少なくとも、異なるメモリタイプのメモリデバイスの名前空間を作成することであって、名前空間が第1のメモリタイプの第1のメモリデバイスのための第1の名前空間、及び第2のメモリタイプの第2のメモリデバイスのための第2の名前空間を含む、作成すること、データを第1の名前空間にバインドすること、及びデータを第1の名前空間にバインドすることに応答して、データを第1のメモリデバイスに格納すること、を引き起こす命令を格納する。
【0259】
一実施形態では、データを第1の名前空間にバインドすることは、アプリケーションから受信した第1のメモリタイプ(例えば、メモリタイプ314)の要求に応答して実行され、データを第1の名前空間にバインドすることは、第2の名前空間から第1の名前空間へのデータのバインドの変更を含み、第1のメモリデバイスの待ち時間は、第2のメモリデバイスの待ち時間よりも短い。
【0260】
一実施形態では、データを第1の名前空間にバインドすることは、第1の名前空間の仮想アドレス範囲と、第1のメモリデバイスの第1の物理アドレスとの間のマッピングを格納することを含み、マッピングを格納することは、仮想アドレス範囲を第1のメモリデバイスに関連付けるメタデータ(例えば、メタデータ320、322)を格納することを含む。
【0261】
[結び]
本開示は、これらの方法を実行するデータ処理システム、及びデータ処理システム上で実行されるときにシステムにこれらの方法を実行させる命令を含むコンピュータ可読媒体を含む、上記の方法を実行し、システムを実装する様々なデバイスを含む。
【0262】
説明及び図面は例示的なものであり、限定的なものとして解釈されるべきではない。完全な理解を提供するために、多数の具体的な詳細が説明されている。ただし、説明が不明瞭になるのを避けるために、特定の例では、よく知られた、または従来の詳細が説明されていない。本開示における1つまたは実施形態への言及は、必ずしも同じ実施形態への言及ではなく、そのような参照は少なくとも1つを意味する。
【0263】
本明細書での、「一実施形態(one embodiment)」または「実施形態(an embodiment)」へのあらゆる参照は、その実施形態と関係して記載される特定の機能、構造、または特性が、本開示の少なくとも1つの実施形態に含まれることを意味する。本明細書の種々の場所において「一実施形態では」という語句が出現することは、必ずしもすべてが同一の実施形態であること、また、他の実施形態を相互に排除する別個のまたは代替の実施形態であることを参照しない。さらに、いくつかの実施形態によって示され、他の実施形態によって示されない可能性がある様々な特徴が記載されている。同様に、いくつかの実施形態の要件であり得るが他の実施形態ではない様々な要件が説明されている。
【0264】
この説明では、説明を簡略化するために、ソフトウェアコードによって実行される、またはソフトウェアコードによって引き起こされるものとして、様々な機能及び操作を行うことを説明することができる。しかしながら、当業者は、そのような表現が意味することは、機能が、マイクロプロセッサ、特定用途向け集積回路(ASIC)、グラフィックプロセッサ、及び/またはフィールドプログラマブルゲートアレイ(FPGA)などの1つまたは複数のプロセッサによるコードの実行から生じることであることを認識するであろう。あるいは、または組み合わせて、機能及び動作は、ソフトウェア命令の有無にかかわらず、特別な目的の回路(例えば、論理回路)を使用して実装することができる。実施形態は、ソフトウェア命令なしで、またはソフトウェア命令と組み合わせて、ハードワイヤード回路を使用して実装することができる。したがって、技術がハードウェア回路及びソフトウェアのいずれかの特定の組み合わせにも、コンピューティングデバイスによって実行される命令についてのいずれの特定のソースにも限定されない。
【0265】
いくつかの実施形態は、完全に機能するコンピュータ及びコンピュータシステムに実装することができるが、様々な実施形態は、様々な形態のコンピューティング製品として配布することができ、実際に分布に影響を与えるよう使用される特定のタイプの機械またはコンピュータ可読媒体に関係なく適用することができる。
【0266】
開示される少なくともいくつかの態様は、少なくとも部分的に、ソフトウェアで具体化することができる。つまり、技術は、マイクロプロセッサなどのプロセッサに応答して、コンピューティングデバイスまたは他のシステムで実行され、ROM、揮発性RAM、不揮発性メモリ、キャッシュ、またはリモートストレージデバイスなどのメモリに含まれる命令のシーケンスを実行することができる。
【0267】
実施形態を実装するために実行されるルーチンは、オペレーティングシステム、ミドルウェア、サービス提供プラットフォーム、SDK(ソフトウェア開発キット)構成要素、ウェブサービス、または他の特定のアプリケーション、構成要素、プログラム、オブジェクト、モジュール、または「コンピュータプログラム」として参照される命令のシーケンスの一部として実装され得る。これらのルーチンへの呼び出しインターフェイスは、API(アプリケーションプログラミングインターフェイス)としてソフトウェア開発コミュニティに公開できる。コンピュータプログラムは、通常、コンピュータ内の様々なメモリ及び記憶装置に様々な時点で設定された1つまたは複数の命令を含み、コンピュータ内の1つまたは複数のプロセッサによって読み取られて実行されるとき、コンピュータに、様々な態様を含む要素を実行するために必要な操作を実行させる。
【0268】
機械可読媒体を使用して、コンピューティングデバイスによって実行されたときにデバイスに様々な方法を実行させるソフトウェア及びデータを格納することができる。実行可能なソフトウェア及びデータは、例えば、ROM、揮発性RAM、不揮発性メモリ及び/またはキャッシュを含む様々な場所に格納され得る。このソフトウェア及び/またはデータの一部は、これらのストレージデバイスのいずれかに保存できる。さらに、データと命令は、集中型サーバまたはピアツーピアネットワークから取得できる。データ及び命令の異なる部分は、異なる集中型サーバ及び/またはピアツーピアネットワークから、異なる時間に、異なる通信セッションで、または同じ通信セッションで取得することができる。データと命令は、アプリケーションの実行前に完全に取得できる。あるいは、データと命令の一部を、実行に必要なときに、ちょうど間に合うように動的に取得することもできる。したがって、データ及び命令が、特定の時点で完全に機械可読媒体上にあることは必要ではない。
【0269】
コンピュータ可読媒体の例には、記録可能及び記録不可能なタイプの媒体、例えば揮発性及び不揮発性メモリデバイス、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、フラッシュメモリデバイス、ソリッドステートドライブストレージメディア、リムーバブルディスク、磁気ディスクストレージメディア、光ストレージメディア(例えば、コンパクトディスク読み取り専用メモリ(CDROM)、デジタル多用途ディスク(DVD)など)が含まれるが、これらに限定されない。コンピュータ可読媒体は、命令を格納することができる。
【0270】
一般に、有形または非一時的な機械可読媒体には、機械(例えば、コンピュータ、モバイルデバイス、ネットワークデバイス、パーソナルデジタルアシスタント、製造ツール、1つまたは複数のプロセッサのセットを備えたいずれかのデバイスなど)によってアクセス可能な形式で情報を提供する(例えば、保存する)メカニズムが含まれる。
【0271】
様々な実施形態において、ハードワイヤード回路は、技術を実装するためにソフトウェア及びファームウェア命令と組み合わせて使用され得る。したがって、技術は、ハードウェア回路及びソフトウェアのいずれかの特定の組み合わせにも、コンピューティングデバイスによって実行される命令についてのいずれの特定のソースにも、限定されない。
【0272】
一部の図面は特定の順序でいくつかの操作を示しているが、順序に依存しない操作は、並べ替えることができ、他の操作を組み合わせたり、分割したりすることができる。いくつかの並べ替えまたは他とのグループ化が具体的に言及されているが、他のことが当業者に明らかであり、したがって、代替案の完全な列挙を提示してはいない。さらに、ステージは、ハードウェア、ファームウェア、ソフトウェア、またはそれらの任意の組み合わせで実装できることを認識しておく必要がある。
【0273】
前述の明細書では、本開示が、その特定の例示的な実施形態を参照して説明されてきた。以下の請求項に述べるより広い趣旨及び範囲から逸脱することなく、様々な変更を加えることができることが明らかである。したがって、明細書及び図面は限定的な意味ではなく例示的な意味で考慮されるべきである。
【0274】
本明細書に記載の様々な実施形態は、多種多様な異なるタイプのコンピューティングデバイスを使用して実装することができる。本明細書で使用される場合、「コンピューティングデバイス」の例には、サーバ、集中型コンピューティングプラットフォーム、複数のコンピューティングプロセッサ及び/または構成要素のシステム、モバイルデバイス、ユーザ端末、車両、パーソナル通信デバイス、ウェアラブルデジタルデバイス、電子キオスク、汎用コンピュータ、電子ドキュメントリーダー、タブレット、ラップトップコンピュータ、スマートフォン、デジタルカメラ、家庭用電化製品、テレビ、またはデジタル音楽プレーヤーが挙げられるが、これらに限定されない。コンピューティングデバイスのその他の例には、いわゆる「モノのインターネット」(IOT)の一部であるデバイスが含まれる。このような「モノ」は、モノを監視し得、これらのモノの設定を変更し得る、所有者または管理者と時折やり取りする場合がある。場合によっては、そのような所有者または管理者は、「モノ」のデバイスに関してユーザの役割を果たす。いくつかの例では、ユーザのプライマリモバイルデバイス(例えば、Apple iPhone)は、ユーザが着用するペアの「モノ」のデバイス(例えば、Apple watch)に関する管理者サーバである場合がある。
【0275】
いくつかの実施形態では、コンピューティングデバイスは、例えば、デスクトップコンピュータ、ラップトップコンピュータ、ネットワークサーバ、モバイルデバイス、またはメモリ及び処理デバイスを含む他のコンピューティングデバイスとして実装されるコンピュータまたはホストシステムであり得る。ホストシステムは、メモリサブシステムを含むか、またはメモリサブシステムに結合して、ホストシステムがメモリサブシステムからデータを読み取る、またはメモリサブシステムにデータを書き込むことができるようにする。ホストシステムは、物理ホストインターフェイスを介してメモリサブシステムに結合することができる。一般に、ホストシステムは、同じ通信接続、複数の別個の通信接続、及び/または通信接続の組み合わせを介して、複数のメモリサブシステムにアクセスすることができる。