(57)【要約】      （修正有）【課題】プロセスのメモリアクセス性能の低下を抑制するメモリ配置装置を提供する。【解決手段】プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置装置２０は、マッピングしようとするメモリ領域が配置されたノードを判定するメモリ位置判定部２１と、判定した結果に基づき、メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置するマッピング部２２を備える。マッピング部は、ノード間のキャッシュコヒーレンシの維持を無効化し、プロセスにとってのリモートメモリへのアクセスを無効化する。【選択図】図８
2020140227.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置装置であって、
マッピングしようとするメモリ領域が配置されたノードを判定するメモリ位置判定手段と、
判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置するマッピング手段と、を備え
前記マッピング手段は、前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する、
メモリ配置装置。
【請求項２】
前記メモリ領域が、前記プロセスが参照するリードオンリーの領域であり、
前記メモリ位置判定手段は、前記リードオンリーの領域が、前記リモートメモリに配置されているか判定し、
前記マッピング手段は、前記リモートメモリに配置されている場合、前記マッピング手段は、前記リードオンリーの領域を複製して前記プロセスが動作するノードのローカルメモリに配置する、
請求項１に記載のメモリ配置装置。
【請求項３】
前記メモリ位置判定手段は、マッピング管理データから、バイナリファイルのファイル位置、オフセット、ノード、の３つの組み合わせが一致するデータを探し、前記メモリ領域が配置されているノードを特定する、
請求項１又は２に記載のメモリ配置装置。
【請求項４】
前記メモリ位置判定手段は、前記３つの組み合わせが一致するデータがある場合、前記一致するデータのあるノードを特定し、
前記マッピング手段は、前記一致するデータのあるノードのメモリ領域における物理メモリを共有にする、
請求項３に記載のメモリ配置装置。
【請求項５】
前記メモリ位置判定手段は、前記３つの組み合わせが一致するデータがない場合、前記マッピング管理データから、前記ファイル位置、オフセットの２つの組み合わせが一致するデータを探し、前記メモリ領域が配置されているノードを特定する、
請求項３に記載のメモリ配置装置。
【請求項６】
前記２つの組み合わせが一致するデータがある場合、前記マッピング手段は、前記一致するデータのあるノードの前記メモリ領域がリードオンリーであれば、当該メモリ領域における物理メモリを共有にする、
請求項５に記載のメモリ配置装置。
【請求項７】
前記２つの組み合わせが一致するデータがない場合、前記マッピング手段は、マッピングしようとするメモリ領域をファイルからロードして前記ローカルメモリに配置する、
請求項５に記載のメモリ配置装置。
【請求項８】
プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置方法であって、
マッピングしようとするメモリ領域が配置されたノードを判定し、
判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置し、
前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する、
メモリ配置方法。
【請求項９】
プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置プログラムであって、
前記プロセッサに、
マッピングしようとするメモリ領域が配置されたノードを判定し、
判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置し、前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する、ことを実行させる、
メモリ配置プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、非均一メモリアクセス（ＮＵＭＡ：Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）アーキテクチャを用いた計算機システムにおけるメモリ配置の技術に関する。
【背景技術】
【０００２】
複数のプロセッサとメモリを搭載した共有メモリ型マルチプロセッサーシステムのアーキテクチャの１つにＮＵＭＡ（Ｎｏｎ−Ｕｎｉｆｏｒｍ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）がある。ＮＵＭＡは、プロセッサとメモリの対（ノードと呼ばれる）が複数存在し、それらをインターコネクトで接続したものである。
【０００３】
ＮＵＭＡにおいて、プロセッサが自ノード以外の他ノードのメモリを利用可能とするために、各ノードのメモリは、全プロセッサに共通の物理アドレス空間にマッピングされる。プロセッサから見て自ノードのメモリは、ローカルメモリとよばれ、その他のノードのメモリはリモートメモリと呼ばれる。
【０００４】
ＮＵＭＡアーキテクチャにおいて、プロセスにとってのローカルメモリとリモートメモリとの間のメモリアクセスは、インターコネクトを経由する必要がある。また、インターコネクトは、プロセスからのメモリ転送要求の他にキャッシュコヒーレンシを維持するための管理データも流れている。１回のメモリ転送（キャッシュコヒーレンシ用データを含む）を行っている間、同時に別のリクエストの転送を行うことはできない。このため、インターコネクトを流れるデータの総量が、メモリ転送をよく行うプロセスの実行効率を低下させる原因の一つとなっている。リモートメモリへのアクセス性能はローカルメモリに比べ遅くなるため、頻繁にアクセスするデータはローカルメモリに配置したほうが実行性能は高くなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２００１−５１５２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
一般的なＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）では、同一プログラムのプロセスが各ＮＵＭＡのノードで実行される場合、共有ライブラリのテキスト領域、又は、リードオンリーのデータ領域を複数プロセスが利用する場合、領域の内容は、プロセスごとに変化しないことからプロセス間で共有することができる。プロセス間での共有によってメモリ使用量を削減することは可能となるが、リモートメモリに領域が配置されている場合、ローカルメモリよりもアクセス性能が低くなる。
【０００７】
また、リモートメモリへのリモートアクセスによって、ノード間のインターコネクトのトラフィックが増加し、計算機システムの実行性能に影響を及ぼす一因となる。インターコネクトのトラフィック増加の要因として、キャッシュコヒーレンスプロトコルも考えられる。一般的なＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）は、コア間で全てのキャッシュ階層間のコヒーレンシを維持している。そのため、バススヌーピング等で知られるキャッシュコヒーレンスプロトコルを使用してメモリ変更を検知する。バススヌーピングでは各ＣＰＵコアが接続されているバス上のメモリ更新情報を検知し、必要に応じてキャッシュの無効化などを行う。この手法はバス帯域が大きくなければ性能が出ず、スケーラビリティもないなど、デメリットがあることが知られている。
【０００８】
プロセスの実行において、リモートメモリ上のテキスト領域を共有している場合、ＣＰＵのコアは遠くのリモートメモリにアクセスして命令フェッチを行う必要があり、また、キャッシュコヒーレンシを維持する処理も同時に行われる。このような命令フェッチやインターコネクトの輻輳によるメモリアクセスの遅延は少なからず、実行性能に影響を与えていると考えられる。
【０００９】
このように、共有メモリがプロセスにとってリモートメモリに配置される場合、パフォーマンスが低下することになる。
【００１０】
本開示の目的は、上記の課題を解決するために、プロセスのメモリアクセス性能の低下を抑制する技術を提供することにある。
【課題を解決するための手段】
【００１１】
本開示の一態様であるメモリ配置装置は、プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置装置であって、マッピングしようとするメモリ領域が配置されたノードを判定するメモリ位置判定部と、判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置するマッピング部と、を備え前記マッピング部は、前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する。
【００１２】
本開示の一形態であるメモリ配置方法は、プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置方法であって、マッピングしようとするメモリ領域が配置されたノードを判定し、判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置し、前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する。
【００１３】
本開示の一形態であるプログラムは、プロセッサとメモリの対となるノードが複数存在する計算機システムのメモリ配置プログラムであって、前記プロセッサに、マッピングしようとするメモリ領域が配置されたノードを判定し、判定した結果に基づき、前記メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置し、前記ノード間のキャッシュコヒーレンシの維持を無効化し、前記プロセスにとってのリモートメモリへのアクセスを無効化する、ことを実行させる。
【発明の効果】
【００１４】
本開示によれば、プロセスのメモリアクセス性能の低下を抑制することができる。
【図面の簡単な説明】
【００１５】
【図１】ＮＵＭＡアーキテクチャを用いた計算機システムの一例を示すハードウエア構成図である。
【図２】第１の実施形態の一態様であるカーネルの機能を示すブロック図である。
【図３】同じプログラムのプロセスがそれぞれのローカルメモリ上のテキストを利用する様子を示す図である。
【図４】プロセスがテキストをロードした時の、カーネル内のマッピング管理データとメモリ配置の様子を表す図である。
【図５】プログラムの起動におけるＯＳ処理の動作を示すフローチャートである。
【図６】第１の実施形態におけるプログラムによるファイルマッピングの動作を示すフローチャートである。
【図７】第１の実施形態におけるＯＳによるファイルマッピングの動作を示すフローチャートである。
【図８】第２の実施形態であるメモリ配置装置の機能を示すブロック図である。
【発明を実施するための形態】
【００１６】
（第１の実施形態）
第１の実施形態の一態様であるメモリ配置装置について、メモリ配置の対象である計算機システムとともに説明する。
【００１７】
図１は、ＮＵＭＡアーキテクチャを用いた計算機システムのハードウエア構成の一例を示すブロック図である。計算機システムは、複数のコア１１を含むＣＰＵ１０とメモリ１２がメモリチャネル１３で接続されたノードであるＮＵＭＡノード０、および、ＮＵＭＡノード０と同様のノード構成を有するＮＵＭＡノード１を備える。ＮＵＭＡノード０のＣＰＵ１０とＮＵＭＡノード１のＣＰＵ１０とはインターコネクト１４によって接続されている。メモリ１２は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。ＣＰＵはプロセッサとも呼ばれる。また、ＮＵＭＡノード０、ＮＵＭＡノード１は、プログラム等が格納されたハードディスク１５に通信可能に接続されている。
【００１８】
なお、図１の計算機システムのハードウエア構成は、ＮＵＭＡアーキテクチャに関する部分を主に示したが、これに限られない。例えば、図１のハードウエア構成として、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、外部装置との通信を可能とする通信インターフェース、ハードディスクを含んでいてもよい。
【００１９】
第１の実施形態の一態様であるメモリ配置装置は、例えば、ＯＳのカーネルのようなプログラムが図１のＣＰＵ１０、メモリ１２を用いて実行されることで実現される。なお、プログラムは、コンピュータ読み取り可能な記憶媒体に格納されてもよい。カーネルは様々な機能を実現するが、以下では、主にカーネルにおけるメモリ配置、又は、キャッシュ制御に関連する機能について説明する。
【００２０】
図２は、第１の実施形態の一態様であるカーネルの機能を示すブロック図である。カーネル１００は、ファイルシステム１８０から計算機システムのデバイス、プロセス、及び、カーネル内の情報などをファイルとして読み出し可能であるとする。
【００２１】
カーネル１００は、プロセス管理情報保持部１１０、ファイル管理情報保持部１５０、メモリ位置判定部１６０、マッピング部１７０を含む。プロセス管理情報保持部１１０は、プロセスの実行に必要な情報としてアドレス空間管理情報とページテーブル情報を保持する。この他、プロセス管理情報保持部１１０は、メモリ管理以外にもシグナルやファイルシステム、ＰＩＤ（Ｐｒｏｃｅｓｓ  ｉｄｅｎｔｉｆｉｅｒ）などの管理情報を保持する。プロセス管理情報保持部１１０は、アドレス管理情報を保持するアドレス空間管理情報保持部１２０を含む。アドレス空間管理情報保持部１２０は、マッピング管理データ保持部１３０、ページテーブル保持部１４０を含む。
【００２２】
マッピング管理データ保持部１３０は、ファイル位置保持部１３１、オフセット保持部１３２、ノード保持部１３３を含む。カーネル１００は、ファイルシステム１８０上のファイルをファイル位置保持部１３１とオフセット保持部１３２の組で識別する。ノード保持部１３３は、ファイル位置保持部１３１とオフセット保持部１３２の組で特定されるファイルの領域がマッピングされているＮＵＭＡノード番号を保持する。
【００２３】
ページテーブル保持部１４０は、ＣＰＵがメモリにアクセスするときに参照されるページテーブルを格納する。ページテーブルは、メモリのページ単位に作成される管理情報の集合である。ページテーブル保持部１４０は、キャッシュ設定保持部１４１を含み、キャッシュ設定保持部１４１は、ページ単位に作成される管理情報に含まれている。キャッシュ設定は、ＣＰＵ１０がメモリページにアクセスするときにキャッシュを有効にするか無効にするかを表す情報である。
【００２４】
ファイル管理情報保持部１５０は、ファイルシステム１８０に格納されているファイルを利用するために必要な管理情報、例えば、ｉｎｏｄｅ番号、パス名等を保持する。メモリ位置判定部１６０は、マッピングしようとしているメモリ領域が配置されているＮＵＭＡノードを判定する。メモリ位置判定部１６０による判定については後述する。マッピング部１７０は、メモリ位置判定部１６０が判定した結果に基づき、メモリ領域を複製してプロセスが動作するＮＵＭＡノードのローカルメモリに配置する。例えば、マッピング部１７０は、判定した結果によって、マッピングされていなければマップする、マッピング要求したプロセスと同一ノードにメモリがあれば共有する、あるいは、マッピング要求したプロセスと異なるノードにマッピングされていれば、複製してプロセスが動作しているノードにマップする。
【００２５】
図３は、同じプログラムのプロセスがそれぞれのローカルメモリ上のテキストを利用する様子を示す図である。
【００２６】
図３は、ＮＵＭＡアーキテクチャにおいて、同じプログラムのプロセスがＮＵＭＡノード０，１におけるメモリのｔｅｘｔ（テキスト）を利用する様子を示す図である。「numactl --cpunodebind=0」は、同じプログラムのプロセス（１）、プロセス（２）が使用するＣＰＵとしてＮＵＭＡノード０を指定するコマンドである。「numactl --cpunodebind=1」は、プロセス（３）が使用するＣＰＵとしてＮＵＭＡノード１を指定するコマンドである。ＮＵＭＡノード１のｔｅｘｔ（テキスト）は、ＮＵＭＡノード０のメモリからＮＵＭＡノード１のメモリに複製されたものである。
【００２７】
本実施形態で説明するＮＵＭＡアーキテクチャにおけるメモリ配置は、プログラムが起動してテキスト領域を共有する場合、共有ライブラリをロードしてテキスト領域を共有する場合、または、リードオンリーのデータをプライベートマッピングして物理メモリを共有する場合に適用できる。
【００２８】
図４は、プロセスがテキストをロードした時の、カーネル内のマッピング管理データとメモリ配置の様子を表す図である。
【００２９】
カーネルは、プロセスのロード対象がどのメモリにあるか否かは、ファイルシステム上のファイルの位置を示す情報（例えば、ｉｎｏｄｅ）又はパス名と、ファイル内のオフセット（ｏｆｆｓｅｔ）が一致するデータがあるか否かで判定する。
【００３０】
＜ロード対象がメモリ上にない場合＞
ロード対象がメモリ上に無く、その領域を新たにメモリに配置する場合、カーネルは、どのファイルのどの領域をメモリにロードしたか管理するための情報として、マッピング管理データを作成する。
【００３１】
なお、マッピング管理データを作成するときに、どのノードのメモリにロードしたか（ノード）も記録する。
【００３２】
＜ロード対象が既にメモリ上にある場合＞
ロード対象が既にメモリ上にある場合、当該メモリがどのノード（例えば、ＮＵＭＡノード）に属しているかを確認する。
【００３３】
当該メモリが、起動したプロセスと同じノード（ＮＵＭＡノード０）に属する場合、そのメモリを共有する。
【００３４】
一方、当該メモリが、起動したプロセスと異なるノード（例えば、ＮＵＭＡノード１）に属する場合、起動したプロセスと同じノード（例えば、ＮＵＭＡノード０）のメモリにロード対象を新たに配置し、マッピング管理データを作成する。このとき、その領域をどのノード（ＮＵＭＡノード）のメモリにロードしたかをマッピング管理データに記録する。
【００３５】
プロセスは、カーネルによってローカルメモリ上にある領域を使うよう設定されるため、ユーザプロセスが追加で処理する必要ない。
【００３６】
同一のノード（例えば、ＮＵＭＡノード０）内で共有するプロセスが無くなった場合、当該プロセスに関わるメモリを解放する。他のノード（例えば、ＮＵＭＡノード１）で動くプロセスがある場合でも、他のノード（ＮＵＭＡノード１）のメモリ上に対象データの複製が配置されているため、共有するプロセスが無くなったノード（ＮＵＭＡノード０）におけるメモリの解放による影響は無い。
【００３７】
さらにノード間におけるキャッシュコヒーレンシの維持を無効化し、リモートメモリへのアクセスを常にキャッシュ無効としてもよい。これによりキャッシュコヒーレンスプロトコルのデータがインターコネクトを流れることを抑止できる。これにより、メモリバスのトラフィックが減り、本来プロセスが行いたいメモリ転送に利用することが可能になる。
【００３８】
次に、第１の実施形態によるメモリ配置を、プログラムを起動する際のＯＳ処理に適用した例で説明する。具体的には、プログラムを起動してテキスト領域を共有する場合の適用例である。
【００３９】
図５は、プログラムの起動におけるＯＳ処理の動作を示すフローチャートである。はじめに、ＯＳ上で実行されるプログラムは、ＯＳの一部であるローダー（図示せず）によってＯＳにプログラム起動の要求が通知される。ＯＳは、プロセスイメージをメモリ上に作り、プログラムの実行に必要な準備を行う。なお、ローダーとＯＳの処理区分は実装に依存するため、以下の説明ではローダーとＯＳを区別せず処理の主体をＯＳとして、その機能ブロックと共に説明する。
【００４０】
ＯＳのローダー（図示せず）は、プログラムのバイナリファイルを解析する（ステップＳ２０１）。バイナリファイルは、プログラムコードを保持するテキスト領域、又は、データの初期値を保持するデータ領域などが含まれる。ローダーは、バイナリファイル内でテキスト領域が格納されている位置（オフセット）を特定し（ステップＳ２０２）、プログラムを実行するノードを決定する（ステップＳ２０３）。
【００４１】
ＯＳのメモリ位置判定部１６０は、プログラムを実行するノードのメモリ上に、既にテキスト領域がマッピングされているか否かを確認する。具体的には、メモリ位置判定部１６０は、マッピング管理データから、バイナリファイルのファイル位置、オフセット、ノードの３つの組み合わせが一致するデータを探す（ステップＳ２０４）。
【００４２】
３つの組み合わせが一致するデータが有る場合（ステップＳ２０５のＹｅｓ）、プログラムを実行するノードのメモリ、すなわち、プロセスが動作するノードのローカルメモリにデータがマッピング済みであることを意味する。ＯＳのマッピング部１７０は、その物理メモリを共有するようにページテーブルを作成し（ステップＳ２０６）、キャッシュを有効に設定する（ステップＳ２０７）。
【００４３】
３つの組み合わせが一致するデータが無い場合（ステップＳ２０５のＮｏ）、ローカルメモリにデータがマッピングされていないことを意味する。マッピング部１７０は、テキスト領域をバイナリファイルからローカルメモリにロードし、ロード状況を管理するマッピング管理データを作成する（ステップＳ２０８）。その後、マッピング部１７０は、ロードしたメモリのページテーブルを作成し（ステップＳ２０９）、キャッシュを有効に設定する（ステップＳ２０７）。
【００４４】
次に、プロセスがファイルマッピングを行う処理について、図６、図７を用いて説明する。
【００４５】
図６は、プログラムによるファイルマッピングの動作を示すフローチャートである。
【００４６】
プロセスは、ファイルをロードする時、ファイルの位置、オフセット、メモリ保護を指定してメモリ共有を行うシステムコールを実行する（ステップＳ３０１）。システムコールの実行した後、制御がＯＳに移り、プロセスはシステムコールの実行結果が返るのを待つ（ステップＳ３０２）。
【００４７】
図７は、ＯＳによるファイルマッピングの動作を示すフローチャートである。
【００４８】
ＯＳのローダー（図示せず）は、システムコールを実行したプロセスの実行ノードを、プロセス管理情報保持部１１０から特定する（ステップＳ５０１）。例えば、プロセス管理情報保持部１１０が実行中のプロセスに関する必要な情報を保持しており、要求元のＰＩＤに基づきノード情報を照会して実行ノードが特定される。ＯＳのメモリ位置判定部１６０は、マッピング管理データから、バイナリファイルのファイルの位置、オフセット、ノードの３つの組み合わせが一致するデータを探す（ステップＳ５０２）。
【００４９】
３つの組み合わせが一致するデータが有る場合（ステップＳ５０３のＹｅｓ）、プロセスが動作するノードのローカルメモリにデータがマッピングされていることを意味する。ＯＳのマッピング部１７０は、物理メモリを共有するようにページテーブルを作成し（ステップＳ５０４）、キャッシュを有効に設定する（ステップＳ５０５）。
【００５０】
３つの組み合わせが一致するデータが無い場合（ステップＳ５０３のＮｏ）、メモリ位置判定部１６０は、マッピング管理データから、バイナリファイルのファイルの位置、オフセットの２つの組み合わせが一致するデータを探す（ステップＳ５０６）。
【００５１】
２つの組み合わせが一致するデータが有る場合（ステップＳ５０７）、プロセスにとってデータがリモートメモリにマッピングされていることを意味する。マッピング部１７０は、指定されたメモリ領域の保護がリードライトの場合は、ページテーブルを作成し、その物理メモリを共有し（ステップＳ５０９）、キャッシュを無効に設定する（ステップＳ５１０）。
【００５２】
２つの組み合わせが一致するデータが無い場合（ステップＳ５０７のＮｏ）、プロセスにとってデータがメモリにマッピングされていないことを意味する。マッピング部１７０は、ローカルメモリにデータをロードし、マッピング管理データを作成する（ステップＳ５１１）。そして、マッピング部１７０は、ページテーブルを作成し（ステップＳ５１２）、キャッシュを有効に設定する（ステップＳ５１３）。
【００５３】
なお、ステップＳ５０８において、リモートメモリでマッピングされているデータに対して、指定されたメモリ保護がリードオンリーである場合（ステップＳ５０８のＹｅｓ）、マッピング部１７０は、ローカルメモリにデータをロードしマッピング管理データを作成し（ステップＳ５１１）、ページテーブルを作成し（ステップＳ５１２）て、キャッシュを有効に設定する（ステップＳ５１３）。
【００５４】
以上、第１の実施形態について説明したが、本実施形態は上記の例に限られるものではない。例えば、以下のように実施形態を変形することができる。
【００５５】
（変形例１）
上記の第１の実施形態において、ＮＵＭＡノード０，１間のキャッシュコヒーレンシは維持されないアーキテクチャの例で説明したが、これに限られない。ＮＵＭＡノード０，１間のキャッシュコヒーレンシが維持されたアーキテクチャにも適用可能である。
【００５６】
（変形例２）
上記の第１の実施形態において、リードライトの領域を共有する場合、ＮＵＭＡノード０，１のキャッシュを無効にする例で説明したが、これに限られない。リードライトの領域を共有する場合に、ＮＵＭＡノード０，１間のキャッシュを有効としてもよい。
【００５７】
（変形例３）
上記の第１の実施形態において、リモートメモリにメモリ領域がマッピングされている場合、ローカルメモリにメモリ領域をファイルからロードする例を用いて説明したが、これに限られるのではない。例えば、リモートメモリからローカルメモリにコピーしてもよい。
【００５８】
（変形例４）
上記の第１の実施形態において、ＮＵＭＡアーキテクチャを用いた計算機システムを例に説明したが、これに限られない。例えば、ＯＳを動作させずにユーザプログラムを実行する計算ノード及びＯＳ機能を提供する制御ノードを備えるアーキテクチャにおいて、ＯＳが動作していない計算機ノードがＮＵＭＡを構成する場合にも適用可能である。
【００５９】
（変形例５）
コンピュータ読み取り可能な記憶媒体は、例えば、ハードディスクドライブ、着脱可能な磁気ディスク媒体、光学ディスク媒体、メモリカードであってもよい。
【００６０】
（第１の実施形態の効果）
第１の実施形態によれば、リモートメモリにテキスト領域がマッピングされている場合、ローカルメモリに当該テキスト領域を複製し、ローカルメモリ上の当該テキスト領域を使用することが可能となる。プロセスのメモリアクセス性能の低下を抑制することができる。これにより、例えば、プロセスを多重に起動する場合でも、テキスト領域へのアクセスをより高速なローカルメモリにできる。
【００６１】
また、リモートメモリにテキスト領域がマッピングされている場合、メモリ保護を確認し、メモリ保護がリードオンリーであれば、ローカルメモリにリードオンリーのテキスト領域を複製し、当該テキスト領域を使用することが可能となる。例えば、リードオンリーであれば共有するデータ領域をよりアクセスが高速なローカルメモリとすることができる。
【００６２】
第１の実施形態によれば、ＮＵＭＡノード間のキャッシュコヒーレンシ維持を無効化し、他ノードのリモートメモリへのアクセスをキャッシュ無効とすることで、インターコネクトを流れるキャッシュコヒーレンシ維持のためのデータ量を減らすことができる。インターコネクトにおける通信が減った分をプロセスから要求されたメモリ転送に利用することが可能となる。また、システム全体において、プロセスが実行するメモリ転送性能の向上が見込まれる。
【００６３】
（第２の実施形態）
第２の実施形態の一態様であるメモリ配置装置について説明する。第２の実施形態のメモリ配置装置は、第１の実施形態のメモリ配置装置を最小構成で表した形態である。第２の実施形態のメモリ配置装置も第１の実施形態と同様にプロセッサとメモリの対となるノードが複数存在する計算機システムに適用される。計算機システムのハードウエア構成は、図１と同様である。
【００６４】
図８は、第２の実施形態であるメモリ配置装置の機能を示すブロック図である。図８に示すメモリ配置装置２０は、メモリ位置判定部２１とマッピング部２２を備える。メモリ位置判定部２１は、マッピングしようとするメモリ領域が配置されたノードを判定する。マッピング部２２は、メモリ位置判定部２１の判定結果に基づき、メモリ領域を複製してプロセスが動作するノードのローカルメモリに配置する。
【００６５】
第２の実施形態によれば、リモートメモリにテキスト領域がマッピングされている場合、ローカルメモリに当該テキスト領域を複製し、ローカルメモリ上の当該テキスト領域を使用することが可能となる。プロセスのメモリアクセス性能の低下を抑制することができる。これにより、例えば、プロセスを多重に起動する場合でも、テキスト領域へのアクセスをより高速なローカルメモリにできる。
【００６６】
また、リモートメモリにテキスト領域がマッピングされている場合、メモリ保護を確認し、メモリ保護がリードオンリーであれば、ローカルメモリにリードオンリーのテキスト領域を複製し、当該テキスト領域を使用することが可能となる。
【００６７】
以上、本開示の実施形態について説明したが、本開示は、上述した実施形態には限定されない。即ち、本開示の実施形態は、当業者が理解し得る様々な態様を適用することができる。
【符号の説明】
【００６８】
１０  ＣＰＵ
１１  コア
１２  メモリ
１３  メモリチャネル
１４  インターコネクト
１５  ハードディスク
１００  カーネル
１６０  メモリ位置判定部
１７０  マッピング部
【図１】
2020140227.tif 000003
【図２】
2020140227.tif 000004
【図３】
2020140227.tif 000005
【図４】
2020140227.tif 000006
【図５】
2020140227.tif 000007
【図６】
2020140227.tif 000008
【図７】
2020140227.tif 000009
【図８】
2020140227.tif 000010