JP6404347B2 - 実行オフロード - Google Patents

実行オフロード Download PDF

Info

Publication number
JP6404347B2
JP6404347B2 JP2016529456A JP2016529456A JP6404347B2 JP 6404347 B2 JP6404347 B2 JP 6404347B2 JP 2016529456 A JP2016529456 A JP 2016529456A JP 2016529456 A JP2016529456 A JP 2016529456A JP 6404347 B2 JP6404347 B2 JP 6404347B2
Authority
JP
Japan
Prior art keywords
computing device
execution
client computing
server
system call
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2016529456A
Other languages
English (en)
Other versions
JP2017504088A (ja
Inventor
カプラン、デイヴィッド
サクス、アヴィアド
タイテ、シャハール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2017504088A publication Critical patent/JP2017504088A/ja
Application granted granted Critical
Publication of JP6404347B2 publication Critical patent/JP6404347B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Stored Programmes (AREA)

Description

常に進化し続けているコンピューティングエコシステム、特に、利用が増加しているモバイルコンピューティングデバイスにおいて、消費電力、セキュリティ、パフォーマンス、機能およびサイズは重要なパラメータである。例えば、モバイルコンピューティングデバイスは、消費電力およびデバイス/コンポーネントのサイズを最小限に抑える一方、パフォーマンス、セキュリティおよび機能を最大限に高めるよう設計されていることが多い。クラウドコンピューティング等の共有コンピューティングメカニズムの誕生と共に、ローカルコンピューティングデバイス(例えば、モバイルコンピューティングデバイス)からリモートコンピューティングデバイス(例えば、クラウドコンピューティング環境のサーバ)へと実行をオフロードすることが可能となっている。通常、このような実行オフロードでは、ローカルコンピューティングデバイスからリモートコンピューティングデバイスへと全ての環境コンテキストを転送し、および/または、リモートに実行されるアプリケーションへと修正を転送する。
コンピューティングデバイスは、アプリケーションの実行中、複数の実行モードを利用するのが一般的である。例えば、特定のコンピューティングデバイスには、プログラムの通常実行のための非特権モード、および、オペレーティングシステムカーネルが実行される特権モードがあるとしてよい。実行中のプログラムは、システムリソースにアクセスするため、または、ハードウェア関連のサービスを実行(例えば、ハードディスクデータにアクセス)するために、オペレーティングシステムに対応するサービスを実行させるよう要求することを目的としてシステムコールを利用する。
本明細書で説明する概念は、限定を目的としたものではなく一例として添付図面に図示する。図示は簡略化および明瞭化されており、図中に図示している構成要素は必ずしも実寸に即したものではない。適切であると考えられる場合には、複数の図面にわたって参照符号を繰り返し用いて、対応する構成要素または同様の構成要素を指定する。
プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードするためのシステムの少なくとも1つの実施形態を示す簡略化されたブロック図である。 図1のシステムの環境の少なくとも1つの実施形態を示す簡略化されたブロック図である。 プログラムコードのオフロード実行に関する、図1のサーバによって実行される方法の少なくとも1つの実施形態を示す簡略化されたフローチャートである。 図1のクライアントコンピューティングデバイスによってプログラムコードの実行をオフロードするための方法の少なくとも1つの実施形態を示す簡略化されたフローチャートである。
本開示の概念はさまざまな点で変形および変更し得るものであるが、本開示の具体的な実施形態は図面において一例として図示しており本明細書において詳細に説明する。しかし、本開示の概念を開示した具体的な形態に限定する意図はなく、それとは逆に、本開示および添付した請求項に一致する全ての変形例、均等例、および変更例を含むことを意図すると理解されたい。
本明細書において「一実施形態」、「実施形態」、「実施形態例」等と言及する場合、説明している実施形態は特定の特徴、構造または特性を含み得るが、全ての実施形態が必ずしもその特定の特徴、構造または特性を含むものではないことを意味する。さらに、そのような表現は、同じ実施形態を必ずしも意味するものではない。さらに、特定の特徴、構造または特性を一の実施形態に関連付けて説明する場合、明確にそう記載されていようといまいと、このような特徴、構造または特性を複数の他の実施形態と関連付けて実施することは当業者の知るところであると考えられる。また、「A、BおよびCのうち少なくとも1つ」という表現においてリストに含まれる項目は、(A)、(B)、(C)、(AおよびB)、(BおよびC)または(A、BおよびC)を意味し得ると考えられたい。同様に、「A、BまたはCのうち少なくとも1つ」という表現においてリストに含まれる項目は、(A)、(B)、(C)、(AおよびB)、(BおよびC)または(A、BおよびC)を意味し得る。
開示された実施形態は、一部のケースにおいて、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組み合わせで実施されるとしてよい。開示された実施形態はさらに、1または複数の一時的または非一時的機械可読(例えば、コンピュータ可読)記憶媒体で担持または格納する命令として実施されるとしてよい。当該命令は、1または複数のプロセッサによって読み出されて実行されるとしてよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または、機械による読み出しが可能な形式で情報を格納または送信するための他の物理的構造(例えば、揮発性または不揮発性のメモリ、メディアディスク、または、その他のメディアデバイス)として具現化されるとしてよい。
図面では、一部の構造上または方法上の特徴を具体的な配置および/または順序で図示する場合がある。しかし、そのような具体的な配置および/または順序は要件ではないと考えられたい。逆に、一部の実施形態では、そのような特徴は、一例として挙げた図面に図示したものとは別の方法および/または順序で配置されるとしてよい。さらに、特定の図面に所与の構造上または方法上の特徴を含むからといって、そのような特徴が全ての実施形態で必要となることを意味するわけではなく、一部の実施形態においては、含まれない場合もあり、または、他の特徴と組み合わせられる場合もあるとしてよい。
ここで図1を参照すると、プログラムコードの実行をオフロードするためのシステム100は、クライアントコンピューティングデバイス102、ネットワーク104およびサーバ106を備える。利用について、より詳細に後述するが、クライアントコンピューティングデバイス102は、プログラムコードのオフロード実行のために、サーバ106にプログラムコード(例えば、アプリケーション)を送信するよう構成されている。サーバ106は、クライアントコンピューティングデバイス102が実行するべきシステムコールを必要とするプログラムコード命令を発見すると、当該命令を実行のためにクライアントコンピューティングデバイス102に送信する。場合によっては、クライアントコンピューティングデバイス102およびサーバ106の両方がシステムコール命令を実行するとしてよい。
クライアントコンピューティングデバイス102は、プログラムコードを実行し、ネットワーク104を介してサーバ106と通信し、本明細書で説明する機能を実行することが可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、クライアントコンピューティングデバイス102は、携帯電話、スマートフォン、タブレットコンピュータ、ネットブック、ノートブック、ウルトラブック(商標)、ラップトップコンピュータ、携帯情報端末(PDA)、モバイルインターネットデバイス、デスクトップコンピュータ、ハイブリッドデバイスおよび/または任意のその他のコンピューティング/通信デバイスとして具現化されるとしてよい。図1に図示しているように、一例となるクライアントコンピューティングデバイス102は、プロセッサ110、入出力(I/O)サブシステム112、メモリ114、データストレージ116、通信回路118および1または複数の周辺機器120を有する。言うまでもなく、他の実施形態において、クライアントコンピューティングデバイス102は、通常のコンピューティングデバイスに通常含まれるコンポーネント(例えば、さまざまな入出力デバイス)等の他のコンポーネントを含むとしてもよいし、またはコンポーネントが追加されるとしてもよい。また、一部の実施形態において、例示したコンポーネントのうち1または複数は、他のコンポーネントに組み込まれるとしてもよいし、または、他のコンポーネントの一部を成すとしてもよい。例えば、メモリ114またはその一部は、一部の実施形態において、プロセッサ110に組み込まれるとしてよい。
プロセッサ110は、本明細書に説明する機能を実行することが可能な任意の種類のプロセッサとして具現化されるとしてよい。例えば、プロセッサは、1または複数の単一コアプロセッサまたはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラまたはその他のプロセッサ、あるいは、処理/制御回路として具現化されるとしてよい。同様に、メモリ114は、本明細書で説明する機能を実行可能な任意の種類の揮発性または不揮発性のメモリ、または、データストレージとして具現化されるとしてよい。動作については、メモリ114は、クライアントコンピューティングデバイス102の動作時に利用されるさまざまなデータおよびソフトウェア、例えば、オペレーティングシステム、アプリケーション、プログラム、ライブラリおよびドライバを格納しているとしてよい。メモリ114は、I/Oサブシステム112を介してプロセッサ110に通信可能に結合されている、I/Oサブシステム112は、プロセッサ110、メモリ114およびクライアントコンピューティングデバイス102の他のコンポーネントとの間での入出力処理を円滑化するための回路および/またはコンポーネントとして具現化されるとしてよい。例えば、I/Oサブシステム112は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク(つまり、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント配線基板の配線等)および/または入出力処理を円滑化するための他のコンポーネントおよびサブシステムとして具現化されるとしてもよいし、これらを含むとしてもよい。一部の実施形態において、I/Oサブシステム112は、システムオンチップ(SoC)の一部を成すとしてよく、プロセッサ110、メモリ114およびクライアントコンピューティングデバイス102の他のコンポーネントと共に、一の集積回路チップに組み込まれるとしてよい。
データストレージ116は、データを短期または長期にわたって格納するよう構成された任意の種類の一または複数のデバイスとして具現化されるとしてよい。例えば、メモリデバイスおよびメモリ回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または、その他のデータストレージデバイス等であってよい。図1に示すように、データストレージ116は、トランスレーションテーブル122を含む。トランスレーションテーブル122は、クライアントコンピューティングデバイス102のローカルメモリアドレスと、サーバ106との間の対応関係をマッピングする。これについては、より詳細に後述する。トランスレーションテーブル122は、任意の適切なデータ構造(例えば、データベース)としてデータストレージ116に格納されるとしてよい。
通信回路118は、ネットワーク104を介したクライアントコンピューティングデバイス102と他のリモートデバイス(例えば、サーバ106)との間の通信を可能とすることが可能な任意の通信回路、デバイスまたはこれらの集合体として具現化されるとしてよい。このため、通信回路118は、任意の適切な通信技術(例えば、無線通信または有線通信)および対応するプロトコル(例えば、イーサネット(登録商標)、Bluetooth(登録商標)、Wi−Fi(登録商標)、WiMAX(登録商標)等)を利用して、例えば、ネットワークの種類に応じて上記のような通信を実現するとしてよい。当該ネットワークは、クライアントコンピューティングデバイス102とリモートデバイスとの間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。クライアントコンピューティングデバイス102の周辺機器120としては、任意の数の周辺機器またはインターフェース機器が追加されるとしてよい。周辺機器120に含まれる特定のデバイスは、例えば、クライアントコンピューティングデバイス102の種類および/またはその利用意図に応じて変わるとしてよい。
ネットワーク104は、クライアントコンピューティングデバイス102とサーバ106との間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。このため、ネットワーク104は、1または複数のネットワーク、ルータ、スイッチ、コンピュータ、および/または、その他の中継デバイスを含むとしてよい。例えば、ネットワーク104は、1または複数のローカルエリアネットワークまたはワイドエリアネットワーク、公共利用可能なグローバルネットワーク(例えば、インターネット)、セルラーネットワーク、電話ネットワーク、アドホックネットワークまたはこれらの任意の組み合わせとして具現化されるとしてもよいし、または、これらを含むとしてもよい。
サーバ106は、本明細書で説明する機能を実行可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、一部の実施形態において、サーバ106は、上述したクライアントコンピューティングデバイス102と同様であってよい。つまり、サーバ106は、企業レベルでのサーバコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、携帯電話、スマートフォン、携帯情報端末(PDA)、モバイルインターネットデバイス、ネットブック、ノートブック、ウルトラブック(商標)、ハイブリッドデバイスおよび/または任意のその他のコンピューティング/通信デバイスとして具現化されるとしてよい。さらに、サーバ106は、上述したクライアントコンピューティングデバイス102のコンポーネントと同様のコンポーネントを含むとしてよい。例えば、図1の実施形態例に図示しているように、サーバ106は、プロセッサ150、I/Oサブシステム152、メモリ154、データストレージ156(例えば、トランスレーションテーブル162を格納するためのもの)、通信回路158および、1または複数の周辺機器160を有する。クライアントコンピューティングデバイス102が有するこれらのコンポーネントに関する説明は、サーバ106の対応するコンポーネントの説明としても等しく当てはまり、説明を分かり易くするべくここでは省略する。また、サーバ106は、コンピューティングデバイスまたはサーバに通常含まれる他のコンポーネント、サブコンポーネントおよびデバイスを含み得ると考えられたい。これらは、クライアントコンピューティングデバイス102に関連して上記で説明しておらず、説明を分かり易くするべくここでも説明を省略する。トランスレーションテーブル162は、上述したトランスレーションテーブル122と略同様であるとしてよく、サーバ106のローカルメモリアドレスとクライアントコンピューティングデバイス102との間の対応関係をマッピングしているとしてよい。図1に図示されているトランスレーションテーブルは122、162の2つであるが、一部の実施形態では、一のトランスレーションテーブル122,162をクライアントコンピューティングデバイス102またはサーバ106の一方にのみ格納する(つまり、両方には格納しない)。
ここで図2を参照すると、利用について、システム100のクライアントコンピューティングデバイス102は、環境200を構築し、システム100のサーバ106はプログラムコードのオフロード実行のための環境250を構築する。後述するように、サーバ106はクライアントコンピューティングデバイス102から受信するプログラムコードを実行する。プログラムコードの命令がクライアントコンピューティングデバイス102によるシステムコールの実行(例えば、ファイルへのアクセス)を必要とする場合、サーバ106は実行のために当該命令をクライアントコンピューティングデバイス102に送信する。
一例となるクライアントコンピューティングデバイス102の環境200は、コード管理モジュール204、システムコール実行モジュール206および通信モジュール208を含む。さらに、実施形態例におけるサーバ106の環境250は、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256を含む。コード管理モジュール204、システムコール実行モジュール206、通信モジュール208、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256のそれぞれは、ハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせとして具現化されるとしてよい。また、一部の実施形態において、例示しているモジュールのうちの1つは、別のモジュールの一部を成すとしてよい(例えば、コード実行モジュール252はシステムコール管理モジュール254の一部を成すとしてよい)。
クライアントコンピューティングデバイス102のコード管理モジュール204は、ネットワーク104を介して実行のために(例えば、通信モジュール208を介して)サーバ106にプログラムコードを送信する。プログラムコードは、例えば、アプリケーション202を実行するための1または複数のバイナリアプリケーションファイルまたは他のプログラムコードとして具現化されるとしてよい。後述するように、当該実施形態例では、プログラムコードは、当該コードを修正することなく実行させるべく、サーバ106に送信される。サーバ106は、当該プログラムコードを受信することに応じて、送信されたプログラムコードを実行するよう構成されている。サーバ106がプログラムコードの命令がクライアントコンピューティングデバイス102による実行を必要とするシステムコールを含むと判断すると、サーバ106は実行のために当該命令をクライアントコンピューティングデバイス102に送信する。したがって、クライアントコンピューティングデバイス102のコード管理モジュール204がこのような命令を(例えば、通信モジュール208で)受信する。
システムコール実行モジュール206は、サーバ106から受信した命令を実行する。つまり、システムコール実行モジュール206は、オフロードされたプログラムコードのうち、サーバ106がクライアントコンピューティングデバイス102による実行が必要なシステムコールを含むと判断した命令を実行する。システムコール実行モジュール206は(つまり、通信モジュール208と協働して)、システムコールの実行に基づき、応答(例えば、システムコールの結果および/またはメモリマッピングデータ)をサーバ106に送信する。また、より詳細に後述するが、システムコール実行モジュール206は、システムコールのアドレスを、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換し、クライアントコンピューティングデバイス102のローカルコンテキストにおいてメモリを割り当て(例えば、メモリ114またはデータストレージ116内)、および/または、(例えば、メモリ割り当てに基づいて)トランスレーションテーブル122を更新するとしてよい。
通信モジュール208は、ネットワーク104を介してクライアントコンピューティングデバイス102とリモートデバイス(例えば、サーバ106)との間の通信を処理する。上述したように、コード管理モジュール204およびシステムコール実行モジュール206は、システムコールを含む命令に関して、通信モジュール208を介してサーバ106と通信する。
図2に示すように、サーバ106は、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256を有する。コード実行モジュール252は、実行のためにクライアントコンピューティングデバイス102から受信したプログラムコードをロードして実行する。さらに、一部の実施形態において、コード実行モジュール252は、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間でアドレス変換を行うトランスレーションテーブル162を(例えば、プログラムコードのロード中に)初期化する。実行したプログラムコードの特定の命令によって決まるが、コード実行モジュール252および/またはシステムコール管理モジュール254は、システムコールに対応付けられているアドレスを変換するか、および/または、命令(例えば、システムコールを必要とする命令)の実行に応じてトランスレーションテーブル162を更新するとしてよい。
システムコール管理モジュール254は、プログラムコード(つまり、クライアントコンピューティングデバイス102から受信しコード実行モジュール252が実行するプログラムコード)の実行をモニタリングし、実行すべき当該プログラムコードの命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、システムコール管理モジュール254は、システムコールを開始するプログラムコードを「トラップ」またはインターセプトする。システムコールが特定されクライアントコンピューティングデバイス102による実行が必要と判断されると、システムコール管理モジュール254は、当該命令および、必要であれば、 関連するコンテンツ/データを、実行のためにクライアントコンピューティングデバイス102に(例えば、通信モジュール256を介して)送信する。この後、システムコール管理モジュール254は、クライアントコンピューティングデバイス102によるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイス102から応答を受信する。
特定のシステムコール、システムコールの種類、または、クライアントコンピューティングデバイス102および/またはサーバ106による実行が必要となる命令は、特定の実施形態および/またはオフロードされたプログラムコードによって異なり得ると理解されたい。クライアントコンピューティングデバイス102による実行が必要であるシステムコールは、例えば、読み出し、書き込み、開く、閉じる、メモリ割り当て、および、他のシステムコールを含むとしてよい。図2に図示しているように、実行ポリシーデータベース258は、サーバ106に(つまり、適切なデータ構造として)格納されているか、または、サーバ106から別の方法でアクセス可能(例えば、リモートデバイスに格納されておりネットワーク104を介してアクセス可能)であるとしてよい。当該実施形態例によると、実行ポリシーデータベース258は、クライアントコンピューティングデバイス102によって処理すべきシステムコール、サーバ106によって処理すべきシステムコール、および/または、クライアントコンピューティングデバイス102およびサーバ106の両方によって処理すべきシステムコールを特定する。一部の実施形態において、実行ポリシーデータベース258は、クライアントコンピューティングデバイス102から受信されるとしてもよいし、または、クライアントコンピューティングデバイス102によって更新されるとしてもよい。例えば、実行ポリシーデータベース258に格納すべき実行ポリシーは、プログラムコードと共に、クライアントコンピューティングデバイス102からサーバ106へと送信されるとしてよい。この実行ポリシーは、例えば、プログラムコードの設計者によって開発または定義されるとしてよい。これに加えて、または、これに代えて、実行ポリシーは、(例えば、一般的なシステムコールに基づいて)サーバ106が決定するとしてもよいし、または、サーバ106が推定するとしてもよい。いずれにしても、システムコール管理モジュール254は、特定されたシステムコール(または、システムコールを必要とする命令)を実行ポリシーデータベース258と比較して、各システムコールをどのように処理するか判断する。つまり、実行ポリシーデータベース258は、システムコールのリストを含み、各システムコールがどのようにローカル(該当する場合)およびリモートに(該当する場合)処理されるべきかを特定する。
サーバ106の通信モジュール256は、クライアントコンピューティングデバイス102の通信モジュール208と同様であってよい。つまり、通信モジュール256は、ネットワーク104を介したサーバ106とリモートデバイス(例えば、クライアントコンピューティングデバイス102)との間の通信を処理する。上述したように、コード実行モジュール252およびシステムコール管理モジュール254は、システムコールを含む命令に関して、通信モジュール256を介してクライアントコンピューティングデバイス102と通信する。一部の実施形態において、通信モジュール256および通信モジュール208は、システムコールに関するデータおよび命令を送信するべくサーバ106とクライアントコンピューティングデバイス102との間にセキュアな通信リンクを構築する。
ここで図3を参照すると、利用について、システム100のサーバ106は、プログラムコードの実行をクライアントコンピューティングデバイス102からサーバ106へとオフロードする方法300を実行するとしてよい。例示している方法300は、図3に示すブロック302から開始される。ブロック302では、サーバ106が実行をオフロードするか否かを判断する。一部の実施形態において、サーバ106は、クライアントコンピューティングデバイス102から実行のためにプログラムコードを受信することに応じて、実行をオフロードすると判断すると考えられたい。このため、ブロック304においては、サーバ106はクライアントコンピューティングデバイス102からプログラムコードを受信する。上述したように、プログラムコードは、1または複数の修正されていないバイナリアプリケーションファイルとして具現化されるとしてよい。言い換えると、クライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102が修正なしで実行するアプリケーションファイルを、サーバ106によるリモート実行のためにサーバ106に送信するとしてよい。さらに、上述したように、一部の実施形態において、サーバ106は、ブロック304において、プログラムコードと共に、クライアントコンピューティングデバイス102による実行が必要であるシステムコールを定義する実行ポリシーを受信するとしてよい。このような実施形態において、サーバ106は、任意の受信した実行ポリシーを実行ポリシーデータベース258に格納する。
ブロック306において、サーバ106は、クライアントコンピューティングデバイス102から受信したプログラムコードをロードして実行する。この際、サーバ106は、ブロック308において、クライアントコンピューティングデバイス102のローカルメモリアドレスとサーバ106との間のマッピング/対応関係に関する情報を格納するための1または複数のトランスレーションテーブルを初期化するとしてよい。ブロック310において、サーバ106は、次に実行すべき命令がシステムコールを必要としているか否かを判断する。上述したように、一部の実施形態において、サーバ106は、プログラムコードの実行をモニタリングして、システムコールが発生すればプログラムコードを「トラップ」するか、または、インターセプトを実行する。そして、サーバ106の実行ポリシーデータベース258はトラップすべき命令またはシステムコールのリストを含むとしてよい。
サーバ106は、命令がシステムコールを必要としないと判断すると、ブロック312において命令を実行する。言い換えると、サーバ106は、システムコールに当たるまで、クライアントコンピューティングデバイス102から受信するプログラムコードの命令を実行し続ける。命令がシステムコールである場合、ブロック314において、サーバ106は当該システムコールがクライアントコンピューティングデバイス102による実行を必要とするか否かを判断する。上記で言及したように、この判断を下すために、サーバ106は当該命令またはシステムコールをサーバ106の実行ポリシーデータベース258と比較するとしてよい。実行ポリシーデータベース258は、例えば、特定の種類のシステムコールまたは命令がクライアントコンピューティングデバイス102および/またはサーバ106による実行を必要とするか否かを示すとしてよい。システムコールがクライアントコンピューティングデバイス102による実行を必要とする場合、サーバ106は、ブロック316において、システムコールを必要とする命令をクライアントコンピューティングデバイス102に送信する。さらに、ブロック318において、サーバ106は、システムコールの1または複数のパラメータ(例えば、メモリ154に格納されておりポインタによって特定されるファイル名)に対応付けられているデータ、および/または、システムコールおよび/または関連するシステムコール(例えば、後続のシステムコール)の実行に関するメモリ154の他のデータ/コンテンツを送信するとしてよい。例えば、一実施形態において、システムコールは、ファイル名を保持するメモリ位置へのポインタおよびモードという2つのパラメータを持つ「open()」システムコールであってよい。本明細書で説明するように、サーバ106およびクライアントコンピューティングデバイス102のそれぞれは、ファイル名にメモリを割り当て、トランスレーションテーブル122、162においてポインタマッピングを構築する。さらに、ある時点において(例えば、システムコールを含む命令の送信と同時)、サーバ106は、ファイル名データをクライアントコンピューティングデバイス102に送信する。クライアントコンピューティングデバイス102は、当該データを、適切なメモリ位置に(つまり、トランスレーションテーブル122、162に格納されているマッピングに基づいて)格納する。こうすることによって、クライアントコンピューティングデバイス102は、システムコールおよび/または後続の関連するシステムコール(例えば、同一ファイルにアクセスするためのシステムコール)に関連する適切なファイルにアクセスすることが可能となる。
この後、ブロック320において、サーバ106は、送信したシステムコールのクライアントコンピューティングデバイス102による実行に基づき、クライアントコンピューティングデバイス102から応答を受信するとしてよい。当該応答の内容は、実施形態によって異なるとしてよく、例えば、システムコールの実行に関するステータス情報、システムコールに基づきクライアントコンピューティングデバイス102のカーネルが返すデータ、クライアントコンピューティングデバイス102におけるメモリ割り当てに基づくメモリマッピングデータおよび/またはサーバ106のメモリアドレスとクライアントコンピューティングデバイス102との間のマッピング、および/または、命令またはシステムコールに関連するその他の情報を含むとしてよい。一部の実施形態において、クライアントコンピューティングデバイス102は、サーバ106に応答を提供することなくシステムコールを実行するとしてよい。
サーバ106が、ブロック314においてシステムコールがクライアントコンピューティングデバイス102による実行を必要としないと判断する場合、または、ブロック320においてクライアントコンピューティングデバイス102から応答を受信した後、方法300はブロック322に進む。ブロック322において、サーバ106は、システムコールがサーバ106による実行を必要としているか否かを判断する。この判断のタイミングは実施形態ごとに異なると考えられたい。例えば、一部の実施形態において、サーバ106は、システムコールがクライアントコンピューティングデバイス102による実行を必要とするか否かの判断(例えば、システムコールまたはシステムコールの種類を実行ポリシーデータベース258と比較することによって行う)と同時に、システムコールがサーバ106による実行を必要とするか否かを判断するとしてよい。
システムコールがサーバ106による実行を必要としない場合、方法300はブロック310に戻る。ブロック310において、サーバ106は次の命令がシステムコールを必要とするか否かを判断する。つまり、サーバ106は、別のシステムコールに当たるまで、プログラムコードを実行する。しかし、システムコールがサーバ106による実行を必要とする場合、ブロック324において、サーバ106はシステムコールを実行する。この際、サーバ106は、ブロック326において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、システムコールは、クライアントコンピューティングデバイス102およびサーバ106の両方による実行が必要になるとしてもよい。したがって、サーバ106は、システムコールのアドレス、または、システムコールに関連するアドレス(例えば、メモリ割り当てに関連するもの)を、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換するとしてよい。これに加えて、または、これに代えて、サーバ106はブロック328においてトランスレーションテーブル162を更新するとしてもよい。例えば、サーバ106は、サーバ106によるシステムコールの実行に関して発生したメモリまたはアドレスの修正(例えば、メモリ割り当て)に基づいてトランスレーションテーブル162を更新するとしてよい。システムコールがサーバ106による実行を必要としない場合、または、サーバ106によるシステムコールの実行に応じて、方法300はブロック310に戻る。ブロック310において、サーバ106は次の命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、ブロック302−328のうち1または複数は並列に実行されるとしてもよく(例えば、ブロック314−320をブロック322―328と並列に実行するとしてよい)、または、図3に図示した順序とは別の順序で実行するとしてもよいと考えられたい。
ここで図4を参照すると、利用について、システム100のクライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102からサーバ106へとプログラムコードの実行をオフロードする方法400を実行するとしてよい。例示した方法400は、図4のブロック402で開始される。ブロック402において、クライアントコンピューティングデバイス102は実行をオフロードするか否かを判断する。オフロードする場合、クライアントコンピューティングデバイス102は、ブロック404において、実行のためにプログラムコードをサーバ106へと送信する。上述したように、例示した実施形態において、プログラムコードの実行をサーバ106にオフロードする上で、プログラムコードを修正すること、または、クライアントコンピューティングデバイス102のコンテキストを送信することは不要である。また、上述したように、クライアントコンピューティングデバイス102はさらに、ブロック404において、プログラムコードと共に、クライアントコンピューティングデバイス102による実行を必要とするシステムコールを定義している実行ポリシーを送信するとしてもよい。
図4において二重波線記号で示す期間が経過した後、クライアントコンピューティングデバイス102は、ブロック406において、システムコールをサーバ106から受信したか否かを判断する。上述したように、クライアントコンピューティングデバイス102がプログラムコードを実行のためにサーバ106に送信した後、サーバ106はプログラムコードをロードして実行する。サーバ106は、クライアントコンピューティングデバイス102によって実行されるべきシステムコールを必要とする命令をトラップするか、または、その他の方法で特定すると、当該命令および/またはシステムコールを実行のためにクライアントコンピューティングデバイス102に送信する。
このため、クライアントコンピューティングデバイス102は、サーバ106から実行のためにシステムコールを受信すると、ブロック408において、システムコールがアドレス/メモリ変換を必要とするか否かを判断する。一部の実施形態において、クライアントコンピューティングデバイス102は、受信した特定のシステムコールに基づいて(例えば、サーバ106の実行ポリシーデータベース258と同様のデータベースとシステムコールとを比較することによって)このような判断を下すとしてよい。他の実施形態では、サーバ106は、クライアントコンピューティングデバイス102がプログラムコード命令またはシステムコールをどのように処理、実行または取り扱うべきかを示す補助的な命令を送信するとしてもよい。
クライアントコンピューティングデバイス102は、システムコールがアドレス/メモリ変換を必要とすると判断する場合、ブロック410において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、クライアントコンピューティングデバイス102は、システムコールのアドレス(または、システムコールに関連するアドレス)を、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換するとしてよい。ブロック412において、クライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102のローカルコンテキストにおいてメモリを割り当てるとしてよい。クライアントコンピューティングデバイス102は、ブロック414において、(例えば、メモリ割り当てに基づき)トランスレーションテーブル122を更新するとしてよい。例えば、サーバ106は、(例えば、ファイルを書き込むために)メモリの割り当てを必要とするシステムコールを発見するとしてよい。サーバ106は当該システムコールを実行するが、さらに、クライアントコンピューティングデバイス102にクライアントコンピューティングデバイス102における実行(つまり、メモリ割り当て)のために当該システムコールを送信する。サーバ106およびクライアントコンピューティングデバイス102の両方は、対応するローカルコンテキストにおいてメモリを割り当てるとしてもよい。プログラムコードはサーバ106で実行されるので、プログラムコードはサーバ106で割り当てられるメモリを利用する。しかし、書き込み処理はクライアントコンピューティングデバイス102にファイルを書き込むことに関する。このため、クライアントコンピューティングデバイス102およびサーバ106は、クライアントコンピューティングデバイス102とサーバ106との間でアドレス変換を行うために、トランスレーションテーブル122、162の一方または両方を利用する。また、トランスレーションテーブル122、162は関連するアドレス修正に基づいて更新される。
ブロック416において、クライアントコンピューティングデバイス102は、サーバ106から受信したシステムコールを実行する。ブロック410−414で行われる変換、割り当ておよび/または更新は、一部の実施形態において、システムコールの実行の一部として実施され得ると考えられたい。ブロック418において、クライアントコンピューティングデバイス102は、システムコールの実行に基づいてシステムコール応答をサーバ106に送信する。上述したように、応答の内容は、特定の実施形態に応じて変わるとしてよく、クライアントコンピューティングデバイス102によるシステムコールの実行に関連するさまざまな情報を含むとしてよい。応答をサーバ106に送信することに応じて、方法400はブロック406に戻り、ブロック406において、クライアントコンピューティングデバイス102はシステムコールがサーバ106から受信されたか否かを判断する。つまり、クライアントコンピューティングデバイス102は、サーバ106が、クライアントコンピューティングデバイス102による実行を必要とするシステムコールを送信するまで待機する。
<例>
本明細書で開示した技術の例を以下に記載する。当該技術の実施形態は、以下に記載する例のうち1または複数、および、それらの組み合わせを含むとしてよい。
例1は、クライアントコンピューティングデバイスからプログラムコードの実行をオフロードするサーバを含む。当該サーバは、クライアントコンピューティングデバイスから受信したプログラムコードを実行するコード実行モジュールと、システムコール管理モジュールとを備える。システムコール管理モジュールは、(i)プログラムコードの実行をモニタリングして、実行すべきプログラムコードの命令がシステムコールを必要するか否かを判断し、(ii)命令がシステムコールの実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信し、(iii)クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じてクライアントコンピューティングデバイスから応答を受信する。
例2は、例1の主題を含み、システムコール管理モジュールはさらに、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを判断し、クライアントコンピューティングデバイスに命令を送信することは、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信することを含む。
例3は、例1または2の主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令はサーバによる実行を必要とするという判断に応じてシステムコールを必要とすると判断された命令を実行する。
例4は、例1から3のいずれかの主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する。
例5は、例1から4のいずれかの主題を含み、プログラムコードをロードすることは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化することを含む。
例6は、例1から5のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールに対応付けられたアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
例7は、例1から6のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールを必要とする命令の実行に基づきトランスレーションテーブルを更新することを含む。
例8は、例1から7のいずれかの主題を含み、コード実行モジュールはさらに、実行すべき命令はシステムコールを必要としないという判断に応じて、命令を実行する。
例9は、例1から8のいずれかの主題を含み、通信モジュールが、クライアントコンピューティングデバイスから、サーバによって実行されるべきプログラムコードを受信することをさらに含む。
例10は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードする方法を含む。当該方法は、実行のためにクライアントコンピューティングデバイスから受信したプログラムコードを、サーバによってロードする段階と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを、サーバによって判断する段階と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントコンピューティングデバイスに、サーバから送信する段階と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイスから応答を、サーバによって受信する段階とを備える。
例11は、例10の主題を含み、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを、サーバによって判断する段階をさらに備える。命令をクライアントコンピューティングデバイスに送信する段階は、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、命令をクライアントコンピューティングデバイスに実行のために送信する段階を有する。
例12は、例10または11の主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令をサーバによって実行する段階をさらに備える。
例13は、例10から12のいずれかの主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を、サーバによって実行する段階をさらに備える。
例14は、例10から13のいずれかの主題を含み、プログラムコードをロードする段階は、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する段階を有する。
例15は、例10から14のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
例16は、例10から15のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新することを含む。
例17は、例10から16のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令をサーバによって実行する段階をさらに備える。
例18は、例10から17のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントコンピューティングデバイスからサーバによって受信する段階をさらに備える。
例19は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサで実行されると、コンピューティングデバイスは例10から18のいずれかの方法を実行する。
例20は、複数の命令が格納されている1または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは例10から18のいずれかの方法を実行する。
例21は、クライアントデバイスからプログラムコードの実行をオフロードするためのコンピューティングデバイスを含む。当該コンピューティングデバイスは、実行のためにクライアントデバイスから受信したプログラムコードをロードする手段と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを判断する手段と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントデバイスに送信する手段と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントデバイスから応答を受信する手段を備える。
例22は、例21の主題を含み、システムコールを必要とすると判断された命令がクライアントデバイスによる実行を必要とするか否かを判断する手段をさらに備える。命令をクライアントデバイスに送信する手段は、命令がクライアントデバイスによる実行を必要とするという判断に応じて、命令をクライアントデバイスに実行のために送信する手段を有する。
例23は、例21および22のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
例24は、例21から23のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
例25は、例21から24のいずれかの主題を含み、プログラムコードをロードする手段は、サーバのメモリアドレスとクライアントデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する手段を有する。
例26は、例21から25のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントデバイスのメモリアドレスとの間で変換する手段を含む。
例27は、例21から26のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新する手段を含む。
例28は、例21から27のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令を実行する手段をさらに備える。
例29は、例21から28のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントデバイスから受信する手段をさらに備える。
例30は、プログラムコードの実行をサーバにオフロードするクライアントコンピューティングデバイスを含む。当該クライアントコンピューティングデバイスは、(i)オフロード実行のためにサーバにプログラムコードを送信し、(ii)サーバによるプログラムコードの実行中に、システムコールを含むとサーバが判断したプログラムコードの命令を受信するコード管理モジュールと、システムコールを含むと判断された命令を実行するシステムコール実行モジュールとを備える。通信モジュールはさらに、クライアントコンピューティングデバイスによるシステムコールの実行に基づき、応答をサーバに送信する。
例31は、例30の主題を含み、システムコール実行モジュールはさらに、(i)受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを判断し、(ii)システムコールがアドレス/メモリ変換を必要とするという判断に応じて、システムコールのアドレスを、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間で変換する。
例32は、例30または31の主題を含み、システムコール実行モジュールは、(i)システムコールがアドレス/メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを割り当て、(ii)メモリ割り当てに基づきトランスレーションテーブルを更新する。
例33は、例30から32のいずれかの主題を含み、応答をサーバに送信することは、メモリマッピングデータをサーバに送信することを含む。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
例34は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバにオフロードする方法を含む。当該方法は、クライアントコンピューティングデバイスから、オフロード実行のためにサーバにプログラムコードを送信する段階と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を、クライアントコンピューティングデバイスによって受信する段階と、システムコールを必要とすると判断された命令をクライアントコンピューティングデバイスによって実行する段階と、クライアントコンピューティングデバイスからサーバへと、クライアントコンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する段階とを備える。
例35は、例34の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを、クライアントコンピューティングデバイスによって判断する段階と、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを、クライアントコンピューティングデバイスによって変換する段階とをさらに備える。
例36は、例34または35の主題を含み、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを、クライアントコンピューティングデバイスによって割り当てる段階と、メモリ割り当てに基づいてトランスレーションテーブルを、クライアントコンピューティングデバイスによって更新する段階とをさらに備える。
例37は、例34から36のいずれかの主題を含み、サーバに応答を送信する段階は、メモリマッピングデータをサーバに送信する段階を有する。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
例38は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサによって実行されると、コンピューティングデバイスは例34から37のいずれかの方法を実行する。
例39は、複数の命令を格納している1または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは、例34から37のいずれかの方法を実行する。
例40は、プログラムコードの実行をサーバにオフロードするコンピューティングデバイスを含む。当該コンピューティングデバイスは、オフロード実行のためにサーバにプログラムコードを送信する手段と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を受信する手段と、システムコールを必要とすると判断された命令を実行する手段と、サーバへと、コンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する手段を備える。
例41は、例40の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを判断する手段と、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを変換する手段とをさらに備える。
例42は、例40または41の主題を含み、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、コンピューティングデバイスのローカルコンテキストにおいてメモリを割り当てる手段と、メモリ割り当てに基づいてトランスレーションテーブルを更新する手段とをさらに備える。
例43は、例40から42のいずれかの主題を含み、サーバに応答を送信する手段は、メモリマッピングデータをサーバに送信する手段を有する。メモリマッピングデータは、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。

Claims (22)

  1. クライアントコンピューティングデバイスからプログラムコードの実行をオフロードするサーバであって、
    (i)前記クライアントコンピューティングデバイスから、前記プログラムコードと共に、前記クライアントコンピューティングデバイスによる実行が必要であるシステムコールを定義する実行ポリシーを受信し、
    (ii)前記クライアントコンピューティングデバイスから受信した前記実行ポリシーを実行ポリシーデータベースに格納し、
    (iii)前記クライアントコンピューティングデバイスから受信した前記プログラムコードを実行するコード実行モジュールと、
    (i)前記プログラムコードの実行をモニタリングして、実行すべき前記プログラムコードの命令がシステムコールを必要するか否かを判断し、
    (ii)前記命令がシステムコールの実行を必要とするという判断に応じて、前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするか否かを、前記命令またはシステムコールを前記実行ポリシーデータベースと比較することにより判断し、
    (iii)前記命令が前記クライアントコンピューティングデバイスによる実行が必要であるという判断に応じて、実行のために前記クライアントコンピューティングデバイスに前記命令を送信し、
    (iv)前記クライアントコンピューティングデバイスによる前記システムコールの実行を必要とする前記命令の実行に応じて、前記クライアントコンピューティングデバイスから応答を受信するシステムコール管理モジュールと
    を備え、
    前記クライアントコンピューティングデバイスから前記応答を受信することは、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記クライアントコンピューティングデバイスから受信することを含み、
    前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
    ーバ。
  2. 前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを判断し、
    前記コード実行モジュールはさらに、前記命令は前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
    請求項1に記載のサーバ。
  3. 前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が、前記サーバによる実行を必要とするか否かを判断し、
    前記コード実行モジュールはさらに、前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
    請求項1に記載のサーバ。
  4. 前記プログラムコードをロードすることは、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化することを含む
    請求項1から3のいずれか一項に記載のサーバ。
  5. 前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールに対応付けられたアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
    請求項1から3のいずれか一項に記載のサーバ。
  6. 前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールを必要とする前記命令の前記実行に基づきトランスレーションテーブルを更新することを含む
    請求項1から3のいずれか一項に記載のサーバ。
  7. 前記コード実行モジュールはさらに、実行すべき前記命令はシステムコールを必要としないという判断に応じて、前記命令を実行する
    請求項1から3のいずれか一項に記載のサーバ。
  8. プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードする方法であって、
    前記クライアントコンピューティングデバイスから、前記プログラムコードと共に、前記クライアントコンピューティングデバイスによる実行が必要であるシステムコールを定義する実行ポリシーを、前記サーバによって受信する段階と、
    前記クライアントコンピューティングデバイスから受信した前記実行ポリシーを実行ポリシーデータベースに、前記サーバによって格納する段階と、
    実行のために前記クライアントコンピューティングデバイスから受信した前記プログラムコードを、前記サーバによってロードする段階と、
    実行すべき前記プログラムコードの命令がシステムコールを必要とするか否かを、前記サーバによって判断する段階と、
    前記命令がシステムコールの実行を必要とするという判断に応じて、前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするか否かを、前記命令またはシステムコールを前記実行ポリシーデータベースと比較することにより、前記サーバによって判断する段階と、
    前記命令が前記クライアントコンピューティングデバイスによる実行が必要であるという判断に応じて、前記命令を実行のために前記クライアントコンピューティングデバイスに、前記サーバから送信する段階と、
    前記クライアントコンピューティングデバイスによる前記システムコールの実行を必要とする前記命令の実行に応じて、前記クライアントコンピューティングデバイスから応答を前記サーバによって受信する段階と
    を備え、
    前記クライアントコンピューティングデバイスから前記応答を前記サーバによって受信する段階は、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記クライアントコンピューティングデバイスから受信する段階を有し、
    前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
    法。
  9. 前記命令が前記クライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
    前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
    をさらに備える請求項8に記載の方法。
  10. 前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
    前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
    をさらに備える請求項8に記載の方法。
  11. 前記プログラムコードをロードする段階は、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する段階を有する
    請求項8から10のいずれか一項に記載の方法。
  12. 前記システムコールの実行を必要とする前記命令の実行は、前記システムコールに対応付けられているアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
    請求項8から10のいずれか一項に記載の方法。
  13. 前記システムコールの実行を必要とする前記命令の実行は、前記システムコールを必要とする前記命令の前記実行に基づいてトランスレーションテーブルを更新することを含む
    請求項8から10のいずれか一項に記載の方法。
  14. 実行されることに応じて、コンピューティングデバイスが請求項8から13のいずれか一項に記載の方法を実行するプログラム。
  15. プログラムコードの実行をサーバにオフロードするクライアントコンピューティングデバイスであって、
    (i)オフロード実行のために前記サーバに前記プログラムコードと共に前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを定義している実行ポリシーを送信し、
    (ii)前記サーバによる前記プログラムコードの実行中、前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを含むと前記サーバが判断した前記プログラムコードの命令を受信するコード管理モジュールと、
    前記システムコールを含むと判断された前記命令を実行するシステムコール実行モジュールと、
    前記サーバに、前記クライアントコンピューティングデバイスによる前記システムコールの前記実行に基づき、応答を送信する通信モジュールと
    を備え、
    前記応答を前記サーバに送信することは、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記サーバに送信することを含み、
    前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
    ライアントコンピューティングデバイス。
  16. 前記システムコール実行モジュールはさらに、
    (i)受信した、システムコールを必要とすると判断された前記命令がアドレス/メモリ変換を必要とするか否かを判断し、(ii)前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記システムコールのアドレスを、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換する
    請求項15に記載のクライアントコンピューティングデバイス。
  17. 前記システムコール実行モジュールは、
    (i)前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリ割り当てを行い、
    (ii)前記メモリ割り当てに基づきトランスレーションテーブルを更新する
    請求項16に記載のクライアントコンピューティングデバイス。
  18. プログラムコードの実行をクライアントコンピューティングデバイスからサーバにオフロードする方法であって、
    前記クライアントコンピューティングデバイスから、オフロード実行のために前記サーバに前記プログラムコードと共に前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを定義している実行ポリシーを送信する段階と、
    前記サーバによる前記プログラムコードの実行中に、前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを含むと前記サーバが判断した前記プログラムコードの命令を、前記クライアントコンピューティングデバイスによって受信する段階と、
    前記システムコールを含むと判断された前記命令を前記クライアントコンピューティングデバイスによって実行する段階と、
    前記クライアントコンピューティングデバイスから前記サーバへと、前記クライアントコンピューティングデバイスによる前記システムコールの前記実行に基づいて応答を送信する段階と
    を備え、
    前記サーバに前記応答を送信する段階は、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記サーバに送信する段階を有し、
    前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
    法。
  19. 受信した、システムコールを必要とすると判断された前記命令がアドレス/メモリ変換を必要とするか否かを前記クライアントコンピューティングデバイスによって判断する段階と、
    前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間において、前記システムコールのアドレスを前記クライアントコンピューティングデバイスによって変換する段階と
    をさらに備える請求項18に記載の方法。
  20. 前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記クライアントコンピューティングデバイスのローカルコンテキストにおいて前記クライアントコンピューティングデバイスによってメモリ割り当てを行う段階と、
    前記メモリ割り当てに基づいてトランスレーションテーブルを、前記クライアントコンピューティングデバイスによって更新する段階と
    をさらに備える請求項19に記載の方法。
  21. 実行されることに応じて、コンピューティングデバイスが請求項18から20のいずれか一項に記載の方法を実行するプログラム。
  22. 請求項14または21に記載のプログラムを格納するコンピュータ可読記憶媒体。
JP2016529456A 2013-12-20 2013-12-20 実行オフロード Expired - Fee Related JP6404347B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/077199 WO2015094366A1 (en) 2013-12-20 2013-12-20 Execution offloading

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2018171011A Division JP2019023882A (ja) 2018-09-12 2018-09-12 実行オフロード

Publications (2)

Publication Number Publication Date
JP2017504088A JP2017504088A (ja) 2017-02-02
JP6404347B2 true JP6404347B2 (ja) 2018-10-10

Family

ID=53403446

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016529456A Expired - Fee Related JP6404347B2 (ja) 2013-12-20 2013-12-20 実行オフロード

Country Status (5)

Country Link
US (1) US20160292009A1 (ja)
EP (1) EP3084622A4 (ja)
JP (1) JP6404347B2 (ja)
CN (1) CN105793839B (ja)
WO (1) WO2015094366A1 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10305976B2 (en) * 2015-09-21 2019-05-28 Intel Corporation Method and apparatus for dynamically offloading execution of machine code in an application to a virtual machine
US10355916B2 (en) 2016-09-27 2019-07-16 Mcafee, Llc Survivable networks that use opportunistic devices to offload services
US20180150256A1 (en) * 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10394604B2 (en) * 2017-03-15 2019-08-27 Samsung Electronics Co., Ltd. Method for using local BMC to allocate shared GPU resources inside NVMe over fabrics system
US20190044809A1 (en) * 2017-08-30 2019-02-07 Intel Corporation Technologies for managing a flexible host interface of a network interface controller
US11030013B2 (en) * 2018-10-15 2021-06-08 Verizon Patent and Licensing lnc. Systems and methods for splitting processing between device resources and cloud resources

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0221354A (ja) * 1988-07-11 1990-01-24 Nec Corp コンピュータネットワークシステムにおける遠隔機能実行方式
US5430876A (en) * 1989-06-27 1995-07-04 Digital Equipment Corporation Remote procedure callback system and method
US6516342B1 (en) * 1998-07-17 2003-02-04 International Business Machines Corporation Method and apparatus for extending memory using a memory server
US20020029285A1 (en) * 2000-05-26 2002-03-07 Henry Collins Adapting graphical data, processing activity to changing network conditions
US6721943B2 (en) * 2001-03-30 2004-04-13 Intel Corporation Compile-time memory coalescing for dynamic arrays
US6714778B2 (en) * 2001-05-15 2004-03-30 Nokia Corporation Context sensitive web services
US6990662B2 (en) * 2001-10-31 2006-01-24 Hewlett-Packard Development Company, L.P. Method and system for offloading execution and resources for resource-constrained networked devices
US7000154B1 (en) * 2001-11-28 2006-02-14 Intel Corporation System and method for fault detection and recovery
US7577816B2 (en) * 2003-08-18 2009-08-18 Cray Inc. Remote translation mechanism for a multinode system
US8065690B2 (en) * 2005-12-01 2011-11-22 Cisco Technology, Inc. Method and system for event-based remote procedure call implementation in a distributed computing system
JP2007220086A (ja) * 2006-01-17 2007-08-30 Ntt Docomo Inc 入出力制御装置、入出力制御システム及び入出力制御方法
US7966039B2 (en) * 2007-02-02 2011-06-21 Microsoft Corporation Bidirectional dynamic offloading of tasks between a host and a mobile device
US8108466B2 (en) * 2008-05-01 2012-01-31 Microsoft Corporation Automated offloading of user-defined functions to a high performance computing system
US8572251B2 (en) * 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
US8458466B2 (en) * 2008-12-22 2013-06-04 International Business Machines Corporation System and method for handling cross-platform system call in a hybrid system
JP2011076513A (ja) * 2009-10-01 2011-04-14 Olympus Corp 分散処理システム
US20110161495A1 (en) * 2009-12-26 2011-06-30 Ralf Ratering Accelerating opencl applications by utilizing a virtual opencl device as interface to compute clouds
EP2354980A1 (en) * 2010-02-04 2011-08-10 ST-Ericsson SA Management of communications between a client equipment and a server equipment providing to the client equipment computer resources represented according to a file system
US8793309B2 (en) * 2010-09-07 2014-07-29 Sap Ag (Th) Systems and methods for the efficient exchange of hierarchical data
US8937622B2 (en) * 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
CN102891871A (zh) * 2011-07-20 2013-01-23 中兴通讯股份有限公司 一种虚拟终端系统及实现方法
KR101331897B1 (ko) * 2011-12-15 2013-11-21 숭실대학교산학협력단 모바일 디바이스 어플리케이션의 동적 오프로딩 장치 및 방법
CN103279445A (zh) * 2012-09-26 2013-09-04 上海中科高等研究院 运算任务的计算方法及超算系统
US9110917B2 (en) * 2013-01-11 2015-08-18 Red Hat, Inc. Creating a file descriptor independent of an open operation
WO2014158177A1 (en) * 2013-03-28 2014-10-02 Hewlett-Packard Development Company, L.P. Shared memory system

Also Published As

Publication number Publication date
CN105793839B (zh) 2019-08-06
WO2015094366A1 (en) 2015-06-25
EP3084622A4 (en) 2018-02-28
EP3084622A1 (en) 2016-10-26
US20160292009A1 (en) 2016-10-06
JP2017504088A (ja) 2017-02-02
CN105793839A (zh) 2016-07-20

Similar Documents

Publication Publication Date Title
JP6404347B2 (ja) 実行オフロード
US11706158B2 (en) Technologies for accelerating edge device workloads
US11868617B2 (en) Virtualizing non-volatile storage at a peripheral device
US10257115B2 (en) Cloud-based service resource provisioning based on network characteristics
US20170003997A1 (en) Compute Cluster Load Balancing Based on Memory Page Contents
US20200195743A1 (en) Systems and methods for accelerating object stores with distributed caching
US9507624B2 (en) Notification conversion program and notification conversion method
US11201836B2 (en) Method and device for managing stateful application on server
US10802753B2 (en) Distributed compute array in a storage system
WO2022111313A1 (zh) 一种请求处理方法及微服务系统
US10089131B2 (en) Compute cluster load balancing based on disk I/O cache contents
US11099915B2 (en) Optimizing startup time for event-driven functions
CN113032099A (zh) 云计算节点、文件管理方法及装置
CN111183411A (zh) 用于虚拟机的动态地址转换
US10298656B2 (en) Extending representational state transfer application program interface (REST API) functionality
CN115686875A (zh) 用于在多个进程之间传输数据的方法、设备和程序产品
US11042394B2 (en) Method for processing input and output on multi kernel system and apparatus for the same
US10102135B2 (en) Dynamically-adjusted host memory buffer
US10616317B2 (en) Method and system for affinity load balancing
JP2019023882A (ja) 実行オフロード
KR102426416B1 (ko) 멀티 커널 시스템의 입출력 처리 방법 및 장치
US11238013B2 (en) Scalable access to shared files in a distributed system
KR20200051196A (ko) 추가의 네트워크 주소 변환 테이블을 참조하여 빠른 패킷 포워딩을 제공하는 전자 장치
US20240241748A1 (en) Asynchronous client to client task management
US11106500B2 (en) Managing memories of computing resources based on data access speeds

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170607

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170613

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170906

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180130

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180501

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20180814

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180912

R150 Certificate of patent or registration of utility model

Ref document number: 6404347

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees