(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-30
(45)【発行日】2023-12-08
(54)【発明の名称】仮想メモリ・メタデータ管理
(51)【国際特許分類】
G06F 9/52 20060101AFI20231201BHJP
G06F 9/455 20180101ALI20231201BHJP
【FI】
G06F9/52 120B
G06F9/455 150
(21)【出願番号】P 2022520300
(86)(22)【出願日】2020-10-01
(86)【国際出願番号】 IB2020059188
(87)【国際公開番号】W WO2021070016
(87)【国際公開日】2021-04-15
【審査請求日】2023-03-24
(32)【優先日】2019-10-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ジャロマ、ジェイム
(72)【発明者】
【氏名】ロジャース、マーク
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開2010-108216(JP,A)
【文献】特開2000-222281(JP,A)
【文献】特開2012-168751(JP,A)
【文献】米国特許出願公開第2018/0095892(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/52
G06F 9/455
(57)【特許請求の範囲】
【請求項1】
コンピュータ実施方法であって、
プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化するステップであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、前記インスタンス化するステップと、
前記プロセッサによって、前記複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けするステップであり、前記2つ以上のコンテナ・グループの各々が異なるロックによって制御される、前記グループ分けするステップと、
メモリ・オブジェクト・メタデータをVMメタデータ・ブロックに割り振ることを求めるリクエストに応答して、前記プロセッサによって、最少使用コンテナ・グループである第1のコンテナ・グループに関して前記2つ以上のコンテナ・グループをスキャンするステップと、
前記プロセッサによって、前記第1のコンテナ・グループ内の最少使用VMメタデータ・コンテナである第1のVMメタデータ・コンテナに関して前記第1のコンテナ・グループに問い合わせるステップと、
前記プロセッサによって、前記第1のVMメタデータ・コンテナの前記VMメタデータ・ブロックに前記メモリ・オブジェクト・メタデータを割り振って、前記メモリ・オブジェクト・メタデータを割り振ることを求める前記リクエストを履行するステップと
を含む、コンピュータ実施方法。
【請求項2】
前記複数のVMメタデータ・コンテナをインスタンス化する前記ステップが、前記コンピュータ・システムのブートアップ中に実行され、前記コンピュータ・システムのオペレーティング・システムによって自動的に管理される、請求項1に記載のコンピュータ実施方法。
【請求項3】
前記プロセッサによって、メモリ・オブジェクトを拡張することを求めるリクエストを受け取り、前記メモリ・オブジェクトに関連した前記メモリ・オブジェクト・メタデータに割り振られたVMメタデータ・ブロックの数を増やすステップと、
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを格納する前記VMメタデータ・ブロック
の割振りを拡張することを求める前記リクエストを履行するのに必要なVMメタデータ・ブロック必要量を計算するステップと、
前記プロセッサによって、前記第1のVMメタデータ・コンテナの残りのスペースの量と前記VMメタデータ・ブロック必要量とを比較するステップと、
前記比較するステップが、前記第1のVMメタデータ・コンテナの残りのスペースの前記量が前記VMメタデータ・ブロック必要量よりも大きいと判定したことに応答して、前記プロセッサによって、前記メモリ・オブジェクト・メタデータを前記第1のVMメタデータ・コンテナに格納するために追加のVMメタデータ・ブロックを割り振って、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するステップと
をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項4】
前記プロセッサによって、前記メモリ・オブジェクト・メタデータに関連したメモリ・オブジェクトを拡張することを求めるリクエストを受け取り、前記メモリ・オブジェクトに割り振られたVMメタデータ・ブロックの数を増やすステップと、
前記プロセッサによって、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要なVMメタデータ・ブロック必要量を計算するステップと、
前記第1のVMメタデータ・コンテナをスキャンして、前記第1のVMメタデータ・コンテナの残りのスペースの量が、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要なスペース必要量よりも大きいかどうかを判定するステップと、
前記第1のVMメタデータ・コンテナの残りのスペースの前記量が、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要な前記スペース必要量よりも大きくないと判定したことに応答して、前記プロセッサによって、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに十分な残りのスペースを有する第2のVMメタデータ・コンテナに関して、前記第1のコンテナ・グループ内をスキャンするステップと
をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項5】
前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに十分なスペースを有する前記第2のVMメタデータ・コンテナを前記第1のコンテナ・グループ内で見つけられることができないと判定したことに応答して、前記プロセッサによって、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに十分な残りのスペースを有する前記第2のVMメタデータ・コンテナに関して、第2のコンテナ・グループ内をスキャンするステップと、
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを格納するために、前記第2のVMメタデータ・コンテナのVMメタデータ・ブロックを割り振るステップと
をさらに含む、請求項4に記載のコンピュータ実施方法。
【請求項6】
コンピュータ実施方法であって、
プロセッサによって、1つまたは複数のVMメタデータ・コンテナを含む複数のコンテナ・グループを含むメタデータ・ブロック割振りに関するメモリ管理操作を実行することを求めるリクエストを受け取るステップであり、前記複数のコンテナ・グループの個々のコンテナ・グループへのアクセスが異なるロックによって制御される、前記受け取るステップと、
前記プロセッサによって、第1のコンテナ・グループを制御する第1のロックを取得するステップと、
前記プロセッサによって、前記メタデータ・ブロック割振りの部分である、前記第1のコンテナ・グループのVMメタデータ・ブロックによって格納されたメモリ・オブジェクト・メタデータに関する全てのメモリ管理操作を実行するステップと、
前記プロセッサによって、前記第1のロックをリリースするステップと、
前記プロセッサによって、第2のコンテナ・グループを制御する第2のロックを取得するステップと
を含む、コンピュータ実施方法。
【請求項7】
前記メタデータ・ブロック割振りの部分である、前記第1のコンテナ・グループ内の前記メモリ・オブジェクト・メタデータに関する全てのメモリ管理操作を実行する前記ステップが、
前記プロセッサによって、前記メタデータ・ブロック割振りの部分である、前記第1のコンテナ・グループによって格納された前記VMメタデータ・ブロックの全てを同時に解放すること
を含む、請求項6に記載のコンピュータ実施方法。
【請求項8】
コンピュータ実施方法であって、
プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化するステップであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、前記インスタンス化するステップと、
前記プロセッサによって、前記複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けするステップであり、前記2つ以上のコンテナ・グループの各々が異なるロックによって制御される、前記グループ分けするステップと、
前記プロセッサによって、メモリ・オブジェクトを拡張し、前記メモリ・オブジェクトのメモリ・オブジェクト・メタデータを格納することに対して割り振られたVMメタデータ・ブロックの数を増やすことを求めるリクエストを受け取るステップと、
前記プロセッサによって、前記メモリ・オブジェクトの前記メモリ・オブジェクト・メタデータを格納するための少なくとも1つのVMメタデータ・ブロックを以前に割り振る役割を担った第1のコンテナ・グループの第1のVMメタデータ・コンテナを決定するステップと、
前記プロセッサによって、拡張することを求める前記リクエストを履行するのに必要なメタデータ・ブロック必要量を計算するステップと、
前記プロセッサによって、拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記第1のVMメタデータ・コンテナの空きVMメタデータ・ブロックのサイズよりも大きいかどうかを判定するステップと
を含む、コンピュータ実施方法。
【請求項9】
前記複数のVMメタデータ・コンテナをインスタンス化する前記ステップが、前記コンピュータ・システムのブートアップ中に実行され、前記コンピュータ・システムのオペレーティング・システムによって自動的に管理される、請求項8に記載のコンピュータ実施方法。
【請求項10】
拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記第1のVMメタデータ・コンテナの前記空きメタデータ・ブロックの前記サイズよりも大きくないと判定したことに応答して、前記プロセッサによって、前記メモリ・オブジェクト・メタデータを、前記第1のメタデータ・コンテナの空きメタデータ・ブロックに割り振るステップ
をさらに含む、請求項8に記載のコンピュータ実施方法。
【請求項11】
拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記第1のVMメタデータ・コンテナの前記空きメタデータ・ブロックの前記サイズよりも大きいと判定したことに応答して、
前記プロセッサによって、前記第1のコンテナ・グループ内の最少使用VMメタデータ・コンテナに関して前記第1のコンテナ・グループをスキャンするステップと、
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを、前記第1のコンテナ・グループ内の前記最少使用VMメタデータ・コンテナの空きメタデータ・ブロックに割り振るステップと
をさらに含む、請求項8に記載のコンピュータ実施方法。
【請求項12】
拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記第1のメタデータ・コンテナの前記空きメタデータ・ブロックの前記サイズよりも大きいと判定したことに応答して、
前記プロセッサによって、第2のコンテナ・グループ内の最少使用VMメタデータ・コンテナに関して前記第2のコンテナ・グループをスキャンするステップと、
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを、前記第2のコンテナ・グループ内の前記最少使用VMメタデータ・コンテナの空きメタデータ・ブロックに割り振るステップと
をさらに含む、請求項8に記載のコンピュータ実施方法。
【請求項13】
拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記第1のVMメタデータ・コンテナの前記空きメタデータ・ブロックの前記サイズよりも大きいと判定したことに応答して、
前記プロセッサによって、最少使用コンテナ・グループに関して前記2つ以上のコンテナ・グループをスキャンするステップと、
さらに、前記プロセッサによって、最少使用VMメタデータ・コンテナに関して前記最少使用コンテナ・グループをスキャンするステップと、
前記プロセッサによって、拡張することを求める前記リクエストを履行するのに必要な前記メタデータ・ブロック必要量が、前記最少使用VMメタデータ・コンテナの前記空きメタデータ・ブロックの前記サイズよりも大きいと判定するステップと、
前記プロセッサによって、少なくと
も拡張リクエストを履行するのに十分な空きVMメタデータ・ブロックを含む1つまたは複数の新規のVMメタデータ・コンテナを生成するためのカーネル・プロセスをポストするステップと
をさらに含む、請求項8に記載のコンピュータ実施方法。
【請求項14】
コンピュータ・システムであって、
プロセッサと、
前記プロセッサに結合されたコンピュータ可読ストレージ媒体と
を備え、前記コンピュータ可読ストレージ媒体が、コンピュータ実施方法を実行するプログラム命令を含み、前記コンピュータ実施方法が、
前記プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化することであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、前記インスタンス化することと、
前記プロセッサによって、前記複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けすることであり、前記2つ以上のコンテナ・グループの各々が異なるロックによって制御される、前記グループ分けすることと、
メモリ・オブジェクト・メタデータをVMメタデータ・ブロックに割り振ることを求めるリクエストに応答して、前記プロセッサによって、最少使用コンテナ・グループに関して前記2つ以上のコンテナ・グループをスキャンすることと、
前記プロセッサによって、前記最少使用コンテナ・グループ内の最少使用VMメタデータ・コンテナに関して前記最少使用コンテナ・グループに問い合わせることと
を含む、コンピュータ・システム。
【請求項15】
前記プロセッサによって、前記最少使用VMメタデータ・コンテナのVMメタデータ・ブロックに前記メモリ・オブジェクト・メタデータを割り振って、前記メモリ・オブジェクト・メタデータを割り振ることを求める前記リクエストを履行すること
をさらに含む、請求項14に記載のコンピュータ・システム。
【請求項16】
前記プロセッサによって、前記最少使用VMメタデータ・コンテナが、前記メモリ・オブジェクト・メタデータを格納するのに必要な量のVMメタデータ・ブロックを含まないと判定すること
をさらに含む、請求項14に記載のコンピュータ・システム。
【請求項17】
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを割り振ることを求める前記リクエストを履行するのに十分な使用可能なVMメタデータ・ブロックを含む1つまたは複数の新規のVMメタデータ・コンテナを生成するためのカーネル・プロセスをポストすること
をさらに含む、請求項16に記載のコンピュータ・システム。
【請求項18】
前記プロセッサによって、前記コンピュータ・システムの状態を問い合わせることと、
前記プロセッサによって、前記コンピュータ・システムの前記状態を、コンピューティング・リソースの最小量を前記コンピュータ・システムによる使用に対して使用可能に維持するためのオペレーティング・システムのシステム管理計画と比較することと、
前記コンピュータ・システムの前記状態を前記システム管理計画と比較し、コンピューティング・リソースの前記最小量を使用可能に維持することが達成されていないと判定したことに応答して、前記プロセッサによって、前記1つまたは複数の新規のVMメタデータ・コンテナをインスタンス化することと
をさらに含む、請求項17に記載のコンピュータ・システム。
【請求項19】
前記プロセッサによって、前記コンピュータ・システムの状態を問い合わせることと、
前記プロセッサによって、前記コンピュータ・システムの前記状態を、コンピューティング・リソースの最小量を前記コンピュータ・システムによる使用に対して使用可能に維持するためのオペレーティング・システムのシステム管理計画と比較することと、
前記コンピュータ・システムの前記状態を前記システム管理計画と比較し、コンピューティング・リソースの前記最小量を使用可能に維持することが達成されていると判定したことに応答して、前記プロセッサによって、前記1つまたは複数の新規のVMメタデータ・コンテナを生成するための前記カーネル・プロセスを取り消すことと
をさらに含む、請求項17に記載のコンピュータ・システム。
【請求項20】
前記プロセッサによって、前記メモリ・オブジェクト・メタデータに関連したメモリ・オブジェクトを拡張し、前記メモリ・オブジェクトに割り振られたVMメタデータ・ブロックの数を増やすことを求めるリクエストを受け取ることと、
前記プロセッサによって、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要なVMメタデータ・ブロック必要量を計算することと、
前記プロセッサによって、前記最少使用VMメタデータ・コンテナをスキャンして、前記最少使用VMメタデータ・コンテナの残りのスペースの量が、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要なスペース必要量よりも大きいかどうかを判定することと、
前記最少使用VMメタデータ・コンテナの残りのスペースの前記量が、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに必要な前記スペース必要量よりも大きくないと判定したことに応答して、前記プロセッサによって、前記メモリ・オブジェクトを拡張することを求める前記リクエストを履行するのに十分なスペースを有する第2のVMメタデータ・コンテナを識別することであり、前記最少使用コンテナ・グループ内で前記第2のVMメタデータ・コンテナを見つけることができない、前記識別することと、
前記プロセッサによって、前記メモリ・オブジェクト・メタデータを格納するために、第2のコンテナ・グループ内の第2のVMメタデータ・コンテナのVMメタデータ・ブロックを割り振ることと
をさらに含む、請求項15に記載のコンピュータ・システム。
【請求項21】
プロセッサに、
複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化することであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、前記インスタンス化することと、
前記複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けすることと、
メモリ・オブジェクト・メタデータをVMメタデータ・ブロックに割り振ることを求めるリクエストに応答して、最少使用コンテナ・グループに関して前記2つ以上のコンテナ・グループをスキャンすることと、
前記最少使用コンテナ・グループ内の最少使用VMメタデータ・コンテナに関して前記最少使用コンテナ・グループに問い合わせることと
を
実行させるためのコンピュータ・プログラ
ム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般に仮想メモリの分野に関し、より詳細には仮想メモリ・メタデータの管理に関する。
【背景技術】
【0002】
仮想メモリ(virtual memory)(VM)はオペレーティング・システムによって提供される機能である。オペレーティング・システムは、そのスペースがあたかも単一の連続した物理メモリ・デバイスであるかのようにアプリケーションおよびプログラムがアクセスすることができる仮想メモリ・スペースを生成する。仮想メモリ・スペースは、協調して一緒に動作する物理メモリとディスクベースのストレージ・リソースとの組合せでありうる。仮想メモリは、代替の一組のアドレスとして機能し、使用可能なメモリの範囲を広げる。オペレーティング・システムは、仮想メモリが使用するための1つの量のディスク・スペースを割り振ることによって、仮想メモリを構成することができる。アプリケーションおよびプログラムは、仮想メモリ・スペース内のこれらの仮想アドレスを使用して、より頻繁にアドレス指定される可能性がある他のデータ・セットまたは命令ほどには頻繁にアドレス指定する必要がない可能性があるデータおよび命令を記憶する。オペレーティング・システムによって仮想メモリ・アドレス位置が呼び出されると、仮想メモリによって記憶されていたそれらのデータおよび命令は、物理メモリの物理アドレスにコピーされる。仮想メモリを物理メモリにコピーするため、オペレーティング・システムは仮想メモリを複数のページに分割する。それぞれのページは、固定された数のアドレスを含み、それらのアドレスは、オペレーティング・システムがそのアドレスを呼び出すまで、ディスクベースのストレージによって記憶されている。呼び出されると、オペレーティング・システムは、マッピングとして知られているプロセスで仮想アドレスを実アドレスに変換する。ディスクベースのストレージから主メモリに仮想ページをコピーすることは、ページングまたはスワッピングとして知られている。
【0003】
メモリ割振りは、リクエストに応答してメモリのブロックを割り当てるプロセスである。アロケータ(allocator)は、オペレーティング・システムからメモリを、少数の大きなブロックで受け取り、より小さなブロックを求めるリクエストを履行するためにそれらのブロックを分割する。アロケータは、返されたブロックを、将来の割振りリクエストを履行するためにオペレーティング・システムが使用することに対して使用可能にする。
【発明の概要】
【0004】
本開示の実施形態は、スケーリング可能な仮想メモリを管理するためのコンピュータ実施方法、関連するコンピュータ・システムおよびコンピュータ・プログラム製品に関する。このコンピュータ実施方法は、プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナ(metadata container)をインスタンス化することであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、インスタンス化すること、プロセッサによって、複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けすることであり、2つ以上のコンテナ・グループの各々が異なるロック(lock)によって制御される、グループ分けすることと、メモリ・オブジェクト・メタデータ(memory object metadata)をVMメタデータ・ブロックに割り振ることを求めるリクエストに応答して、プロセッサによって、最も少なく使用されているコンテナ・グループ(least used container group)(以後、最少使用コンテナ・グループ)に関して2つ以上のコンテナ・グループをスキャンすることと、プロセッサによって、最少使用コンテナ・グループ内の最も少なく使用されているVMメタデータ・コンテナ(least used VM metadata container)(以後、最少使用VMメタデータ・コンテナ)に関して最少使用コンテナ・グループに問い合わせることと、プロセッサによって、最少使用VMメタデータ・コンテナのVMメタデータ・ブロックにメモリ・オブジェクト・メタデータを割り振って、メモリ・オブジェクト・メタデータを割り振ることを求めるリクエストを履行することとを含む。
【0005】
本開示の実施形態は、スケーリング可能な仮想メモリを管理するためのコンピュータ実施方法、関連するコンピュータ・システムおよびコンピュータ・プログラム製品に関し、このコンピュータ実施方法は、プロセッサによって、1つまたは複数のVMメタデータ・コンテナを含む複数のコンテナ・グループを含むメタデータ・ブロック割振りに関するメモリ管理操作を実行することを求めるリクエストを受け取ることであり、複数のコンテナ・グループの個々のコンテナ・グループへのアクセスが異なるロックによって制御される、受け取ることと、プロセッサによって、第1のコンテナ・グループを制御する第1のロックを取得することと、プロセッサによって、メタデータ・ブロック割振りの部分である、第1のコンテナ・グループのVMメタデータ・ブロックによって格納されたメモリ・オブジェクト・メタデータに関する全てのメモリ管理操作を実行することと、プロセッサによって、第1のロックをリリースすることと、プロセッサによって、第2のコンテナ・グループを制御する第2のロックを取得することとを含む。
【0006】
本開示の代替実施形態は、スケーリング可能な仮想メモリを管理するためのコンピュータ実施方法、関連するコンピュータ・システムおよびコンピュータ・プログラム製品に関し、このコンピュータ実施方法は、プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化することであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された実物RAMを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、インスタンス化することと、プロセッサによって、複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けすることであり、2つ以上のコンテナ・グループの各々が異なるロックによって制御される、グループ分けすることと、プロセッサによって、メモリ・オブジェクトを拡張し、メモリ・オブジェクトのメモリ・オブジェクト・メタデータを格納することに対して割り振られたVMメタデータ・ブロックの数を増やすことを求めるリクエストを受け取ることと、プロセッサによって、メモリ・オブジェクトのメモリ・オブジェクト・メタデータを格納するための少なくとも1つのVMメタデータ・ブロックを以前に割り振る役割を担った第1のコンテナ・グループの第1のVMメタデータ・コンテナを決定することと、プロセッサによって、拡張することを求めるリクエストを履行するのに必要なメタデータ・ブロック必要量を計算することと、プロセッサによって、拡張することを求めるリクエストを履行するのに必要なメタデータ・ブロック必要量が、第1のVMメタデータ・コンテナの空きVMメタデータ・ブロックのサイズよりも大きいかどうかを判定することとを含む。
【0007】
本開示の一実施形態は、スケーリング可能な仮想メモリを管理するためのコンピュータ・システムならびに関連するコンピュータ実施方法コンピュータ・プログラム製品に関し、このコンピュータ・システムは、プロセッサと、少なくとも1つのプロセッサに結合されたコンピュータ可読ストレージ媒体とを備え、このコンピュータ可読ストレージ媒体は、コンピュータ実施方法を実行するプログラム命令を含み、このコンピュータ実施方法は、プロセッサによって、複数の仮想メモリ(VM)メタデータ・コンテナをインスタンス化することであり、VMメタデータ・コンテナの全数が、コンピュータ・システムに供給された全実物理メモリを仮想メモリとして表現するのに十分なVMメタデータ・ブロックを含む、インスタンス化することと、プロセッサによって、複数のVMメタデータ・コンテナを2つ以上のコンテナ・グループにグループ分けすることと、メモリ・オブジェクト・メタデータをVMメタデータ・ブロックに割り振ることを求めるリクエストに応答して、プロセッサによって、最少使用コンテナ・グループに関して2つ以上のコンテナ・グループをスキャンすることと、プロセッサによって、最少使用コンテナ・グループ内の最少使用VMメタデータ・コンテナに関して最少使用コンテナ・グループに問い合わせることとを含む。
【図面の簡単な説明】
【0008】
【
図1】本開示による、本明細書に記載された実施形態を実施することができるデータ処理システムの内部および外部構成要素のブロック図の一実施形態を示す図である。
【
図2a】本開示による、メモリ・オブジェクト・メタデータを割り振るためのコンピューティング環境の一実施形態のブロック図である。
【
図2b】本開示による、メモリ・オブジェクト・データを割り振るためのコンピューティング環境の代替実施形態のブロック図である。
【
図3a】仮想メモリに格納されたデータまたは命令の格納および取出しのためのコンピューティング環境の一実施形態のブロック図である。
【
図3b】仮想メモリに格納されたデータまたは命令の格納および取出しのためのコンピューティング環境の代替実施形態であって、コンピューティング環境が論理キャッシュを含む代替実施形態のブロック図である。
【
図3c】仮想メモリに格納されたデータまたは命令の格納および取出しのためのコンピューティング環境の別の代替実施形態であって、コンピューティング環境が物理キャッシュを含む別の代替実施形態のブロック図である。
【
図4a】本開示による、互いに並列に動作する事前にインスタンス化されたVMメタデータ・コンテナを実装する一実施形態を示すブロック図である。
【
図4b】本開示による、互いに並列に動作するVMメタデータ・コンテナのVMメタデータ・ブロックへのメモリ・オブジェクト・メタデータの割振りの分布を示すブロック図である。
【
図5】異なるロックによって個別に制御された複数のコンテナ・グループにわたって分散したメモリ・オブジェクト・メタデータを含み、コンテナ・グループによって仮想メモリ・オブジェクト・メタデータの管理に優先順位をつける、メタデータ・ブロック割振りの一実施形態を示すブロック図である。
【
図6】本開示による、メモリ・オブジェクト・メタデータを割り振るためのコンピューティング環境の別の代替実施形態のブロック図である。
【
図7】本開示による、アロケータがVMメタデータ・コンテナをインスタンス化するアルゴリズムの一実施形態を示す図である。
【
図8a】VMメタデータ・コンテナのVMメタデータ・ブロックへのメモリ・オブジェクト・メタデータの割振りを実施するアルゴリズムの一実施形態を示す図である。
【
図8b】メモリ・オブジェクト・メタデータを割り振るための追加のVMメタデータ・コンテナを生成するためのポスト・カーネル・プロセスを実施するアルゴリズムの一実施形態を示す図である。
【発明を実施するための形態】
【0009】
本明細書で使用されている用語は、特定の実施形態を記述することだけを目的としており、本開示を限定することを意図していない。本明細書で使用されるとき、単数形「a」、「an」および「the」は、文脈からそうでないことが明らかでない限り、複数形も含むことが意図されている。本明細書で使用されるとき、用語「備える(comprises)」もしくは「備える(comprising)」またはその両方は、記載された特徴、ステップ、動作、要素もしくは構成要素またはこれらの組合せの存在を明示するが、他の1つもしくは複数の特徴、ステップ、動作、要素、構成要素もしくはこれらのグループ、またはこれらの組合せの存在または追加を排除しないことも理解される。
【0010】
特許請求の範囲に記載された全ての手段またはステップおよび機能要素の対応する構造体、材料、動作および等価物は、特許請求の範囲に記載された他の請求の要素と組み合わせて機能を実行するための一切の構造体、材料または動作を含むことが意図されている。本開示の説明は例示および説明のために示したものであり、それらの説明が網羅的であること、または開示された形態に限定されることは意図されていない。当業者には、本開示の範囲を逸脱しない多くの変更および変形が明らかとなろう。実施形態は、本開示の原理および実際的用途を最もうまく説明するため、ならびに企図された特定の使用に適したさまざまな変更を有するさまざまな実施形態に関して他の当業者が本開示を理解することを可能にするために選択し、説明した。
【0011】
概要
本開示の実施形態は、仮想メモリ・メタデータ操作を管理するため、より詳細にはスケーリング可能な仮想メモリ管理のための効率的な方法、システムおよびコンピュータ・プログラム製品が求められていることを認識している。システム・メモリ、およびプロセッサ数もしくは処理パワーまたはこれらの組合せが増大するにつれて、異なるプロセスからのこのシステムに対する要求はスケールアップしている。システム・メモリ要求のスケーリングが増大するにつれて、既存のメモリ割振り技術は、仮想メモリ管理操作の性能の劣化に苦しむ。既存の仮想メモリ管理技術はしばしば、必要に応じてVMメタデータ・コンテナの生成を実施する。「VMメタデータ・コンテナ」は、アプリケーション、プログラムまたはプロセスによって使用されるメモリ・オブジェクトを記述することができるメタデータを格納する役割を担うVMメタデータ・ブロックを保持することができるコンテナを指すことがある。大量のメモリを含むコンピューティング・システムは、既存の物理メモリの全てを仮想メモリによって表現することができる十分なVMメタデータ・ブロックを獲得するために多数のVMメタデータ・コンテナを利用することがある。
【0012】
現在使用可能なVM管理技術は、コンピューティング・システムのVMメタデータ・コンテナの全てにまたがり、それらのVMメタデータ・コンテナへのアクセスを制御する単一のロックを使用してVMメタデータ・ブロックの割振りを制御する。VMメタデータ・コンテナへのメモリ・オブジェクト・メタデータの割振りは、「ファースト・フィット(first fit)」アルゴリズムに従うことがある。このアルゴリズムでは、メモリ・オブジェクト・メタデータを収容するのに十分な大きさを有する使用可能な最初のVMメタデータ・コンテナにメモリ・オブジェクト・メタデータが格納され、メモリ・オブジェクト・メタデータのスペース必要量を既存のVMメタデータ・コンテナが提供できない場合には後続のVMメタデータ・コンテナを追加することができる。VMメタデータ・コンテナは、仮想メモリ操作を管理するシステムによって必要に応じて生成されるため、1つのロックだけが生成および利用され、その結果、複数のメタデータ・コンテナが使用可能である可能性がある場合であっても一度に1つのVMメタデータ・コンテナだけが使用される。これによって、先頭のVMメタデータ・コンテナからメモリ・オブジェクト・メタデータが充填されることが起こりうる。なぜなら、仮想メモリ割振りを管理しているシステムは、十分なスペースを有する最初に見つかったメタデータ・コンテナを優先し、最初に見つかったそのメタデータ・コンテナを、それがいっぱいになるまで使用してから、次の使用可能なメタデータ・コンテナに移るためである。その結果、残りのメタデータ・コンテナは、システムがその空のメタデータ・コンテナに移り、空のVMメタデータ・コンテナをメモリ・オブジェクト・メタデータで埋め始めるまで、空のまままたはほぼ空のまま残されることがある。
【0013】
仮想メモリ管理によって使用されるファースト・フィット・アルゴリズムの不利な影響は、少量のメモリを有するシステムに関してはあまり顕著でないことがある。これは、少量のメモリを有するシステムは多数のVMメタデータ・コンテナを使用しないためである。しかしながら、本開示の実施形態は、大量のメモリを利用するシステムは多数のVMメタデータ・コンテナを生成すること、および、ファースト・フィット技術は単一のロックだけを取得する実施態様を使用するため、大量のメモリを利用するシステムは、それらのVMメタデータ・コンテナに互いに並列にアクセスすることができないことを認識している。本出願の実施形態は、大量のメモリを利用するシステムに対する仮想メモリ管理操作のスケーリングを改善し、その結果、ファースト・フィット・アルゴリズムを利用するシステムと比べたときに性能は向上し、仮想メモリ管理操作の劣化は小さくなる。本開示の実施形態は、複数のロッキング機構を使用することによって仮想メモリ・ロック機構の細分性(granularity)をさらに高め、それによって、システムが(一度に1つのVMメタデータ・コンテナを利用するのではなしに)複数のVMメタデータ・コンテナに並列にアクセスすることを可能にし、それによってメモリ割振り性能を向上させる。
【0014】
本開示の実施形態は、複数のVMメタデータ・コンテナを事前に、例えばシステムをブートするときにインスタンス化することができる。実施形態は、VMメタデータ・コンテナに供給される仮想メモリの全量が、システムが使用可能な実物理メモリ(例えばRAM)の量に等しくなるようなやり方でVMメタデータ・コンテナをインスタンス化することができる。例えば、システムが使用可能なRAMの全量が32TBである場合、全てのVMメタデータ・コンテナからの使用可能な仮想メモリの全量は32TBである。必要に応じて追加のメタデータ・コンテナを生成することができる。本明細書に開示されているように事前にインスタンス化されたVMメタデータ・コンテナを使用することにより、システムは、追加のVMメタデータ・コンテナを生成する必要が生じる前に、全ての物理メモリを仮想メモリとして割り振ることができることがある。本開示の実施形態は、インスタンス化するVMメタデータ・コンテナの数を決定するようにシステムのオペレーティング・システムを誘導する1つまたは複数のアルゴリズムに従うことができる。この決定は、使用可能なプロセッサおよびメモリ・リソースの量に基づくものとすることができ、1つまたは複数のVMメタデータ・コンテナをコンテナ・グループに入れることができ、VMメタデータ・コンテナのグループの各々を、システムによって取得された単一のロックに割り当てることができる。
【0015】
本開示の実施形態は、(「ファースト・フィット」アルゴリズムの代わりに)「最少使用」割振りアルゴリズムを利用することができる。本明細書に記載された「最少使用」技術は、VMメタデータ・コンテナの事前にインスタンス化されたグループを利用し、複数のコンテナ・グループのうちの1つにVMメタデータ・コンテナを、割り当てることができる。新たなメタデータ・ブロック割振りが要求されたときには、メモリ・アロケータが、VMメタデータ・コンテナに問い合わせることができる。このアロケータは、メタデータ・コンテナ・グループの使用レベルをサンプリングし、次いで、割振りリクエストを履行するために、そのコンテナ・グループ内の最も少なく使用されているメタデータ・コンテナまたはより少なく使用されているメタデータ・コンテナを選出することができる。サンプリング中、ロックの競合(lock contention)を最低限に維持するため、メタデータ・コンテナのロックが解放されている間に、アロケータは、メタデータ・コンテナまたはメタデータ・コンテナのグループをスキャンすることができる。その結果、等しい比率でまたはほぼ等しい比率で、ロックによって編成されたメタデータ・コンテナのグループをメモリ・オブジェクト・メタデータで埋めることができる。さらに、単一のロック内に複数のメタデータ・コンテナを含むコンテナ・グループを維持することによって、アロケータの実施形態は、メモリ・オブジェクト・メタデータで埋めるためのメタデータ・コンテナの最少使用グループ内の最少使用メタデータ・コンテナを選出することができる。
【0016】
本開示の実施形態はさらに、いくつかの状況では、メモリ・オブジェクトが拡張を要求することがあることを認識している。拡張は、VMメタデータ・ブロックの割振りを既に受けたメモリ・オブジェクトが使用し尽くしている仮想メモリの量を増大させることである。拡張リクエストを受け取ったアロケータの実施形態は、メモリ・オブジェクト・メタデータを受け取るために以前に割り振られた元のメタデータ・コンテナをターゲットとすることによって、拡張リクエストを履行することができる。ターゲットとしたメタデータ・コンテナ(以後、ターゲット・メタデータ・コンテナ)が、拡張リクエストを履行するための十分な空きスペースを含まない状況では、アロケータが最初にターゲットとしたターゲット・メタデータ・コンテナと同じコンテナ・グループ内の別のVMメタデータ・コンテナにメモリ・オブジェクト・メタデータを割り振り、同じコンテナ・グループ内のVMメタデータ・ブロックのメモリ・オブジェクトの割振りを維持することによって、アロケータは、リクエストを履行することができる。したがってアクセスは単一のロックによって制御される。メモリ・オブジェクト・メタデータを単一のロック内に保持することは、メモリ・オブジェクト割振りが複数のロックにまたがることによって起こりうるロック・スラッシング(lock thrashing)からの保護に役立ちうる。メモリ・オブジェクト割振りを単一のロック内に維持することは、操作を実行するためまたはメモリ・オブジェクト・メタデータにアクセスするために2つ以上のロックを取得する必要性を回避することによって、メモリ割振りの管理を最適化することができる。
【0017】
本開示の実施形態はさらに、拡張リクエストまたは新規のメモリ割振りが受け取られ、単一のロック内のVMメタデータ・コンテナがほぼいっぱいであるいくつかの状況では、メモリ・オブジェクト割振りを、単一のロックによって管理された単一のVMメタデータ・コンテナまたはVMメタデータ・コンテナのグループに限定することが、リクエストの時点で実行可能でないことがある。メモリ・オブジェクト・メタデータは、異なるコンテナ・グループ内の複数のVMメタデータ・コンテナにまたがっていることがある。同じロックを複数回取得しなければならないことを回避するため、本開示の実施形態は、メモリ管理操作を実行する前に、操作の実行を、コンテナ・グループに基づいて並べ替えることができる。メタデータ・ブロック割振りのためのメモリ操作を、メタデータ・ブロックが最初に割り振られた順序で実行する代わりに、VM操作は、取得した単一のロックの下にあるメモリ・オブジェクト・メタデータの全てを一度に管理することができ、次いで、操作の終わりにそのロックを解放することができ、ロックを再び取得しなおす必要性をなくすことができる。VMメタデータが割り振られたコンテナ・グループに基づいてVMメタデータ・ブロックをグループ分けすることができる。例えば、VMメタデータ・ブロックを、ロックa、bおよびcの下にある複数のVMメタデータ・コンテナに割り振ること、例えば最初の3つのブロックを「ロックa」に割り振り、4番目のブロックを「ロックb」に割り振り、5番目のブロックを「ロックc」に割り振り、6番目のブロックを「ロックb」に割り振ることができる。最初に、最初の3つのブロックに対する「ロックa」を取得し、次いで4番目のブロックに対するロックbを取得し、5番目のブロックに対するロックcを取得し、続いて6番目のブロックに対するロックbを再び取得しなおすことによって、VM管理操作を実行する代わりに、本開示の実施形態は、最初の3つのブロックに対する「ロックa」を取得し、最初の3つのメタデータ・ブロックを解放し、「ロックa」をリリースし、次いで「ロックb」を取得し、4番目のブロックおよび6番目のブロックを解放し、「ロックb」をリリースことによって、メモリ管理操作を実行することができる。4番目および6番目のブロックへの割振りが解放されたため、メモリ管理操作は、「ロックc」に位置する5番目のブロックをリリースした後に「ロックb」を再取得しなおさければならない代わりに、「ロックb」を完全にリリースすることができる。
【0018】
データ処理システム
本発明は、インテグレーションの可能な技術的詳細レベルにおいて、システム、方法もしくはコンピュータ・プログラム製品、またはこれらの組合せであることがある。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読ストレージ媒体を含むことがある。
【0019】
このコンピュータ可読ストレージ媒体は、命令実行デバイスが使用するための命令を保持および記憶することができる有形のデバイスとすることができる。このコンピュータ可読ストレージ媒体は例えば、限定はされないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光学ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイスまたはこれらの適当な組合せとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リードオンリー・メモリ(ROM)、消去可能なプログラマブル・リードオンリー・メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク・リードオンリー・メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー・ディスク、機械的にコード化されたデバイス、例えばパンチカードまたはその上に命令が記録された溝の中の一段高くなった構造体、およびこれらの適当な組合せを含む。本明細書で使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が一過性の信号、例えば電波もしくは他の自由に伝搬する電磁波、ウェーブガイドもしくは他の伝送体内を伝搬する電磁波(例えば光ファイバ・ケーブル内を通る光パルス)、または電線を通して伝送される電気信号であると解釈されるべきではない。
【0020】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から対応するそれぞれのコンピューティング/処理デバイスにダウンロードすることができ、あるいはネットワーク、例えばインターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークもしくは無線ネットワークまたはこれらの組合せを介して外部コンピュータもしくは外部ストレージ・デバイスにダウンロードすることができる。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータもしくはエッジ・サーバ、またはこれらの組合せを含むことができる。それぞれのコンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インタフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読ストレージ媒体に記憶するために転送する。
【0021】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、もしくは集積回路用のコンフィギュレーション・データであってもよく、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは同種のプログラミング言語などの手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組合せで書かれた、ソース・コードもしくはオブジェクト・コードであってもよい。このコンピュータ可読プログラム命令は、全体がユーザのコンピュータ上で実行されてもよく、一部がユーザのコンピュータ上で実行されてもよく、独立型ソフトウェア・パッケージとして実行されてもよく、一部がユーザのコンピュータ上で、一部がリモート・コンピュータ上で実行されてもよく、または全体がリモート・コンピュータもしくはリモート・サーバ上で実行されてもよい。上記の最後のシナリオでは、リモート・コンピュータが、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよく、またはこの接続が、外部コンピュータに対して(例えばインターネット・サービス・プロバイダを使用してインターネットを介して)実施されてもよい。いくつかの実施形態では、本発明の態様を実行するために、例えばプログラム可能論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA)またはプログラム可能論理アレイ(PLA)を含む電子回路が、このコンピュータ可読プログラム命令の状態情報を利用してその電子回路をパーソナライズすることにより、このコンピュータ可読プログラム命令を実行してもよい。
【0022】
本明細書では、本発明の態様が、本発明の実施形態による方法、装置(システム)およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方の図を参照して説明される。それらの流れ図もしくはブロック図またはその両方の図のそれぞれのブロック、およびそれらの流れ図もしくはブロック図またはその両方の図のブロックの組合せは、コンピュータ可読プログラム命令によって実施することができることが理解される。
【0023】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサ、または機械を形成する他のプログラム可能データ処理装置に、それらのコンピュータのプロセッサまたは他のプログラム可能データ処理装置によって実行されるこれらの命令が、これらの流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/操作を実施する手段を生成するような態様で、提供することができる。これらのコンピュータ可読プログラム命令はさらに、特定の方式で機能するようにコンピュータ、プログラム可能データ処理装置もしくは他のデバイスまたはこれらの組合せに指図することができるコンピュータ可読ストレージ媒体に、その中に命令が記憶されたコンピュータ可読ストレージ媒体が、これらの流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/操作の態様を実施する命令を含む製品を含むような態様で、記憶することができる。
【0024】
これらのコンピュータ可読プログラム命令はさらに、コンピュータ、他のプログラム可能装置または他のデバイス上で一連の動作ステップを実行させて、コンピュータによって実施されるプロセスを生成するために、このコンピュータ、他のプログラム可能データ処理装置または他のデバイス上に、このコンピュータ、他のプログラム可能装置または他のデバイス上で実施されるこれらの命令が、これらの流れ図もしくはブロック図またはその両方の図のブロックに指定された機能/操作を実施するような態様で、ロードすることができる。
【0025】
添付図中の流れ図およびブロック図は、本発明のさまざまな実施形態によるシステム、方法およびコンピュータ・プログラム製品の可能な実施態様のアーキテクチャ、機能および動作を示す。この点に関して、それらの流れ図またはブロック図のそれぞれのブロックは、指定された論理機能を実施する1つまたは複数の実行可能命令を含む、命令のモジュール、セグメントまたは部分を表すことがある。いくつかの代替実施態様では、ブロックに示された機能を、図に示された順序とは異なる順序で実行することができる。例えば、連続して示された2つのブロックが、実際は、1つのステップとして実施されること、または同時に、実質的に同時に、時間的に部分的に重なってもしくは時間的に完全に重なって実行されることがあり、あるいは、含まれる機能によってはそれらのブロックが時に逆の順序で実行されることもある。それらのブロック図もしくは流れ図またはその両方の図のそれぞれのブロック、およびそれらのブロック図もしくは流れ図またはその両方の図のブロックの組合せを、指定された機能もしくは操作を実行しまたは専用ハードウェアとコンピュータ命令の組合せを実施するハードウェアベースの専用システムによって実施することができることにも留意すべきである。
【0026】
本発明のさまざまな実施形態の説明は例示のために示したものであり、それらの説明が網羅的であること、または開示された実施形態に限定されることは意図されていない。当業者には、本発明の範囲を逸脱しない多くの変更および変形が明らかとなろう。本明細書で使用されている用語は、実施形態の原理、実際的用途、もしくは市場に出ている技術には見られない技術的改良を最もうまく説明するように、または本明細書に開示された実施形態を他の当業者が理解することができるように選択した。
【0027】
図1は、データ処理システム100のブロック図を示しており、データ処理システム100は、本明細書に記載されたコンピューティング操作を実行することができるコンピューティング・システムの簡略化された例であることがある。データ処理システム100は、
図2a~6に示されているコンピューティング環境200、290、600に示された本開示の実施形態による1つまたは複数のコンピューティング・システムまたはデバイスを表すことがある。
図1は、データ処理システム100の一実施態様を示しているだけであり、異なる実施形態を実施することができる環境に関する限定を意味するものではないことを理解すべきである。一般に、
図1に示された構成要素は、機械可読プログラム命令を実行することができる電子デバイスを表すことがある。
【0028】
図1はデータ処理システム100の一例を示しているが、データ処理システム100は、ベア・メタル・コンピュータ・システム(bare metal computer system)および仮想化されたコンピュータ・システムを含む多くの異なる形態をとることができる。例えば、データ処理システム100は、パーソナル・デスクトップ・コンピュータ・システム、ラップトップ、ノートブック、タブレット、サーバ、クライアント・システム、ネットワーク・デバイス、ネットワーク端末、シン・クライアント、シック・クライアント、キオスク、電話通信デバイス(例えばスマートフォン)、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、スマート・デバイスまたはインターネット・オブ・シングス(IoT)デバイスの形態をとることができる。データ処理システム100は、ネットワーク化されたコンピューティング環境もしくは分散クラウド・コンピューティング環境またはその両方で動作することができ、これらの環境は、本明細書に記載されたシステムもしくはデバイス、または当業者によって知られているもしくは当業者によって使用されている追加のコンピューティング・デバイスもしくはシステム、あるいはこれらの組合せを含むことができる。
【0029】
データ処理システム100は通信ファブリック(communications fabric)112を含むことができ、通信ファブリック112は、1つまたは複数のプロセッサ103、メモリ105、永続性ストレージ106、キャッシュ107、通信ユニット111および1つまたは複数の入力/出力(I/O)インタフェース115間の電子通信を提供することができる。通信ファブリック112は、プロセッサ103(例えばマイクロプロセッサ、通信およびネットワーク・プロセッサなど)、メモリ105、外部デバイス117およびデータ処理システム100内の任意の他のハードウェア構成要素間でデータをやり取りし、もしくは情報を制御し、またはその両方を実行するように設計されたアーキテクチャを有するように実装することができる。例えば、通信ファブリック112は、アドレス・バス305またはデータ・バス307などの1つまたは複数のバスとして実装することができる。
【0030】
メモリ105および永続性ストレージ106は、コンピュータ可読ストレージ媒体とすることができる。メモリ105の実施形態は、ランダム・アクセス・メモリ(RAM)およびキャッシュ107メモリを含むことができる。一般に、メモリ105は、揮発性または不揮発性の任意の適当なコンピュータ可読ストレージ媒体を含むことができ、メモリ105の中にプログラムされたファームウェアまたは他のソフトウェアを含むことができる。コンピュータ・システム100の対応するそれぞれのプロセッサ103のうちの1つまたは複数のプロセッサ103によって実行もしくはアクセスしまたは実行およびアクセスするために、プログラム114、ソフトウェア・アプリケーション223、ユーザ・プロセス221および本明細書に記載されたサービスを、メモリ105もしくは永続性ストレージ106またはその両方に記憶することができる。
【0031】
永続性ストレージ106は、複数の磁気ハード・ディスク・ドライブを含むことができる。磁気ハード・ディスク・ドライブの代わりに、または磁気ハード・ディスク・ドライブに加えて、永続性ストレージ106は、1つまたは複数の固体状態ハード・ドライブ、半導体ストレージ・デバイス、リードオンリー・メモリ(ROM)、消去可能なプログラマブルラム・リード・オンリー・メモリ(EPROM)、フラッシュ・メモリ、またはプログラム命令もしくはデジタル情報を記憶することができる任意の他のコンピュータ可読ストレージ媒体を含むことができる。永続性ストレージ106によって使用される媒体の実施形態はさらに、取外し可能であることができる。例えば、永続性ストレージ106に対して取外し可能なハード・ドライブを使用することができる。他の例は、やはり永続性ストレージ106の部分である別のコンピュータ可読ストレージ媒体に転送するためにドライブに挿入された光学および磁気ディスク、サム・ドライブならびにスマート・カードを含む。
【0032】
通信ユニット111は、データ処理システム100間の電子通信、例えば通信ネットワーク250を介した1つまたは複数のコンピュータ・システムまたはデバイス間の電子通信を容易にする。この例示的な実施形態では、通信ユニット111が、TCP/IPアダプタ・カード、無線Wi-Fiインタフェース・カード、3G、4Gもしくは5G無線インタフェース・カード、または他の有線もしくは無線通信リンクなどのネットワーク・アダプタまたはインタフェースを含むことができる。通信ネットワークは、例えば銅線、光ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、エッジ・サーバもしくは他のネットワーク・ハードウェア、またはこれらの組合せを含むことができ、この他のネットワーク・ハードウェアは、デバイス、ホスト・システム201、端末もしくは他のネットワーク・コンピュータ・システムを含む通信ネットワークのノードの部分であることができ、またはそのようなノードに接続することができる。通信ユニット111を通して(例えばインターネット、ローカル・エリア・ネットワークまたは他のワイド・エリア・ネットワークを介して)、本発明の実施形態を実施するために使用されるソフトウェアおよびデータを、ネットワーク環境で動作するコンピュータ・システムにダウンロードすることができる。通信ユニット111から、ソフトウェアおよびプログラム114のデータを永続性ストレージ106にロードすることができる。
【0033】
1つまたは複数のI/Oインタフェース115は、データ処理システム100に接続することができる他のデバイスとのデータの入出力を可能にすることができる。例えば、I/Oインタフェース115は、1つもしくは複数のスマート・デバイス、IoTデバイス、記録デバイス、例えば音声システム、カメラ・システム、1つもしくは複数のセンサ・デバイス、入力デバイス、例えばキーボード、コンピュータ・マウス、タッチ・スクリーン、仮想キーボード、タッチパッド、ポインティング・デバイス、または他のヒューマン・インタフェース・デバイスなどの1つまたは複数の外部デバイス117への接続を提供することができる。外部デバイス117はさらに、例えばサム・ドライブ、ポータブル光または磁気ディスクおよびメモリ・カードなどのポータブル・コンピュータ可読ストレージ媒体を含むことができる。I/Oインタフェース115は、人間可読のディスプレイ(human-readable display)118に接続することができる。人間可読のディスプレイ118は、ユーザにデータを表示する機構を提供し、例えばコンピュータ・モニタまたはスクリーンとすることができる。人間可読のディスプレイ118はさらに、組込み型ディスプレイとすることができ、タブレット・コンピュータの内臓ディスプレイなどのタッチ・スクリーンとして機能してもよい。
【0034】
仮想メモリ・メタデータの割振りを管理するためのシステム
図面を参照すると、
図2a~6は、1つまたは複数のVMメタデータ・コンテナ402a~402f(総称して「VMメタデータ・コンテナ402」と呼ぶ)を使用してメモリ・オブジェクトへの仮想メモリの割振りを管理するためのシステム、方法およびコンピュータ・プログラム製品を実施するために、コンピューティング環境200、290、600内で動作する1つまたは複数のデータ処理システム100を使用して実行することができる手法を示している。コンピューティング環境200、290、600の実施形態は、デバイス・ネットワーク250を介して相互接続された1つまたは複数のデータ処理システム100を含むことができる。デバイス・ネットワーク250に接続されたデータ処理システム100は、専門システムまたはデバイスとすることができ、この専用システムまたはデバイスは、限定はされないが、1つもしくは複数のホスト・システム201または1つもしくは複数のクライアント・システム227a、227b...227n(総称してクライアント・システム227と呼ぶ)あるいはその両方の相互接続を含むことができ、この1つもしくは複数のクライアント・システム227a、227b...227nは、データを処理しまたは命令を入力するためにホスト・システム201のリソースを要求および利用していることがあり、このデータの処理または命令の入力は、ユーザ・プロセス221、アプリケーション223、プログラム114またはサービスの1つまたは複数のメモリ・オブジェクトのためのデータおよび命令を記憶するために仮想メモリの割振りを必要とすることがある。
【0035】
図2a~6の実施形態に例示されているデータ処理システム100は、
図2a~6の図面に示されているシステムおよびデバイスの要素を備えるだけではなく、示された専門データ処理システムはさらに、
図1に示された上述のデータ処理システム100の1つまたは複数の構成要素も含むことができる。これらの図に完全には示されていないが、データ処理システム100の1つまたは複数の構成要素を、ホスト・システム201もしくはクライアント・システム227の実施形態またはその両方の実施形態にシステム・ハードウェア203として統合することができ、これには、(限定はされないが)1つまたは複数のプロセッサ103、プログラム114、メモリ105、永続性ストレージ106、キャッシュ107、通信ユニット111、入力/出力(I/O)インタフェース115、外部デバイス117および人間可読のディスプレイ118の統合が含まれる。
【0036】
コンピューティング環境200のこの実施形態は、ホスト・システム201の一実施形態の構成要素を示すブロック図を示しており、コンピューティング環境290は、ネットワーク250を通じて1つまたは複数のクライアント・システム227と通信している
図2aのホスト・システム201のブロック図を示している。用語「ホスト・システム」201は、コンピュータ・ネットワークに接続されたコンピュータまたは他のデバイスなどのデータ処理システム100を指すことがあり、ホスト・システム201に接続しているクライアント・システム227のユーザに、コンピューティング・リソース、サービス、ユーザ・プロセス221、アプリケーション223、プログラム114などへのアクセスを提供することができる。例えば、ホスト・システム201は、ウェブ・ホスト、クラウド・ホスト、仮想ホスト、リモート・ホストもしくはメインフレーム・コンピュータ、またはこれらの組合せとして動作するサーバ(実または仮想サーバ)であることができる。ホスト・システム201に接続しているクライアント・システム227は、ネットワーク250を通じてホスト・システム201に接続し、ホスト・システム201によって提供された使用可能なリソースにアクセスすること、例えば1つまたは複数のプログラム114、アプリケーション223、ユーザ・プロセス221、サービスなどにアクセスすることができるコンピュータ・システム、コンピューティング・デバイスまたは別のタイプのデータ処理システム100とすることができる。
【0037】
ネットワーク250の実施形態は、ホスト・システム201をクライアント・システム227に連結することができ、有線、無線または光ファイバ接続を使用して構築することができる。ホスト・システム201、クライアント・システム227および他のデータ処理システム100の実施形態は、ネットワーク250を通じ、ネットワーク・インタフェース・コントローラ、ネットワーク・インタフェース・カード、またはネットワーク250との接続を容易にすることができる他のネットワーク通信デバイスなどの通信ユニット111を介して接続および通信することができる。コンピューティング環境200、290、600のいくつかの実施形態では、1つまたは複数のホスト・システム201およびクライアント・システム227が、ネットワーク250を通してアクセスされたときに継ぎ目のないリソース(seamless resources)の単一のプールの働きをするクラスタ化されたコンピュータおよび構成要素を利用するデータ処理システム100を表していることがある。このような実施形態は、例えば、データ・センタ、クラウド・コンピューティング、ストレージ・エリア・ネットワーク(SAN)およびネットワークアタッチト・ストレージ(network-attached storage)(NAS)用途で使用することができる。
【0038】
通信ユニット111の実施形態は、特定の物理層およびデータリンク層規格を使用して、例えばイーサネット、ファイバ・チャネル、Wi-Fiまたはトークン・リングを使用して、ネットワーク250に接続されたホスト・システム201、クライアント・システム227および他のデータ処理システム100間でデータを伝送する通信を可能にする専門電子回路を実装することができる。通信ユニット111はさらに、ネットワーク250の通信チャネルを通して一緒に連結されたホスト・システム201、クライアント・システム227および他のデータ処理システム100のグループとネットワーク250を通じて通信することを可能にする完全なネットワーク・プロトコル・スタックを可能にすることができる。ネットワーク250は、ネットワーク250に接続されたホスト・システム201、クライアント・システム227および他のデータ処理システム100(例えばネットワーク・アクセスが可能なストレージ媒体)間での通信およびリソース共用を容易にすることができる。ネットワーク250の例は、ローカル・エリア・ネットワーク(LAN)、ホーム・エリア・ネットワーク(HAN)、ワイド・エリア・ネットワーク(WAN)、バックボーン・ネットワーク(BBN)、ピア・ツー・ピア・ネットワーク(P2P)、構内ネットワーク、企業ネットワーク、インターネット、クラウド・コンピューティング・ネットワークおよび当業者に知られている他のネットワークを含むことができる。
【0039】
図面に戻ると、
図2aは、仮想メモリ、メモリ・オブジェクトおよびVMメタデータ・ブロック割振りリクエストを管理することができるホスト・システム201の一実施形態を説明するブロック図を示している。図面によって示されているように、仮想メモリおよびVMメタデータの割振りを管理する役割を担うホスト・システム201(または他のタイプのデータ処理システム100)は、示されている抽象化層のうちの1つまたは複数の抽象化層を含むことができる。例えば、ホスト・システム201の実施形態は、システム・ハードウェア203層、オペレーティング・システム205層(この層はカーネル206を含むことができる)およびユーザ・スペース207層を含むことができる。システム・ハードウェア203の実施形態は、ホスト・システム201の1つまたは複数の物理構成要素を含むことができ、それらの1つまたは複数の物理構成要素は、ホスト・システム201が利用することができるコンピュータ・リソースを提供することができ、ならびに/あるいは、例えばクライアント・システム227に割り当てられた1つまたは複数の仮想化されたコンピューティング・システムを生成することによって、リソースへのアクセスを要求している1つまたは複数のクライアント・システム227、あるいはホスト・システム201によって提供されている1つもしくは複数のアプリケーション223、プログラム114および/またはサービスにアクセスしている1つまたは複数のクライアント・システム227に供給することができるコンピュータ・リソースを提供することができる。システム・ハードウェア203層に見られるシステム・ハードウェア203の例は、図示されているように、(限定はされないが)1つもしくは複数のプロセッサ103、メモリ105、永続性ストレージ106またはI/Oインタフェース115あるいはこれらの組合せを含むことができる。
【0040】
ユーザ・スペース207層の実施形態は、実行中のアプリケーション223、ユーザ・プロセス221、プログラム114、サービスおよび他のソフトウェアに割り振られた、ホスト・システム201のメモリ105の一部分とすることができる。いくつかの実施形態では、ユーザ・スペース207が、オペレーティング・システム205のカーネル206の外側で実行するコードの全てを指すことがある。ユーザ・スペース207は、さまざまなプログラム114、サービスもしくはアプリケーション223またはこれらの組合せを含むことができるだけでなく、ユーザ・スペース207のソフトウェア・コードとカーネル206とをインタフェースするためにオペレーティング・システム205がアクセスすることができる1つまたは複数のライブラリ224を含むこともできる。ホスト・システム201によってアプリケーション223および他のソフトウェアが開かれているとき、オペレーティング・システム205(「OS205」)の実施形態は、プログラム114および任意の必要なリソースを、プラグインおよびライブラリ224とともにユーザ・スペース207にロードすることができる。ユーザ・スペース207の実施形態は、メモリ105の量が増大するにつれて増大することができる。例えば、ホスト・システム201のRAMもしくは使用可能な他のタイプの物理メモリ301またはその両方を増大させることにより、複数のアプリケーション223を同時に実行することに対して、より多くのユーザ・スペース207を使用可能にすることができる。
【0041】
オペレーティング・システム205層の実施形態は、オペレーティング・システム205のカーネル206を含め、オペレーティング・システム205を含むことができる。OS205の実施形態は、システム・ハードウェア203のリソース、システム・ハードウェア203のリソースにアクセスするためおよび1つまたは複数のクライアント・システム227とのそれらのリソースの共用を容易にするためのデバイスに依存しないインタフェースを管理することができる。OS205は、ユーザがアクセスしているシステム・プログラム114およびアプリケーション223間でのシステム・ハードウェア203の使用を調整することができる。いくつかの実施形態では、OS205がカーネル206を含むことができる。カーネル206は、オペレーティング・システム205の中心モジュールであることがある。カーネル206は、ユーザ・スペース207内で実行されることがあるプログラム114、アプリケーション223、ユーザ・プロセス221、サービスなどから独立して実行することができる。カーネル206は、ホスト・システム201のメモリ105にロードすることができ、しばしば、ホスト・システム201または他のデータ処理システム100をブートするときにロードされるOS205の最初の部分である。カーネル206の実施形態は、メモリ105にロードされた後、必須のサービス、アプリケーションおよびオペレーティング・システム205の部分を実行するため、メモリ105内に留まることができる。カーネル206は、ユーザ・スペース207内で実行されているソフトウェアにシステム・ハードウェア203を接続する役割を担うことがある。カーネル206によって提供されるプログラムおよびサービスの例は、(限定はされないが、)アプリケーション223を実行するためのプロセス/タスク管理209、仮想メモリおよびメモリ・オブジェクト・メタデータの割振りを制御するための仮想メモリ・マネージャ213、デバイス・ドライバの使用を通したデバイス管理217、ならびにハード・ディスクおよび固体状態ドライブなどの永続性ストレージ106のスペースの割振りを管理するためのファイル・システム・マネージャ219を含むことができる。
【0042】
仮想メモリ・マネージャ213の実施形態は、ホスト・システム201のメモリ割振りプロセスを担当することができる。メモリ割振りは、アプリケーション223、プログラム114、サービスおよび他の形態のソフトウェアを仮想メモリ・スペースもしくは物理メモリ・スペースまたはその両方に割り当てるプロセスである。いくつかの実施形態では、メモリ割振りが主としてシステム・ハードウェア203の動作であることがあるが、OS205もしくはソフトウェア・アプリケーションまたはその両方によって管理されることもある。プログラム114、アプリケーション223およびサービスに、メモリ105内の特有アドレスを、実行されているプログラム114、アプリケーション223またはサービスの必要量に従って割り当てることができ、実行されたソフトウェアが操作を終えた後に、または実行されたソフトウェアがアイドル状態にあるときに、メモリ105をリリースすること、もしくはメモリ105を別のソフトウェアに割り振ること、またはその両方を実行することができ、あるいはメモリ105をホスト・システム201の主メモリ105とマージすることができる。
【0043】
ホスト・システム201などのデータ処理システム100は、システムに導入された全物理メモリ301よりも多くのメモリ105をアドレス指定することができる。この追加のメモリは仮想メモリと呼ばれることがある。仮想メモリの実施形態は、永続性ストレージ106デバイスの部分またはセクションとして展開することができる。例えば、ホスト・システム201のメモリ105をエミュレートすることに専念する仮想メモリ・セクションを有するようにハード・ディスクをセットアップすることができ、ハード・ディスクは、例えば永続性ストレージ106デバイス上でRAMをエミュレートすることによって仮想メモリ・スペースを提供することができる。仮想メモリ・スキームを使用することによって、ユーザ・スペース207で実行しているプログラム114、アプリケーション223および他のソフトウェアを物理メモリ301よりも大きくすること、永続性ストレージ106を使用することによってホスト・システム201が物理メモリ301の使用を拡張することを可能にすること、および、さらに、仮想メモリのそれぞれの仮想アドレスが物理アドレスに変換されるため、メモリ105の保護を提供することができる。仮想メモリ・マネージャ213の実施形態は、ページ・ファイル(または「スワップ・ファイル」)と呼ばれるメモリ105イメージを永続性ストレージ106上に生成することができ、OS205は、永続性ストレージ106上の仮想メモリ位置を、あたかもその仮想メモリが物理メモリ301上に記憶されているかのようにアドレス指定することができる。物理メモリ301が記憶していないメモリ・ブロックをOS205が要求するたびに、仮想メモリ・マネージャ213は、最近使用されていないメモリ・ブロックを物理メモリ301から取り出し、それをページング・ファイルに書き込むことができる。仮想メモリ・マネージャ213はさらに、OS205が要求したメモリ・ブロックをそのページング・ファイルから読み出すことができる。仮想メモリ・マネージャ213は次いで、そのメモリ・ブロックをそのページング・ファイルから取り出し、それを、最近使用されていない古いブロックの代わりに物理メモリ301に移動させることができる。このプロセスは、物理メモリ301のページ・ファイルを、永続性ストレージ106によって仮想メモリとして記憶されたページ・ファイルと交換(スワップ)するため、スワッピングと呼ばれることがある。
【0044】
図3aを参照すると、永続性ストレージ106内のページ・ファイルを物理メモリ301に記憶されたページ・ファイルと交換するために仮想メモリ技術がどのようにスワッピングを使用するのかを示す一例が示されている。この図面に示されているように、プロセッサ103は、物理メモリ301のアドレスからメモリ・ブロック(すなわちアプリケーション223によって使用されるメモリ・オブジェクト)を、例えばアドレス・バス305を介して要求する。そのページ・ファイルが、物理メモリ301上ではなく永続性ストレージ106上に置かれている場合、仮想メモリのそのページ・ファイルを物理メモリ301のアドレスにスワップすることができ、そのデータを、データ・バス307を通してプロセッサ103に返すことができる。いくつかの実施形態では、プロセッサ103が、システム・ハードウェア203の中に構築されていることがあるメモリ管理ユニット(memory management unit)303(MMU)を使用することができる。MMU303は、永続性ストレージ106の仮想メモリに保持されたページ・ファイルの位置を記述した論理アドレスを、物理メモリ301の物理アドレスに変換する機能を実行することができる。MMU303の実施形態は、要求されたメモリ・ブロックを物理メモリ301から取り出すために
図3a~3cに示されているように仮想アドレスを物理アドレスに変換する機能もしくはタスク、またはページ・ファイルを永続性ストレージ106から物理メモリ301にスワップする機能もしくはタスク、あるいはその両方の機能もしくはタスクを実行することができる。仮想メモリ管理中にMMU303によって頻繁に使用されている論理もしくは物理アドレスまたは最近使用された論理もしくは物理アドレスの取出しを改善するため、いくつかの実施形態では、ホスト・システム201にキャッシュ107を含めることができる。例えば、MMU303は、物理アドレスに変換する最近使用された論理アドレスまたは頻繁に使用されている論理アドレスを取り出すために論理キャッシュ(
図3bに示されている)にアクセスすることができる。同様に、変換された論理アドレスに対応する頻繁に使用されている物理アドレスのより速い探索を提供するために、物理キャッシュ(
図3cに示されている)を含めることもできる。
【0045】
いくつかの実施形態では、ホスト・システム201の仮想メモリ・マネージャ213がアロケータ215を含むことができる。アロケータ215の実施形態は、メモリ・オブジェクト(アプリケーション223によって使用されるメモリ・ブロック)と、ユーザ・スペース207内に展開されたアプリケーション223またはソフトウェアに割り振るためにホスト・システム201が使用可能な空きメモリ・ブロックとを管理することに関連したタスクまたは機能を実行する役割を担うことができる。アロケータ215が管理しているメモリ・オブジェクトおよび空きメモリ・ブロックをより効率的に管理するために、アロケータ215の実施形態は、アロケータ215がアクセス可能な仮想メモリのチャンク(chunk)を記述した(本明細書では「メモリ・オブジェクト・メタデータ」と呼ぶ)メタデータを生成および格納することができる。例えば、メタデータは、物理または仮想メモリによって記憶されたメモリ・オブジェクトのサイズ、ステータスおよびポインタ・アドレスを記述することができる。アロケータ215の実施形態は、メモリ・オブジェクト・メタデータを編成すること、および管理している仮想メモリ・ブロックを記述したメタデータ専用の1つまたは複数のVMメタデータ・ブロックにメモリ・オブジェクト・メタデータを格納することができる。いくつかの実施形態では、VMメタデータ・ブロックを、メモリ・オブジェクトへの割振りに対して使用可能な仮想メモリのチャンクのヘッダとすることができる。
【0046】
図4a~4bの例に示されているように、VMメタデータ・ブロックの実施形態は、アロケータ215によって、1つまたは複数のVMメタデータ・コンテナ402a~402f(総称してVMメタデータ・コンテナ402と呼ぶ)に編成されていることがある。VMメタデータ・コンテナ402の実施形態は、複数のVMメタデータ・ブロックを含むことができる。1コンテナごとのVMメタデータ・ブロックの数は、ホスト・システム201が使用可能な物理メモリ301の総量、VMメタデータ・コンテナ402のサイズ、およびホスト・システム201によって生成されたVMメタデータ・コンテナ402の数によって変動することがある。いくつかの実施形態では、オペレーティング・システム205によって、VMメタデータ・コンテナ402のサイズおよび数を自動的に決定することができる。代替実施形態では、オペレーティング・システム205によって生成されるVMメタデータ・コンテナの格納サイズもしくは数またはその両方をユーザが指定することができる。したがって、アロケータ215が使用可能な、1VMメタデータ・コンテナ402ごとのVMメタデータ・ブロックの数は、ホスト・システム201、コンピューティング環境、およびVMメタデータ・コンテナ402をインスタンス化する方法によって変動することがある。
【0047】
図4aに示された例示的な実施形態では、オペレーティング・システム205によってインスタンス化されたVMメタデータ・コンテナ402のサイズおよび数が、ホスト・システム201が使用可能な物理メモリ301の全量を仮想メモリとして表現するのに十分なVMメタデータ・コンテナ402を含むことができる。全物理メモリ301の全量を一度に表現するのに十分なVMメタデータ・コンテナ402をインスタンス化することによって、アロケータ215は、新規のコンテナ403の生成を要求する前に、全物理メモリ301を仮想メモリとして割り振ることができることがある。ホスト・システム201がブートアップする時点で全物理メモリ301を仮想メモリとして表現するため、アロケータ215の実施形態は、VMメタデータ・コンテナの全数を事前にインスタンス化しておくことができる。VMメタデータ・コンテナ402のインスタンス化がオペレーティング・システム205によって決定される実施形態では、VMメタデータ・コンテナ403のインスタンス化を、VMメタデータ・コンテナ402の最適数もしくはVMメタデータ・コンテナ402のサイズまたはその両方を決定するアルゴリズムに基づいて、ホスト・システム201が使用可能なプロセッサ103およびメモリ105リソースの量に従って実施することができる。例えば、単一のVMメタデータ・コンテナが128GBの仮想メモリを含むことをOS205が選択した場合には、物理メモリ301の全量を、単一のVMメタデータ・コンテナ402の選択されたサイズで割ることによって、インスタンス化するVMメタデータ・コンテナ402の全数を決定することができる。例えば、ホスト・システム201が1024GBの物理メモリ301を含む場合、オペレーティング・システムは、個別に1つが128GBを表す8つのVMメタデータ・コンテナをインスタンス化することができる。
【0048】
単一のメタデータ・コンテナ402のサイズを調整することにより、これよりも多くのまたはこれよりも少数の個々のVMメタデータ・コンテナ402をインスタンス化することができることを当業者は認識するであろう。例えば、個々のVMメタデータ・コンテナ402に128GBを割り振る代わりに、単一のVMメタデータ・コンテナに64GBを割り振ることができる。このようにすると、オペレーティング・システム205は、全体で1024GBの物理メモリ301を完全に表現するために、1024GBの物理メモリ301を含むホスト・システムを、16個のVMメタデータ・コンテナ402を含むようにインスタンス化することができる。同様に、いくつかの実施形態では、ユーザが、単一のメタデータ・コンテナ402の所望のサイズを入力することができ、ホスト・システム201の全物理メモリ301に応じて、オペレーティング・システム205は、ユーザが定めたサイズに個々に対応する複数のVMメタデータ・コンテナ402を生成することができる。このユーザが定めたサイズは、ホスト・システムの物理メモリ301の全量を反映したものとなろう。
【0049】
図4aに示されているように、ホスト・システム201によってインスタンス化された複数のVMメタデータ・コンテナ402をさらに、複数のコンテナ・グループ407a~407d(図面には「グループ407a」から「グループ407d」として示されており、本明細書では総称してコンテナ・グループ407と呼ぶ)に編成することができる。それぞれのコンテナ・グループ407を、そのコンテナ・グループへのアクセスを制御するロックに割り当てることができる。
図4a~4bに示された例示的な実施形態では、VMメタデータ・コンテナ402が2つ以上のコンテナ・グループ407に編成される。単一のロックを使用して全てのVMメタデータ・コンテナ402へのアクセスを制御する代わりに、VMメタデータ・コンテナ402を2つ以上のコンテナ・グループ407に分割することによって、2つ以上のロックは、割り当てられたコンテナ・グループへのアクセスを独立して制御することができ、複数の並列メモリ割振り操作を可能にすることを実行することができる。単一ロック・システム下では、次のメモリ割振り操作に移る前に、進行中のそれぞれのメモリ割振り操作が実行されるのを待たなければならないことにより、ホスト・システム201が妨げられることがある。
図4aの実施形態によって示されているように、オペレーティング・システム205によって事前にインスタンス化されたVMメタデータ・コンテナ402は、3つの別個のコンテナ・グループ407a、407b、407cに分割されており、さらに個々のコンテナ・グループ407は、1コンテナ・グループ407につき2つのVMメタデータ・コンテナ402を含む。
図4aに示されたこの例には、1コンテナ・グループにつき2つのVMメタデータ・コンテナ402だけを有する3つのコンテナ・グループ407だけが示されているが、1コンテナ・グループ407ごとに任意の数のVMメタデータ・コンテナ402をインスタンス化することができる。例えば、個々のコンテナ・グループ407の各々に、3、4、5、10、15、20個などまたはそれよりも多くのVMメタデータ・コンテナ402を割り当てることができる。さらに、VMメタデータ・コンテナ402を編成するために任意の数のコンテナ・グループ407を取得することができる。例えば、オペレーティング・システム205は、複数のVMメタデータ・コンテナ402を、2、4、6、12、25、50、100個などまたはそれよりも多くのコンテナ・グループ407に編成することができる。さらに、オペレーティング・システム205によって新規のVMメタデータ・コンテナ403が生成されたときには、この新規のVMメタデータ・コンテナ403を、割り当てられたロック407a、407b、407cによって制御された既存のコンテナ・グループに追加すること、または新たに取得されたロック407dによって制御された新規のコンテナ・グループ407dに編成することができる。
【0050】
いくつかの実施形態では、
図4aに示されているように、取得したコンテナ・グループ407の各々が、等しい数のVMメタデータ・コンテナ402を含むことができる。いくつかの例では、1コンテナ・グループ407ごとのVMメタデータ・コンテナ402の数を非対称に編成することができ、一部のコンテナ・グループ407は、他のコンテナ・グループ407よりも多くのまたは少数のVMメタデータ・コンテナ402を含むことができる。VMメタデータ・コンテナ402の数を非対称にする理由はシステムによって異なることがある。例えば、ホスト・システムの全物理メモリ301を仮想メモリとして表現するために、インスタンス化された奇数個のVMメタデータ・コンテナがあることがある。
図4aに示されているものなどの他の例では、新規のメタデータ・コンテナ403の生成が、コンテナ・グループ407間のVMメタデータ・コンテナ402の以前の対称性を乱すことがある。例えば、
図4aでは、コンテナ・グループ407a、407bおよび407cが2つのメタデータ・コンテナ402a~402fを含むが、新規のVMメタデータ・コンテナ403が生成されてコンテナ・グループ407dに入れられた後は、コンテナ・グループ407dが、(少なくとも次のVMメタデータ・コンテナ402が生成されるまで)1つの新規のVMメタデータ・コンテナ403だけを含む。いくつかの例では、
図4aに示されているように1つの新規のVMメタデータ・コンテナ403を生成する代わりに、一度に複数の新規のVMメタデータ・コンテナ403を生成すること、例えばコンテナ・グループ407dに割り当てられた2つの新規のVMメタデータ・コンテナ403を生成することができる。
【0051】
アロケータ215の実施形態は、割振りアルゴリズムに従ってVMメタデータ・ブロックをVMメタデータ・コンテナ402に割り振ることができる。アロケータ215によって使用される割振りアルゴリズムの例示的な実施形態は、メモリ・オブジェクトを記述したメタデータを最少使用VMメタデータ・コンテナ402内のVMメタデータ・ブロックに割り振るアルゴリズムを使用してメモリ・オブジェクト・メタデータをVMメタデータ・ブロックに割り振るアルゴリズムに従うことによって、
図4aに示されているように、割り当てられたロックによって制御された複数コンテナ・グループ407システムを利用することができる。VMメタデータ・コンテナ402を順番に埋めることに帰着する、メタデータを割り振る上述の第1の使用可能なアルゴリズムとは対照的に、メタデータを最少使用メタデータ・コンテナ402に割り振ると、
図4bに示されているように、VMメタデータ・コンテナ402がVMメタデータ・ブロックを、コンテナ・グループ407を横切ってより均等に割り振る。
図4bの例示的な実施形態では、複数のコンテナ・グループ407a~407cにまたがるVMメタデータ・コンテナ402a~402f間で、割振り済みのVMメタデータ・ブロック408a~408fが均等に(またはほぼ均等に)分散している。新規のメタデータ・ブロック割振りが要求されると、アロケータ215は、スキャンを実行することによって、コンテナ・グループ407の使用レベルもしくはコンテナ・グループ407内のVMメタデータ・コンテナ402の使用レベルまたはその両方をサンプリングするタスクを実行することができる。このサンプリング・スキャンの結果に基づいて、アロケータ215の実施形態は、複数のコンテナ・グループ407の中の最少使用コンテナ・グループ407であるコンテナ・グループ407を選択することができる。いくつかの実施形態では、ロックの競合を最小限に維持するため、使用レベルのサンプリング・スキャン中にロックを取得することなく、アロケータ215がコンテナ・グループ407をスキャンすることができる。このサンプリング・スキャンは簡単なものであってもまたは非網羅的なものであってもよく、コンテナ・グループ407内のVMメタデータ・コンテナ402の使用レベルの迅速な近似を提供するものとすることができる。サンプリング・スキャンの実施形態は、必ずしも最少使用コンテナ・グループ407の絶対測定値を提供しなくてもよく、推定される使用レベルを提供するものであってもよい。最少使用コンテナ・グループ407を識別した後、アロケータ215は、割振りリクエストを履行するのに十分なVMメタデータ・ブロックを含むコンテナ・グループ407内の1つまたは複数のVMメタデータ・コンテナ402に対する割振りリクエストの履行をターゲットとすることができる。アロケータ215は、最少使用コンテナ・グループ407内の最少使用VMメタデータ・コンテナ402のVMメタデータ・ブロックにメモリ・オブジェクト・メタデータを格納することができる。
【0052】
アロケータ215の実施形態はさらに、既に既存のメモリ・オブジェクト・メタデータがVMメタデータ・ブロックに割り当てられているメモリ・オブジェクトを拡張することを求めるリクエストを対象とする仮想メモリ管理機能に関連したタスクを実行することができる。アロケータ215は、最初に、既存のメモリ・オブジェクトのメタデータをVMメタデータ・ブロックに既に格納している1つまたは複数のVMメタデータ・コンテナ402をターゲットとすることによって、その既存のメモリ・オブジェクトを拡張することを求めるリクエストを履行することができる。アロケータ215は、そのメモリ・オブジェクトに関連した既存のメモリ・オブジェクト・メタデータを含むVMメタデータ・コンテナ402をスキャンし、そのメモリ・オブジェクトのメタデータを以前に格納したVMメタデータ・コンテナ402と同じVMメタデータ・コンテナ402を使用してアロケータ215が拡張リクエストを履行することができるかどうかを判定することができる。以前に使用したそのVMメタデータ・コンテナ402に十分な空きスペースが存在しない場合、アロケータ215は、以前に使用したVMメタデータ・コンテナ402と同じコンテナ・グループ407内の別のVMメタデータ・コンテナ402を使用してリクエストを履行することを試みることができる。例えば、アロケータ215が以前に、VMメタデータ・コンテナ402a内のVMメタデータ・ブロックにメタデータを割り振ったメモリ・オブジェクトを、拡張リクエストが拡張しようとしている場合、アロケータ215は、VMメタデータ・コンテナ402aをスキャンして、拡張リクエストを履行するのに十分なVMメタデータ・ブロックがあるかどうかを判定する。十分な空きスペースが使用可能である場合、アロケータは、そのメモリ・オブジェクトのメタデータをVMメタデータ・コンテナ402a内のVMメタデータ・ブロックに書き込むことができる。十分な空きスペースが使用可能でない場合、アロケータは、そのメモリ・オブジェクトのメタデータの全てをコンテナ・グループ407a内に保持するために、VMメタデータ・コンテナ402bをスキャンして、そのメモリ・オブジェクトにVMメタデータ・ブロックを割り振るのに十分な空きスペースが使用可能であるかどうかを判定する。
【0053】
いくつかの例では、アロケータ215が、メモリ・オブジェクトのメタデータを同じコンテナ・グループ407内に維持することが可能ではなく、その結果、異なるロックによって制御された複数のコンテナ・グループ407にまたがる2つの別個のVMメタデータ・コンテナ402内のVMメタデータ・ブロックにメモリ・オブジェクト・メタデータが割り振られること、例えば、コンテナ・グループ407a内に存在するVMメタデータ・コンテナ402bとコンテナ・グループ407b内に存在するVMメタデータ・コンテナ402dとにメモリ・オブジェクトのVMメタデータ・ブロックが割り振られることがある。複数のロック407にまたがるこのような状況は、単一のコンテナ・グループ407内のVMメタデータ・コンテナ402がいっぱいになったとき、もしくは既存のメモリ・オブジェクトを拡張することを求めるリクエストに対応するのに十分なVMメタデータ・ブロックがないとき、またはその両方が生じたときに起こることがある。
【0054】
いくつかの実施形態では、メモリ・オブジェクト・メタデータ503が複数のコンテナ・グループ407にわたって分散しており、複数のロック07a~507eによってアクセス制御されるときに、アロケータ215が、操作を実行するためにホスト・システム201がアクセスおよび使用しているメモリ・オブジェクト・メタデータ503に関するメモリ管理操作を効率化することができる。例えば、メモリ・オブジェクト・メタデータ503を格納するために、VMメタデータ・ブロックを解放する操作を実行することはもはや必要ない。メモリ・オブジェクトに関連したメタデータ・ブロック割振り501に関する操作を、メタデータが割り振られた順番で実行する代わりに、アロケータ215の実施形態は、コンテナ・グループ407に基づいてメモリ管理操作を実行することができ、したがって、ロック507を1回取得し、次いでそのロック507をリリースすることにより、全ての操作を実行することができる。1つのコンテナ・グループ407の全体に対して操作を一度に実行することにより、アロケータ215は、ロック507a~507eを複数回にわたって取得および再取得する必要がない。そうせずに、1つのコンテナ・グループ407の全体に対してVM管理操作を実行し、次いでロック507をリリースすることができ、将来の操作を実行するためにロックを再び取得しなおす必要がない。
【0055】
例えば、
図5は、複数のコンテナ・グループ407およびロック507にまたがるメモリ・オブジェクト・メタデータ503を含むメモリ・オブジェクトに対するメタデータ・ブロック割振り501に関するメモリ操作を実行するアロケータ215の一例を示している。メモリ・オブジェクト・メタデータ503a1から503a8は、ロック507aによって制御されたコンテナ・グループ407aに割り振られている。メモリ・オブジェクト・メタデータ503b1~503b6は、ロック507bによって制御されたコンテナ・グループ407bに割り振られており、メモリ・オブジェクト・メタデータ503c、503dおよび503eはそれぞれ、それぞれロック507c、507d、507eによって制御されたコンテナ・グループ407c、407dおよび407eに割り振られている。(メモリ・オブジェクトを記述したメモリ・オブジェクト・メタデータ503を格納しているVMメタデータ・ブロックを解放するなどの)メモリ管理操作をアロケータ215が実行するとき、アロケータ215は、メタデータ・ブロック割振り501によって示された順序でメモリ操作を実行するのではなしに、コンテナ・グループ407に基づいてメモリ操作を実行することによって、操作を効率化することができる。例えば、アロケータ215は、最初に、メモリ・オブジェクト・メタデータ503a1を制御しているロック507aを取得し、メモリ・オブジェクト・メタデータ503a1を解放し、
図5に示されているとおりにメタデータ・ブロック割振り501に沿って移動し、次のロック507bを取得してメモリ・オブジェクト・メタデータ503b1を解放し、続いてロック507cを取得してメモリ・オブジェクト・メタデータ503c1を解放する(以下同様)こと、その結果として、個々のロック507を必要に応じて複数回取得することを回避することができる。例えば、メタデータ・ブロック割振り501に示されたメモリ・オブジェクト・メタデータ503の順序でメモリ操作を実行すると、その結果として、ロック507aを8回、ロック507bを6回、ロック507c、507dおよび507eをそれぞれ4回取得することになる。その代わりに、アロケータ215は、ロック507a~507eをそれぞれ1回取得し、取得したロック507によって制御された全てのメモリ・オブジェクト・メタデータ503に対するメモリ管理操作を実行し、そのロック507をリリースし、次のロック507に移ることができる。例えば、アロケータ215は、ロック507aを取得し、ロック507aが取得されている間に、(メモリ・オブジェクト・メタデータ503a1~503a8に関連したVMメタデータ・ブロックを解放するなどの)メモリ・オブジェクト・メタデータ503a1~503a8に関するメモリ操作の全てを実行し、ロック507aをリリースし、ロック507bの取得に移り、メモリ・オブジェクト・メタデータ503b1~503b6を格納しているメタデータ・ブロックを解放し、ロック507bをリリースすることができる。アロケータ215は、このプロセスを、ロック507c、507d、507eに関連した残りのコンテナ・グループ407c、407d、407eに対してそれらに応じて繰り返すことができる。
【0056】
アロケータ215の実施形態は、並行してもしくは同時にまたはその両方で実行される複数の割振りおよび割振り解除操作をサポートすることができる。VMメタデータ・コンテナ402の使用の実施形態は流体手順(fluid procedure)であることがあり、ホスト・システム201のOS205は、ホスト・システム201の状態の変化により、必要な数よりも多くのVMメタデータ・コンテナ402を意図せずに生成することがある。アプリケーション223が閉じているときまたはアイドル状態になったとき、アプリケーション223に関連したメモリ・オブジェクトをメモリ105からリリースして、アロケータ215が、リリースされたメモリ・オブジェクトのメモリ・オブジェクト・メタデータを削除し、VMメタデータ・コンテナ402に空きVMメタデータ・ブロックを返すことを可能にすることができる。したがって、メモリ・オブジェクトをリリースし、空きVMメタデータ・ブロックを生成することによって、新たに解放されたVMメタデータ・ブロックに新規のVMメタデータを書き込む目的、または拡張するメモリ・オブジェクトの既存のメタデータに対するスペースを提供する目的に、VMメタデータ・コンテナ402の格納スペースが使用可能になる。
【0057】
アロケータ215の実施形態は、リソースの最小量を、ホスト・システム201による使用に対して自由におよび直ちに使用可能に維持する(これは「「min free」スキーム」と呼ばれる)ためのオペレーティング・システム205のシステム・ワイド・スキーム(system-wide scheme)に従うことができる。アロケータ215の実施形態は、新規のVMメタデータ・コンテナをカーネル206から要求すべきかどうかを判定するために、新規のVMメタデータ・コンテナ403の生成を要求するシステム・コールとmin freeスキームとを比較することができる。上記のとおり、VMメタデータ・ブロックの使用可能性は絶えず変化しうる。新規のVMメタデータ・コンテナ403を生成することを求めるリクエストが必要であることを、ホスト・システム201の現在の状態がアロケータ215に示すことがあるが、生成リクエストの実行もしくは新規のVMメタデータ・コンテナ403のインスタンス化またはその両方の前に、1つまたは複数のVMメタデータ・ブロックが解放されることがある。例えば、アロケータ215がVMメタデータ・ブロック割振りリクエストを受け取り、VMメタデータ・コンテナ402に問い合わせ、どのVMメタデータ・コンテナも、そのリクエストを履行するのに十分な空きスペースを含んでいないことが分かったとする。アロケータ215は、新規のVMメタデータ・コンテナ403を生成するためにカーネル・プロセスをポストする。しかしながら、その間に、アプリケーション223の別のプロセスがVMメタデータ・ブロックの全てを解放し、その結果、そのリクエストを履行するのに十分な空きブロックが生じた。VMメタデータ・コンテナ403をインスタンス化する前に、カーネル・プロセスは、ホスト・システム201の状態を問い合わせ、自由に使用可能なリソースの量を指定したmin freeスキームの要件を満たすのに十分な空きスペースが全てのVMメタデータ・コンテナ402上に存在するかどうかを判定することができる。この問合せが、自由に使用可能なリソースの最小レベルが達成されているとの指示を返した場合(このことは、ポストされたカーネル・プロセス・リクエストと問合せの時点との間にリソースが解放されたことを示す)、カーネル・プロセスは、新規のVMメタデータ・コンテナ403を生成することを求めるリクエストを履行せず、仮想メモリ管理の流動性(fluidity)および不必要なVMメタデータ・コンテナ402の意図しない生成に対する保護を提供する。
【0058】
ホスト・システム201の例示的な実施形態では、新規のVMメタデータ・コンテナ403を生成するためにアロケータ215によって呼び出されたカーネル・プロセスが、新規のVMメタデータ・コンテナ403を生成する役割を担う単一のエンティティであることがある。したがって、このような実施形態の下では、新規のVMメタデータ・コンテナ403の生成が直列化され、その結果、カーネル・プロセス・リクエストがポストされた順序で1度に1つの新規のVMメタデータ・コンテナ403が生成される。リクエストおよび生成プロセスの直列化によって、カーネル・プロセスの例示的な実施形態は、新規のVMメタデータ・コンテナ403の生成の合間にホスト・システム201の状態を問い合わせて、min freeスキームに従っているか否か、および自由に使用可能なリソースの最小量があるかどうかを判定することができる。新規のVMメタデータ・コンテナ403の生成の合間に問合せを実行することによって、カーネル・プロセスは、自由に使用可能なリソースの最小量が検出された(すなわち1つまたは複数のアプリケーション223またはプロセスによってVMメタデータ・ブロックが解放された)直後に新規のVMメタデータ・コンテナ403が連続的に生成されることを防ぐことができ、システム・ワイドmin freeレベルを達成するのに十分なVMメタデータ・ブロックが使用可能になったときに新規のVMメタデータ・コンテナ403の意図しない過生成を防ぐことができる。
【0059】
ホスト・システム201のいくつかの実施形態では、既存のVMメタデータ・コンテナ402の全てがいっぱいまたはほぼいっぱいであるときにホスト・システム201の仮想メモリ管理が単一ロック407スキームに移ることを防ぐために、安全機構を実装することができる。VMメタデータ・ブロックが解放されるのをホスト・システム201が待っているときに、VMメタデータ・ブロックを新規の割振りリクエストにVMメタデータ・ブロックを割り振るための唯一の選択肢として、単一の新規のメタデータ・コンテナ403だけがある状況を回避するため、カーネル・プロセスの実施形態は、アロケータ215によってそうするようポストされたときに、一度に複数の新規のVMメタデータ・コンテナ403を生成することができる。上記のとおり、カーネル・プロセスは、新規のVMメタデータ・コンテナ403の生成の合間に、自由に使用可能なリソースの最小量を絶え間なくチェックし、既存のVMメタデータ・コンテナ402の中の使用可能な十分なVMメタデータ・ブロックが、システム・ワイドmin freeレベル・スキームを履行するために自由に使用可能であるときに、新規のVMメタデータ・コンテナ403の生成を停止することができる。
【0060】
図面を参照する。
図6は、コンピューティング環境600を含む代替実施形態を示しており、ホスト・システム201は、クライアント・システム227によってアクセスされている1つまたは複数のアプリケーション223を、コンテナ・クラスタ602のコンテナ化された複数の別個の環境(コンテナ603a~603nとして示されている)にコンテナ化することができる。ホスト・システム201の実施形態は、本開示と矛盾しない方式でホスト・システム201によって提供およびホストされたコンテナ化されたアプリケーションのためにオペレーティング・システム205を介して仮想メモリ操作を管理することができる。コンテナ603の実施形態は、コンテナ603の動作環境内に、アプリケーション・イメージ607a~607nおよびソフトウェア従属性(software dependency)605a~605を含む。ホスト・システム201は、マルチ・ユーザ・オペレーティング・システム(すなわちホスト・オペレーティング・システム205)を実行し、ホスト・システム・ハードウェア203を介して、アプリケーション223の機能を実行するためのコンテナ化されたコンピュータ環境を含む1つまたは複数のコンテナ603a~603n(総称してコンテナ603と呼ぶ)にコンピューティング・リソースを提供することができる。コンテナ・クラスタ602内のコンテナ603によって共用されるオペレーティング・システム205の実施形態は、アプリケーション・イメージ607を実行するためにコンテナ603に割り振られた仮想メモリを管理することができる。
【0061】
コンピューティング環境600の実施形態は、複数のネットワーク、ドメインもしくは地理的位置またはこれらの組合せにまたがることがある複数のデータ・センタに編成されていてもよい。いくつかの実施形態では、データ・センタが物理的位置に存在することができ、他の実施形態では、データ・センタが、クラウド・ネットワークを横切って分散した複数のホスト・システム201、もしくは物理的に限局されたホスト・システム201と分散ホスト・システム201の組合せ、またはその両方を含むことができる。データ・センタは、1つまたは複数のホスト・システム201を含むことができ、それらのホスト・システム201は、
図6に示されているように、コンテナ603の環境内にカプセル化されたコンテナ化されたアプリケーション・イメージ607を実行するために、ホスト・システム・ハードウェア203、ホスト・オペレーティング・システム205、ならびに/または限定はされないがオープンソースのDockerおよび/もしくはOpenShiftソフトウェアなどのコンテナ化ソフトウェア601を提供する。
図6に示された例示的な実施形態は3つのコンテナ603を含んでいるが、
図6の実施形態は、ホスト・システム201によって複数のコンテナ603をホストし管理することができる発想の単なる例である。ホスト・システム201が3つのコンテナ603だけをホストすることに限定されると、
図6の実施形態が暗示していると決して考えるべきではない。ホストされたコンテナ603の数およびホスト・システム201によって管理される仮想メモリ操作は、使用可能なコンピューティング・リソースの量によって、ならびにホスト・システム・ハードウェア267、およびコンテナ化ソフトウェア601によってコンテナ603内で実行されているアプリケーション・イメージ607が必要とするコンピューティング・リソースの量に基づいて異なることがある。
【0062】
コンテナ化ソフトウェア601の実施形態は、コンテナ化されたプログラム114およびアプリケーション223を開発、供給および実行し、コンテナ603のコンピューティング環境内でコードを迅速に展開することを可能にするソフトウェア・プラットホームとして機能することができる。ホスト・システム201間および異なる地理的位置で動作していることがある異なるデータ・センタ間で、コンテナ603の実施形態を転送することができ、それによって、コンテナ化ソフトウェア601を実行しているホスト・システム201上でコンテナ603を実行することを可能にすることができる。コンテナ化ソフトウェア601は、ホスト・システム201が、ホスト・システム・ハードウェア203およびホスト・システム201の他のインフラストラクチャから、コンテナ化されたアプリケーション223およびプログラム221を分離すること、ならびにホスト・システムのオペレーティング・システム205を介してホスト・システム201上で実行されているコンテナに詰められたアプリケーション223のための仮想メモリ操作を管理することを可能にする。
【0063】
コンテナ化ソフトウェア601は、コンテナ603の隔離された環境内でアプリケーション・イメージ607をパッケージ化および実行する能力を有するホスト・システム201を提供する。個々のコンテナ603によって提供される隔離およびセキュリティは、ホスト・システム201が、アプリケーション・イメージ607の複数のインスタンスを実行し、同時に、単一のホスト・システム201上のアプリケーション・イメージ607の全てに対する仮想メモリ操作を管理することを可能にすることができる。通常は仮想マシンによって使用されるハイパーバイザの必要性を排除することにより、コンテナ603を軽量とすることができる。むしろ、コンテナ603は、ホスト・オペレーティング・システム205のカーネル206内で直接に実行することができる。しかしながら、アプリケーション・イメージ607の実施形態は、コンテナ化を有する仮想マシンの仮想化を組み合わせることから利益を得ることができる。例えば、ホスト・システム201は、コンテナ化ソフトウェア601を実行している仮想マシンであることができる。
【0064】
コンテナ化ソフトウェア601の実施形態は、コンテナ化エンジン(図示せず)を含むことができる。コンテナ化エンジンは、デーモン・プロセスを実行するサーバ・プログラム、デーモン・プロセスに話しかけ、アプリケーション・イメージ607に命令を提供するためにアプリケーション223もしくは他のプログラムまたはその両方が使用することができる1つまたは複数のインタフェースを指定するREST API、および命令を入力するためのコマンドライン・インタフェース(CLI)クライアントを含むことができるクライアント・サーバ・アプリケーションであることができる。一実施形態では、ホスト・システム201のコンテナ化ソフトウェア601と通信するために、クライアント・システム227がCLIを使用してコマンドを入力することができる。
図6に示された例示的な実施形態では、ホスト・システム201とインタフェースするクライアント・システム227のメモリ105または永続性ストレージ106にロードされたアプリケーション・インタフェース229を介して、クライアント・システム227によってホスト・システム201に提供されたコマンドを入力することができる。
【0065】
CLIの実施形態は、コンテナ化エンジンのREST APIを使用し、自動化されたスクリプトを通してまたはダイレクトCLIコマンドを介して、デーモンを制御し、デーモンと対話することができる。CLIから命令を受け取ったことに応答して、REST APIを介して、デーモンは、コンテナ601内にある1つまたは複数のソフトウェア・イメージ、コンテナ601自体、ネットワーク、データ・ボリューム、プラグインなどを含む、コンテナ化ソフトウェア601のメモリ・オブジェクトを生成および管理することができる。イメージは、コンテナ603を生成するための命令を有するリードオンリー・テンプレートであることがあり、かつカスタマイズ可能であることがある。コンテナ603は、ソフトウェア・イメージの実行可能なインスタンスであることができる。コンテナ化ソフトウェア601のAPIを使用して、またはCLIを介して、コンテナ603を生成、開始、停止、移動または削除することができる。コンテナ603を1つまたは複数のネットワーク250に接続することができ、ストレージ・デバイスに取り付けることができ、もしくはコンテナ603の現在の状態に基づいて新規のイメージを生成することができ、またはこれらの組合せを実行することができる。
【0066】
仮想メモリ・メタデータの割振りを管理するための方法
図7~8bの図面は、メモリ・オブジェクト・メタデータの割振りを管理するためのコンピュータ実施方法を実行するアルゴリズム700、800の実施形態を表している。図示および記載されたアルゴリズム700、800は、包括的には
図1のデータ処理システム100によって、より詳細には本明細書に記載された
図2a~6に示された専門データ処理システムの実施形態によって定義された1つまたは複数のコンピュータ・システムを使用することができる。
図7および
図8a~8bによって記載されたアルゴリズム700、800のステップは、提示された順序とは異なる順序で実行することができることを当業者は認識すべきである。アルゴリズム700、800は、必ずしも、本明細書に記載された全てのステップを実行することを要求しない。むしろ、アルゴリズム700、800のいくつかの実施形態は、下で論じるステップのうちの1つまたは複数のステップを使用したステップのサブセットを実行することにより方法を変更することができる。
【0067】
アルゴリズム700の実施形態は、ホスト・システム201のブート・プロセス中に複数のVMメタデータ・コンテナ402を事前にインスタンス化するためのプロセスを説明していることがある。アルゴリズム700はステップ701から開始することができる。ステップ701で、ホスト・システム201をオンにし、オペレーティング・システム205をロードするために、ホスト・システム100または別のタイプのコンピューティング・システムなどのデータ処理システム100がブート・プロセスを開始する。オペレーティング・システム205のカーネル206をメモリ105にロードすることができる。ステップ703で、オペレーティング・システム205もしくはカーネル206またはその両方は、VMメタデータ・コンテナ402を生成するインスタンス化モードを判定すること、例えば、VMメタデータ・コンテナ402のインスタンス化が、オペレーティング・システム205のパラメータの指示で生成されるか、またはユーザによって指示されたパラメータの指示で生成されているかを判定することができる。ステップ705で判定を実行することができ、VMメタデータ・コンテナを生成するインスタンス化モードが、OS205によって指示されたものとして検出された場合、アルゴリズム700はステップ707に進むことができる。反対に、ステップ705で、ユーザによって指示されたインスタンス化モードが検出された場合、アルゴリズム700はステップ709に進むことができ、ユーザによって指示されたパラメータに基づいて、定められた数のVMメタデータ・コンテナ402を生成することができる。
【0068】
ステップ707で、OSによって指示されたインスタンス化モードに関して、オペレーティング・システム205は、生成するVMメタデータ・コンテナ402の数を、ホスト・システム201の使用可能なリソースに基づいて計算することができる。具体的には、オペレーティング・システムは、仮想メモリを管理することをタスクとするホスト・システム201または他のデータ処理システム100に対して専用の物理メモリ301の全量を計算し、その物理メモリ301の全量を、VMメタデータ・コンテナ402を用いて全実物理メモリを仮想メモリとして正確に表現するためにOS205によって決定されたVMメタデータ・コンテナ402に対する事前に選択されたサイズ、最適化されたサイズまたは所望のサイズで割ることができる。ステップ709で、インスタンス化モードがOSによって指示されたモードであるのかまたはユーザによって指示されたモードであるのかに基づいてOSによって指示されたパラメータもしくはユーザによって指示されたパラメータまたはその両方に従って、オペレーティング・システム205のカーネル・プロセスは、選択されたサイズの複数のVMメタデータ・コンテナ402を生成することができる。アルゴリズム700のステップ711で、オペレーティング・システム205は、ステップ709で生成したVMメタデータ・コンテナ402を、個々のコンテナ・グループ407に割り当てられたロック507によって制御されたコンテナ・グループ407にグループ分けすることができる。この例示的な実施形態では、オペレーティング・システム205が、VMメタデータ・コンテナ402を少なくとも2つのコンテナ・グループ407に編成することができる。しかしながら、オペレーティング・システム205は、最適であると判定された任意の数のコンテナ・グループ407またはユーザ定義のパラメータによって設定された任意の数のコンテナ・グループ407を生成することができる。これに応じて、ステップ713で、オペレーティング・システムは、オペレーティング・システム205へのホスト・システム713のブートを終了し、オペレーティング・システムは、ブートアップ・プロセス中にインスタンス化されたVMメタデータ・コンテナ402を使用した仮想メモリ・メタデータのユーザ駆動型の操作および管理を含むさらなる操作を実施する準備ができている。
【0069】
アルゴリズム700の実施形態は、上で説明したVMメタデータ・コンテナ402のインスタンス化に続いてアルゴリズム800に進むことができる。アルゴリズム800は、ステップ801での開始に進むことができる。ステップ801で、ホスト・システム201は、アプリケーション223、プログラム114、サービスまたは他の実行されたソフトウェアによって使用されるメモリ・ブロックにメモリ・オブジェクトを割り振ることを求めるメモリ割振りリクエストを受け取ることができる。仮想メモリ・マネージャ213のアロケータ215は、割振りリクエストを管理すること、およびメモリ・オブジェクトを記述したメモリ・オブジェクト・メタデータをVMメタデータ・コンテナ402の1つまたは複数のVMメタデータ・ブロックに書き込むことをタスクとすることができる。アロケータ215は、ステップ803で、割振りリクエストを分析し、ステップ801で受け取った割振りリクエストのタイプを判定すること、例えば、その割振りリクエストが、新規のメモリ・オブジェクトを記述したメタデータを管理することを求めるリクエストであるのか、または1つもしくは複数のVMメタデータ・コンテナ402に格納されたメタデータを既に含む既存のメモリ・オブジェクトを拡張することを求めるリクエストであるのかを判定することができる。
【0070】
ステップ805で、ステップ803での分析に基づいて、その割振りリクエストが、新規のメモリ・オブジェクトを記述した新規のメタデータを格納することを求めるリクエストであるのか、または、既存のVMメタデータ・コンテナ402の1つまたは複数のVMメタデータ・ブロックに以前に格納されたメタデータを有する既存のメモリ・オブジェクトを拡張することを求めるリクエストであるのかを判定することができる。そのリクエストが、新規のメモリ・オブジェクト・メタデータを管理することを求めていると判定された場合、アルゴリズム800はステップ817に進むことができる。反対に、そのリクエストが、既存のメモリ・オブジェクト・メタデータを拡張することを求めるものであった場合、アルゴリズム800はステップ807に進むことができる。ステップ807で、アロケータ215は、最初に、拡張するよう要求されているメモリ・オブジェクトを記述したメモリ・オブジェクト・メタデータを以前に格納した以前に使用されたVMメタデータ・コンテナ402をターゲットとすることができる。アロケータ215は、ターゲットとしたVMメタデータ・コンテナ402(以後、ターゲットVMメタデータ・コンテナ402)をスキャンして、ターゲットVMメタデータ・コンテナ402内の使用可能なスペースの量が、拡張リクエストを履行するよう要求されたスペースの量よりも大きいかどうかまたは等しいかどうかを判定することができる。
【0071】
ステップ809で、ステップ807で実行したターゲットVMメタデータ・コンテナ402のスキャンに基づいて、ターゲットVMメタデータ・コンテナが、その追加のメモリ・オブジェクト・メタデータを少なくとも1つの使用可能なVMメタデータ・ブロックに書き込むのに十分な空きスペースを含むかどうかを判定する。VMメタデータ・コンテナ402に十分なスペースがある場合、アルゴリズム800はステップ825に進むことができ、アロケータ215は、ターゲットVMメタデータ・コンテナ402のVMメタデータ・ブロックを、拡張リクエストの対象であるメモリ・オブジェクトのメモリ・オブジェクト・メタデータを以前に格納したVMメタデータ・コンテナ402に割り振ることができる。反対に、ステップ809で、ターゲットVMメタデータ・コンテナ402内のスペースは拡張リクエストを履行するのには不十分であるとアロケータ215によって判定された場合、アルゴリズム800はステップ811に進むことができる。ステップ811で、アロケータ215はさらに、ステップ807および809で十分なスペースがあるかどうかを判定するために以前にターゲットとしスキャンしたVMメタデータ・コンテナ402と同じコンテナ・グループ407内に複数のVMメタデータ・コンテナ402があるかどうかを判定することができる。ステップ811で、同じコンテナ・グループ407内に追加のVMメタデータ・コンテナ402がないと判定された場合、アルゴリズムはステップ817に進むことができる。さらに、ステップ811でのアロケータ215による判定が、同じコンテナ・グループ407内に追加のVMメタデータ・コンテナ402があると判定した場合、アルゴリズムはステップ813に進み、全てのVMメタデータ・コンテナ402をスキャンし、十分な量のスペースに関して評価したか否かをさらに判定することができる。ステップ813で、同じコンテナ・グループ407内の全てのVMメタデータ・コンテナ402のスキャンが完了しており、十分なスペースを含むVMメタデータ・コンテナ402がないと判定された場合、アルゴリズム800はステップ817に進むことができる。
【0072】
反対に、ステップ813で、同じコンテナ・グループ407内の全てのVMメタデータ・コンテナ402のスキャンが完了したわけではないとアロケータ215によって判定された場合、アルゴリズム800はステップ815に進むことができる。ステップ815で、アロケータ215は、ステップ807でスキャンしたVMメタデータ・コンテナと同じコンテナ・グループ407内の残りのVMメタデータ・コンテナ402をスキャンすることができる。いくつかの実施形態では、アロケータ215が、このスキャンに基づいて、最初に、最少使用VMメタデータ・コンテナ402をターゲットとして、そのコンテナ・グループ407内の最少使用メタデータ・コンテナ402が、拡張リクエストを履行するのに十分なスペースを含むか否かを判定することができる。アルゴリズム800はステップ809に戻り、ステップ815でスキャンした新たにターゲットとしたVMメタデータ・コンテナ402が十分な空きスペースを含むかどうかをさらに判定し、アルゴリズム800に従って上で以前に説明したとおりに進むことができる。
【0073】
ステップ817で、アロケータ215は、VMメタデータ・コンテナ402を含む最少使用コンテナ・グループに関してコンテナ・グループ407をスキャンすることができる。ステップ819で、このコンテナ・グループ407のスキャンに基づいて、最少使用コンテナ・グループ407が、複数のVMメタデータ・コンテナ402を含むかどうかを判定することができる。このスキャンが、最少使用コンテナ・グループ407内に複数のVMメタデータ・コンテナ402はないと判定した場合、アルゴリズムはステップ823に進み、最少使用コンテナ・グループ407内の唯一のVMメタデータ・コンテナ402が、拡張リクエストまたはメモリ・オブジェクト・メタデータの新規の割振りを求めるリクエストを履行するのに十分なスペースを含むかどうかを判定することができる。反対に、ステップ819で、最少使用コンテナ・グループ407内に複数のVMメタデータ・コンテナ402が存在するとアロケータ215によって判定された場合、アロケータ215は、最少使用コンテナ・グループ407内の最少使用VMメタデータ・コンテナ402をターゲットとし、それをスキャンして、懸案の割振りリクエスト(新規リクエストまたは拡張リクエスト)を履行するのに十分なスペースが適切か否かを判定することができる。
【0074】
ステップ823で、最少使用コンテナ・グループ407内の最少使用VMメタデータ・コンテナ402内で十分なスペースが使用可能であるかどうかを判定する。最少使用コンテナ・グループ407のVMメタデータ・コンテナ402の1つに十分なスペースがあった場合、アルゴリズムはステップ825に進み、選択したVMメタデータ・コンテナ402内のVMメタデータ・ブロックにメモリ・オブジェクト・メタデータを割り振ることができる。しかしながら、ステップ823で、最少使用コンテナ・グループ内の最少使用VMメタデータ・コンテナが、割振りリクエストを履行するのに十分なスペースを含まないと判定された場合、アルゴリズム800はステップ826に進むことができる。
【0075】
ステップ826で、アロケータ215は、割振りリクエストを履行するのに十分なスペースを有する1つまたは複数の新規のVMメタデータ・コンテナ403を生成することを求めるリクエストをカーネル・プロセス(kproc)にポストすることができる。ステップ827で、このアルゴリズムは、kproc生成リクエストがカーネル206にポストしたか否かを判定する。新規のVMメタデータ・コンテナ403を生成することを求めるkprocリクエストがポストしない場合、新規のVMメタデータ・コンテナ403の生成は履行されず、kprocはスリープ・モードに戻る。一方、カーネル・プロセスへの生成リクエストがポストしたと判定された場合、アルゴリズム800はステップ829に進み、システム上の全ての既存のVMメタデータ・コンテナ402をスキャンして、ホスト・システム201が使用可能なVMメタデータ・ブロックの量を決定することができる。ステップ829でのスキャンに基づいて、カーネル206は、ステップ831で、リクエストがなされた時刻と生成リクエストがカーネル206にポストした時刻との間に、空きリソースが、割振りリクエストを履行する目的に対して使用可能になった場合に、空きリソースのシステム・ワイド最小量が、割振りリクエストを履行する目的に使用可能であるか否かを判定する。自由に使用可能なシステム・ワイド・リソースの量が、OS205によって確立されたmin freeスキームによって設定されたしきい値よりも大きい場合、アルゴリズムはステップ837に進み、kprocはスリープ・モードに戻り、割振りリクエストを完了するのに十分な解放されたスペースを有する既存のVMメタデータ・コンテナ402を使用してリソースの割振りを履行することができる。
【0076】
ステップ831で、カーネル206が、空きリソースのシステム・ワイド使用可能性が、OS205のmin freeスキームによって確立された量よりも低いと判定した場合、カーネル206はコンテナ生成モードに入ることができる。ステップ833で、カーネル206が単一コンテナ生成モードに入ったのかまたは複数コンテナ生成モードに入ったのかをさらに判定する。カーネル206が単一コンテナ生成モードに入った場合、アルゴリズム800はステップ834に進み、カーネル206は、割振りリクエストを履行するのに十分なスペースを有する新規のVMメタデータ・コンテナ403を生成し、kprocはスリープ・モードに戻る。ステップ833で、カーネル206が複数コンテナ生成モードに入る場合、アルゴリズムはステップ835に進み、割振りリクエストを履行するのに十分なスペースを含む新規のVMメタデータ・コンテナ403を生成することができる。ステップ836で、アルゴリズム800はさらに、複数の新規のVMメタデータ・コンテナ403を求めるその生成リクエストが履行されたかどうかを判定する。複数のVMメタデータ・コンテナ403を求める生成リクエストが履行されなかった場合、アルゴリズム800はステップ835に戻り、追加の新規のVMメタデータ・コンテナ403を生成することができる。いくつかの実施形態では、複数コンテナ・リクエストの新規のVMメタデータ・コンテナ403を生成する合間に、アルゴリズムがステップ831に戻り、オペレーティング・システム205のmin freeスキームが、新たに生成されたVMメタデータ・コンテナ403によって、スキームを履行するのに適切なレベルに達したか否かを判定することができる。ステップ835で生成した新規のVMメタデータ・コンテナ403が、自由に使用可能なリソースの量をmin freeスキームのしきい値まで高めない場合、アルゴリズム800はステップ835に戻り、複数コンテナ・リクエストの中の次の新規のVMメタデータ・コンテナ403を生成することができる。ステップ836で、複数コンテナ・リクエストが完了したと判定された場合、アルゴリズム800はステップ837に進み、kprocはスリープ・モードに戻る。
【0077】
本発明のさまざまな実施形態の説明は例示のために示したものであり、それらの説明が網羅的であること、または開示された実施形態に限定されることは意図されていない。当業者には、本発明の範囲を逸脱しない多くの変更および変形が明らかとなろう。本明細書で使用されている用語は、実施形態の原理、実際的用途、もしくは市場に出ている技術には見られない技術的改良を最もうまく説明するように、または本明細書に開示された実施形態を他の当業者が理解することができるように選択した。