JP2022550448A - さまざまなアプリケーションプロセスのための初期データ配信 - Google Patents
さまざまなアプリケーションプロセスのための初期データ配信 Download PDFInfo
- Publication number
- JP2022550448A JP2022550448A JP2022520361A JP2022520361A JP2022550448A JP 2022550448 A JP2022550448 A JP 2022550448A JP 2022520361 A JP2022520361 A JP 2022520361A JP 2022520361 A JP2022520361 A JP 2022520361A JP 2022550448 A JP2022550448 A JP 2022550448A
- Authority
- JP
- Japan
- Prior art keywords
- application
- memory
- objects
- components
- processes
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 506
- 230000008569 process Effects 0.000 title claims abstract description 369
- 230000015654 memory Effects 0.000 claims abstract description 295
- 238000012544 monitoring process Methods 0.000 claims description 28
- 238000012549 training Methods 0.000 claims description 16
- 230000007423 decrease Effects 0.000 claims description 14
- 238000013528 artificial neural network Methods 0.000 claims description 12
- 238000010801 machine learning Methods 0.000 claims description 6
- 230000000977 initiatory effect Effects 0.000 claims 1
- 238000013500 data storage Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000013508 migration Methods 0.000 description 4
- 230000005012 migration Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000002085 persistent effect Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 230000002123 temporal effect Effects 0.000 description 4
- 230000001960 triggered effect Effects 0.000 description 4
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0638—Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/205—Hybrid memory, e.g. using both volatile and non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
Abstract
モバイルデバイスにおいて、アプリケーションのプロセスは、監視され、初期データ配信のためにスコアリングされることができる。具体的には、方法は、アプリケーションのプロセスを監視すること、及びこれらのプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内でのオブジェクトまたはコンポーネントの配置を決定することを含むことができる。また、方法は、アプリケーションの始動中に、メモリの第一部分内に、第一レベルにスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードすることを含むことができる。また、方法は、アプリケーションの始動中に、メモリの第二部分内に、第二レベルにスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードすることを含むことができる。第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションにとってクリティカルではないことができる。
Description
関連出願
本出願は、2019年10月3日に出願され、「INITIAL DATA DISTRIBUTION FOR DIFFERENT APPLICATION PROCESSES」と題された米国特許出願第16/592,547号に優先権を主張し、その開示全体は、参照により本明細書に援用される。
本出願は、2019年10月3日に出願され、「INITIAL DATA DISTRIBUTION FOR DIFFERENT APPLICATION PROCESSES」と題された米国特許出願第16/592,547号に優先権を主張し、その開示全体は、参照により本明細書に援用される。
本明細書に開示される少なくともいくつかの実施形態は、コンピューティングシステムについてのルートプロセス、及びコンピューティングデバイスでのさまざまなアプリケーションプロセスについての初期データ配信に関する。
ANDROIDオペレーティングシステムの内部機構には、すべてのANDROIDアプリケーションプロセスの親プロセスまたはルートプロセスとして機能するzygoteが含まれる。UNIX及びUNIXと同様のオペレーティングシステム(LINUX及びANDROIDなど)では、任意の非初期プロセス(または任意の非ゼロプロセス)は、オペレーティングシステム(OS)の初期プロセスまたはゼロプロセスから少なくとも部分的に派生することができる。したがって、ANDROID OSによる「zygote」という用語を使用するのは、そのルートプロセスまたはプロセス0を参照するためである。
ANDROIDは、GOOGLEが開発したモバイルデバイス向けのモバイルOSである。これは、LINUXカーネル及びその他のオープンソースソフトウェアの修正バージョンに基づいており、主にモバイルデバイス(スマートフォン、タブレットなど)向けに設計されている。GOOGLEは、モノのインターネット(IoT)用のANDROIDのバージョンも開発した。また、ANDROIDのバージョンは、テレビやその他の家庭用電化製品、車載情報システム、ウェアラブルスマートデバイス、ゲーム機、デジタルカメラ、及びPCを含むその他の種類の電子機器向けに開発されている。
ANDROID、UNIX、またはUNIXに類似した別のOSによる非ゼロプロセスの作成は、別のプロセスが「fork()」で表されるシステムコールを実行するときに行われると、1つのプロセスが複数のプロセスにフォークされる。フォークを呼び出したプロセスは親プロセスであり、新しく作成されたプロセスは子プロセスである。UNIXまたはUNIXと同様のオペレーティングシステムでは、カーネルは、そのプロセス識別子(例えば、初期プロセスまたはゼロプロセスの場合には「0」)によって各プロセスを識別することができる。UNIX及び同様のオペレーティングシステムでは、ゼロプロセス(すなわち、プロセス0)は、OSのブート時に生成されるルートプロセスである。「init」として知られる最初の子プロセス(例えば、プロセス1)は、ゼロプロセスから少なくとも部分的に派生することができ、OS内の他のすべてのプロセスの先祖になることができる。
本開示は、以下に示す詳細な説明及び本開示のさまざまな実施形態の添付図面から、より十分に理解される。
本明細書に開示される少なくともいくつかの実施形態は、コンピューティングシステムについてのルートプロセス、及びコンピューティングデバイスでのさまざまなアプリケーションプロセスについての初期データ配信に関する。
本明細書に開示されるいくつかの実施形態は、モバイルデバイスなどのコンピューティングデバイスに関し、このコンピューティングデバイスは、さまざまなタイプのメモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM)、不揮発性ランダムアクセスメモリ(NVRAM)、3D XPointメモリ、及びフラッシュメモリ)を含む。コンピューティングデバイスのオペレーティングシステムは、アプリケーションのさまざまなデータオブジェクト及びコンポーネントをスコアリングし、オブジェクト及びコンポーネントがメモリ内のどこに初期配置されるかを決定することができる。オブジェクト及びコンポーネントは、コンピューティングデバイスのさまざまなタイプのメモリに配置されることができ、オブジェクト及びコンポーネントの配置は、アプリケーションが初期起動されるときに行われることができる。
初期アプリケーションプロセス(例えば、アプリケーションのルートプロセス)は、実行用の任意のロード可能なモジュール及びライブラリに加えて実行可能ファイルを含むことができる。これらの実行可能ファイルならびにロード可能なモジュール及びライブラリは、アプリケーションプロセスの前で、かつアプリケーションのルートプロセス中に、アプリケーションプロセスのためにメモリにロードされることができる。
一部のコンポーネント(スタティックメンバなど)は、クリティカルパス上にあることで、DRAMまたはSRAMなどのパフォーマンスのより高いメモリタイプにロードされるように事前決定されることができる。一部のコンポーネントは、プロセス間通信(IPC)用のメモリマップド共有ファイルにロードされるように事前決定され得るので、DRAMまたはSRAMなどのパフォーマンスのより高いメモリタイプにロードすることができる。また、メモリタイプはパフォーマンスが高いほど、よりクリティカルなプロセスに明示的に割り振られることができる、または共有メモリ領域はパフォーマンスが高いほど、よりクリティカルなプロセスに明示的に割り振られることができる(例えば、アノニマス共有メモリ(Ashmem)か、グラフィックスメモリアロケータ(Gralloc)かいずれかを介して)。かなりのサイズのユーザにトリガされたクリティカルなメモリページの中には、デバイスのパフォーマンスのより高いメモリタイプに移行するものがある。クリティカルな構造(例えば、アプリケーションランタイム環境及びシステムコールに関連する)を、デバイスのパフォーマンスのより高いメモリタイプに割り振ることもできる。
コンピューティングデバイスは、OSなどを介して、実行中にアプリケーションごとにコンポーネント及びオブジェクトをスコアリングし、スコアテーブル(アプリケーション自体の一部分であることができる)にスコアを格納することができる。ユーザがアプリケーションを複数回呼び出した後、スコアリングプロセス(例えば、カウント、トレーニング、及び/または機械学習プロセスを介して実装される)を使用して、アプリケーションのパフォーマンスを向上させることができる。任意選択では、コンピューティングデバイスは、初期スコアテーブルを含むことにより、どのオブジェクトがクリティカルであるか、そしてどれがクリティカルでないかを識別することができる。
アプリケーションプロセス内のオブジェクトは、プロセス間ではデフォルトで共有される(例えば、ルートプロセスのフォーク後)。オブジェクトについての書き込み(例えば、コピーオンライト(COW)についてのトリガ)がある場合、どのバスの占有率が低いか、または近いうちに占有率が低くなると期待されるかに応じて(例えば、DRAMバスまたはNVRAMバスの帯域幅に応じて)、オブジェクトまたはその一部を、保持されている位置から別のメモリタイプへ、または同じメモリタイプへ移動させること、及び/またはコピーすることができる(例えば、NVRAMからDRAMへ、またはDRAMからNVRAMへ、またはDRAMからSRAMへ移動させること、及び/またはコピーすることができる)。コンポーネントまたはオブジェクトの移動は、コンポーネントもしくはオブジェクト(またはその一部)が使用されると期待される頻度、またはエビクトされるまでにメモリに残存する時間にも依存する可能性がある。
期待値最大化アルゴリズムを使用して、意味のあるメトリック(例えば、1秒あたりのフレーム数、タッチ-レンダリング応答時間など)によって測定される所期のユーザエクスペリエンスを最大化すると同時に、複数のメモリタイプのバス容量リソースを最大化するが、制限しすぎないようにすることができる。共有オブジェクトは、デバイス内のパフォーマンスの最も高いタイプのメモリ(DRAMなど)に初期配置され、徐々に、そのメモリタイプに部分的にコピーされ、パフォーマンスのより低いタイプのメモリ(NVRAMまたはフラッシュメモリなど)に部分的にコピーされることができる。COWによってトリガされる場合、部分ごとに徐々にコピーされることができる。そして、しばらくすると、パフォーマンスの最も高いタイプのメモリ内の共有オブジェクトの部分(DRAM内の部分など)は、頻繁に使用されない場合、パフォーマンスのより低いタイプのメモリ(NVRAMまたはフラッシュメモリなど)にエビクトされることができる。あるいは、パフォーマンスの最も高いタイプのメモリ内の部分をパフォーマンスのより低いタイプのメモリ全体に直接コピーすることができる、またはこれらの部分を書き込みごとに異なるタイプのメモリ間で行き来させることができる。オペレーティングシステムは、ユーザクリティカルなワーキングセットのオブジェクト(例えば、フォアグラウンドのアプリケーション及び/またはバックグラウンドで実行中のプロセスによって使用されるオブジェクト)を、コンピューティングデバイスのパフォーマンスの最も高いタイプのメモリに保持しようとすることができる。一部のオブジェクトのクリティカルな部分がパフォーマンスのより高いタイプのメモリにキャッシュされたままで、他のオブジェクトは、コンピューティングデバイス内のパフォーマンスのより低いタイプのメモリにマイグレーションすることができる。
本明細書に開示されるいくつかの実施形態は、アプリケーションの複数のプロセスを監視するように設定される1つ以上のコンピューティングデバイスのOSまたはハイパーバイザなどに関する。監視は、単一のコンピューティングデバイスまたはデバイスグループに対して行われることができる。OS、ハイパーバイザなどは、複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内のオブジェクトまたはコンポーネントの配置を決定するように構成されることができる。
アプリケーションの始動中に、OS、ハイパーバイザなどは、メモリの第一部分内に、第一レベルにスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードするように構成されることができる。また、アプリケーションの始動中に、OS、ハイパーバイザなどは、メモリの第二部分内に、第二レベルにスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードするように構成されることができ、第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションにとってクリティカルではない。メモリの第一部分はDRAMを含むことができる。メモリの第二部分はNVRAMを含むことができる。NVRAMは、3D XPointメモリを含むことができる。
アプリケーションの始動は、アプリケーションのルートプロセスを実行することを含むことができる。少なくとも部分的には、OS、ハイパーバイザなどは、アプリケーションのルートプロセスを実行するように構成されることができる。ルートプロセスは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる、及び/またはルートプロセスは、第二レベルにスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。
また、いくつかの実施形態では、アプリケーションの始動は、アプリケーショングループからのアプリケーションの始動を含むことができ、始動は、アプリケーショングループについてのルートプロセスを実行することを含むことができる。少なくとも部分的には、OS、ハイパーバイザなどは、アプリケーション(またはアプリケーショングループ)のルートプロセスを実行するように構成されることができる。ルートプロセスは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる、及び/またはルートプロセスは、第二レベルにスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、スコアリングされたオブジェクトまたはコンポーネントの対応するID及びスコアをスコアテーブルに格納するように構成されることができる。また、スコアリングは、機械学習に少なくとも部分的に基づくことができる。それらのような実施形態では、OS、ハイパーバイザなどは、複数のプロセスの監視、オブジェクトまたはコンポーネントのスコアリング、及びオブジェクトまたはコンポーネントのロードを繰り返すように構成されることができる。そして、監視、スコアリング、及びロードを繰り返すごとに、OS、ハイパーバイザなどは、オブジェクトまたはコンポーネントのスコアリングの少なくとも一部分をトレーニングするように構成されることができる。スコアリングは、人工ニューラルネットワーク(ANN)に少なくとも部分的に基づくことができ、それらのような例では、トレーニングは、ANNをトレーニングすることを含むことができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、メモリの第一部分からメモリの第二部分にオブジェクトまたはコンポーネントの少なくともいくつかを、第一部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第一閾値を超えて使用量が減少する、または減少すると予測される場合、移動させるように構成されることができる。そのような移動は、アプリケーションの始動後に行われることができる。また、OS、ハイパーバイザなどは、メモリの第二部分からメモリの第一部分にオブジェクトまたはコンポーネントの少なくともいくつかを、第二部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第二閾値を超えて使用量が増加する、または増加すると予測される場合、移動させるように構成されることができる。そのような移動は、アプリケーションの始動後にも行われることができる。また、アプリケーションの始動後、OS、ハイパーバイザなどは、メモリの第二部分からオブジェクトまたはコンポーネントの少なくともいくつかを、第二部分内のオブジェクトまたはコンポーネントの少なくともいくつかについての第三閾値を超えて使用量が減少する場合、除去するように構成されることができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、アプリケーションを始動するように構成されることができ、アプリケーションの始動は、OS、ハイパーバイザなどがアプリケーションの前の実行のパターンに従って初期点までアプリケーションについてのルートプロセスを実行することを含む。また、OS、ハイパーバイザなどは、アプリケーションがアプリケーショングループの一部分であるときにアプリケーションを始動するように構成されることができ、アプリケーションの始動は、OS、ハイパーバイザなどがアプリケーション(またはアプリケーショングループ)の前の実行のパターンに従って初期点までアプリケーションのルートプロセスを実行する(またはアプリケーショングループのルートプロセスを実行する)ことを含む。また、OS、ハイパーバイザなどは、アプリケーションを開始する要求を受信すると、アプリケーションのルートプロセスを使用することによって(またはアプリケーショングループのルートプロセスを使用することによって)、コンピューティングデバイス(複数可)のユーザからアプリケーションを開始するだけでなく、コンピューティングデバイス(複数可)内のアプリケーションを開始する要求を受信するように構成されることができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、複数のプロセスに、アプリケーションのルートプロセスをフォークする(またはアプリケーショングループのルートプロセスをフォークする)ように構成されることができる。それらのような実施形態では、OS、ハイパーバイザなどは、アプリケーションを開始する要求を受信すると、アプリケーションを開始する要求に従って複数のプロセスのうちの少なくとも1つを使用することによって、コンピューティングデバイス(複数可)内のアプリケーションを開始するように構成されることができる。複数のプロセスのうちの少なくともいくつかは、互いに、及び/またはルートプロセスとは異なることができる。また、複数のプロセスのうちの少なくともいくつかは、初期には、互いに、及び/またはルートプロセスと同一であることができる。
アプリケーション(またはアプリケーショングループ)のルートプロセスは、OS、ハイパーバイザなどのスタートアップ時に起動することができる。いくつかの実施形態では、ある特定の期間内にアプリケーションが使用されない場合、またはアプリケーションがCPU、GPU、メモリまたは他のリソースなどのシステムリソースを過度に消費する場合、アプリケーションのルートプロセス(またはアプリケーショングループのルートプロセス)を強制終了することができる。それらのような実施形態では、アプリケーションの使用を見越して、OS、ハイパーバイザなどは、アプリケーションの監視中に識別されたパターンに従ってルートプロセスを再起動するように構成されることができる。パターンのプリファレンスは、パターンの数量、頻度、及び/または最新性に基づくことができ、アプリケーションについての任意のタイプのメモリアクセスパターンが監視され、追跡されることができる。監視及び追跡は、ハードウェア及びソフトウェアのパフォーマンスカウンタを含むことができ、これらのパフォーマンスカウンタは、OSを介した専用レジスタ(モデル固有レジスタなど)の読み出し及び書き込みによって利用可能である。パターンは、メモリからの読み出し、メモリへの書き込み、物理メモリ空間内のアドレスパターン、仮想空間内のアドレスパターン、データの局所性(空間的及び/または時間的)、バンクの競合、または命令ごとのCPUサイクルの数量、頻度及び/または最新性などのメトリックに基づくことができる。また、パターンは、トランスレーションルックアサイドバッファ(TLB)メトリック、及びOSに利用可能な他のメトリックの数量、頻度、及び/または最新性などのメトリックに基づくことができる。
いくつかの実施形態では、アプリケーションがコンピューティングデバイス(モバイルデバイスなど)にインストールされた後、デバイスのOSまたは関連するハイパーバイザは、アプリケーションを事前起動して、ユーザ用にカスタマイズされるルートアプリケーションプロセスを生成することができる。事前起動は、ユーザがコンピューティングデバイスにアプリケーションを開始することを要求する前に行われることができる。アプリケーションは、OSまたはハイパーバイザなどを介して少なくとも部分的に実行されることができる。したがって、アプリケーションの事前起動プロセスまたはルートプロセスは、OSのルートプロセスとは異なる。それらのような実施形態では、OSまたはハイパーバイザなどは、データを移動させ、及び/またはコピーし、アプリケーションのルートプロセスをセットアップすることができる。いくつかの実施形態では、データのコピー及び/または移動は、初期には、OSのルートプロセスによって行われることができる。これは、アプリケーションのルートプロセスなどによる、アプリケーションのいずれかの初期の読み出しまたは書き込みの前に行われることができる。いくつかの実施形態では、共通コード及び読み出し専用データ(例えば、ライブラリ、ランタイム、ドライバ、メモリページ)は、OSのルートプロセス、またはアプリケーションのそれぞれのルートプロセスによってコピーされない、及び/または移動しない。いくつかの実施形態では、ルートプロセス、別のプロセス、またはOSによるコード及びデータの初期変更まで、ルートプロセスのコード及びデータはコピーされない。いくつかの実施形態では、コード及びデータの変更された部分のみがコピーされ、変更されない部分は共通のままである。いくつかの実施形態では、これらの部分は、メモリページ、キャッシュラインもしくはファイルシステムセクタ、またはコンピュータ可読記憶媒体の他の素子への書き込みを監視することによって識別されることができる。
初期の読み出し及び書き込みは、メモリに格納され、またはキャッシュされ、それぞれのルートプロセスを介して、特に、アプリケーションに、またはアプリケーションを含むアプリケーショングループに使用されることができる。いくつかの実施形態では、格納またはキャッシュは、初期の読み出し及び書き込みを高速化するために、より高速なメモリで行われることができる。初期の読み出し及び書き込みは、使用の頻度、使用の最新性などに応じて、メモリを介して、OS、ハイパーバイザなどによって管理されること、維持されること、優先順位付けされることなどができる。
コンピューティングデバイス(モバイルデバイスなど)は、ユーザによるアプリケーションの高頻度または最新の使用量を監視して、アプリケーションのルートプロセス(またはアプリケーショングループのルートプロセス)に追加する初期の読み出し及び書き込みを決定することができる。これにより、OS、ハイパーバイザなどは、アプリケーションのためにメモリから読み出すこと、及び/またはメモリに書き込みことができる。また、初期書き込みの結果としてのデータの移動及び/またはコピーは、ユーザがOS、ハイパーバイザなどにアプリケーションを開始することを要求する前に実行されることができる。
OS、ハイパーバイザなどがシステムレベルのルートプロセスをフォークした後、アプリケーションの予測された初期読み出し及び/または書き込みを使用して、アプリケーションのルートプロセスまたはグループのルートプロセスをカスタマイズすることができる。それらのような例では、アプリケーションまたはグループのカスタマイズされたルートプロセスを永続的な不揮発性メモリ(フラッシュメモリ及び/またはNVRAMなど)に保存して、アプリケーションを高速で開始することができる。
ユーザがOS、ハイパーバイザなどにアプリケーションを開始することを要求すると、OS、ハイパーバイザなどは、アプリケーションもしくはアプリケーショングループの事前起動されたプロセス(すなわち、アプリケーションもしくはアプリケーショングループのルートプロセス)、またはユーザにサービスを提供するために事前起動されたプロセスからフォークされたプロセスを使用することができる。アプリケーションのルートプロセスまたはアプリケーショングループのルートプロセスからフォークされたプロセスは、その親ルートプロセスと類似している、またはそれとは異なることができる。
また、ユーザがアプリケーションを強制終了すると、OSは、アプリケーションのアクティブなプロセス、及び/またはアプリケーションまたはアプリケーショングループのルートプロセスを完全に、または部分的に強制終了することができる。ユーザがアプリケーションを実行することを見越して、OS、ハイパーバイザなどは、アプリケーションまたはアプリケーショングループのルートプロセスを再起動することができ、このルートプロセスは、アプリケーションの最新の、及び/または高頻度のユーザ使用量パターンに基づいてさらにカスタマイズされることができる。
図1、4、及び6は、本開示のいくつかの実施形態による、さまざまなアプリケーションプロセスのための初期データ配信を実施することができる例示的なモバイルデバイス102を示す。また、図4及び6に示されるように、モバイルデバイス102は、本開示のいくつかの実施形態による、複数のアプリケーションにそれぞれのルートプロセスを含み、実行することができる。本開示の目的のために、図1、4、及び6がアプリケーションごとのルートプロセスを参照するが、そのようなアプリケーションがアプリケーショングループの一部分であることができ、ルートプロセスがアプリケーショングループのルートプロセスであることができることを理解されたい。
図2、3、5、7、及び8は、本開示のいくつかの実施形態による、図1、4、及び6に示されるモバイルデバイス102によって実行されることができる例示的な方法200、300、500、700及び800の流れ図を示す。
具体的には、図1は、少なくともメモリ104を含むモバイルデバイス102を示す。また、図1は、別個のメモリ部分(例えば、第一メモリ部分106a、第二メモリ部分106b、及び第Nメモリ部分106cを参照)を含むメモリ104を示す。別個のメモリ部分のそれぞれは、対応するレベルのオブジェクト及び/またはコンポーネント(例えば、第一レベルのオブジェクトまたはコンポーネント108a、第二レベルのオブジェクトまたはコンポーネント108b、及び第Nレベルのオブジェクトまたはコンポーネント108cを参照)を含むことができる。対応するレベルは、アプリケーションの実行に対する重要度またはクリティカル度に関連付けられることができる。換言すれば、別個のメモリ部分のそれぞれは、アプリケーションの実行に対するオブジェクト及び/またはコンポーネントの重要度またはクリティカル度に関連する対応するレベルのオブジェクト及び/またはコンポーネントを含むことができる。また、図解によって、モバイルデバイス102のメモリ104内の、対応する数のレベルのオブジェクト及び/またはコンポーネントに対して、2つより多い(または3つより多い)メモリ部分が存在することができることを理解されたい。
モバイルデバイス102内のOS、またはモバイルデバイス内の、もしくはモバイルデバイスに通信可能に結合されたハイパーバイザなどは、モバイルデバイスに含まれ、モバイルデバイスで実行可能なアプリケーションの複数のプロセスを監視するように構成されることができる。OS、ハイパーバイザなどは、複数のプロセスによって使用されるオブジェクトまたはコンポーネント(例えば、第一レベルのオブジェクトまたはコンポーネント108a、第二レベルのオブジェクトまたはコンポーネント108b、及び第Nレベルのオブジェクトまたはコンポーネント108cを参照)をスコアリングし、アプリケーションの始動中にメモリ(例えば、メモリ104を参照)内のオブジェクトまたはコンポーネントの配置を決定するように構成されることができる。アプリケーションの始動中、OS、ハイパーバイザなどは、メモリの第一部分(例えば、第一メモリ部分106aを参照)に、第一レベルにスコアリングされたオブジェクトまたはコンポーネント(例えば、第一レベルのオブジェクトまたはコンポーネント108aを参照)を少なくとも部分的にロードするように構成されることができる。また、アプリケーションの始動中、OS、ハイパーバイザなどは、メモリの第二部分(例えば、第二メモリ部分106bを参照)に、第二レベルにスコアリングされたオブジェクトまたはコンポーネント(例えば、第二レベルのオブジェクトまたはコンポーネント108bを参照)を少なくとも部分的にロードするように構成されることができる。第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションにとってクリティカルではないことができる。
各メモリ部分は、1つ以上のタイプのメモリで構成されることができる。そして、各メモリ部分は、異なる機能またはトレードオフを提供することができる。例えば、第一メモリ部分106aまたは最上位側メモリ部分は、メモリの別個の部分の読み出し及び書き込み速度に関して最高のパフォーマンスを提供することができる。第二メモリ部分106b、または第二最上位側メモリ部分は、メモリの別個の部分の読み出し及び書き込み速度に関して2番目に高いパフォーマンスを提供することができる。最下位側メモリ部分(例えば、第Nメモリ部分106cを参照)は、メモリの別個の部分の読み出し及び書き込み速度に関して最も低いパフォーマンスを提供することができる。ただし、トレードオフとして最下位側メモリ部分は、最大のメモリ容量、データの信頼性、妥当性、または永続性を提供することができる。そのような機能を提供するために、第一メモリ部分106aまたは最上位側メモリ部分は、DRAMもしくはSRAM、またはNVRAM及びDRAMの組み合わせを含むことができる。また、そのような例では、第二メモリ部分106b、または第二最上位側メモリ部分は、NVRAM、またはDRAM、NVRAM及び/またはフラッシュメモリの組み合わせを含むことができる。そして、そのような例では、最下位側メモリ部分(例えば、第Nメモリ部分106cを参照)は、フラッシュメモリ、またはNVRAM及び/またはフラッシュメモリの組み合わせを含むことができる。本明細書に開示されるすべての例では、NVRAMは、3D XPointメモリを含むことができる。
アプリケーション(例えば、図4に示されるアプリケーション406a、406b、及び406cを参照)の始動は、アプリケーションのルートプロセス(例えば、図4に示されるルートプロセス408、412、及び416を参照)を実行することを含むことができる。少なくとも部分的には、OS、ハイパーバイザなどは、アプリケーションのルートプロセスを実行するように構成されることができる。ルートプロセスは、1つ以上のレベルにスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。例えば、ルートプロセスは、第一レベルにスコアリングされたオブジェクトまたはコンポーネント(例えば、第一レベルのオブジェクトまたはコンポーネント108aを参照)のロードを含むことができる、及び/またはルートプロセスは、第二レベルにスコアリングされたオブジェクトまたはコンポーネント(例えば、第二レベルのオブジェクトまたはコンポーネント108bを参照)のロードを含むことができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、スコアリングされたオブジェクトまたはコンポーネント(例えば、第一レベルのオブジェクトまたはコンポーネント108a、第二レベルのオブジェクトまたはコンポーネント108b、及び第Nレベルのオブジェクトまたはコンポーネント108cを参照)の対応するID及びスコアを、スコアテーブル(例えば、図1に示されるスコアテーブル110を参照)に格納するように構成されることができる。
いくつかの実施形態では、スコアテーブル110は、モバイルデバイス102のOSのアプリケーションバイナリファイルの一部分であることができる。それらのような実施形態では、スコアテーブルは、ユーザがモバイルデバイス102のOSを更新するごとに、ユーザに利用可能であることができる。また、スコアテーブル110は、クラウドを介してユーザの他のデバイスと同期することができる。
また、スコアリングは、機械学習に少なくとも部分的に基づくことができる。それらのような実施形態では、OS、ハイパーバイザなどは、複数のプロセスの監視、オブジェクトまたはコンポーネントのスコアリング、及びオブジェクトまたはコンポーネントのロードを繰り返すように構成されることができる。そして、監視、スコアリング、及びロードを繰り返すごとに、OS、ハイパーバイザなどは、オブジェクトまたはコンポーネントのスコアリングの少なくとも部分をトレーニングするように構成されることができる。スコアリングは、ANNに少なくとも部分的に基づくことができ、それらのような例では、トレーニングは、ANNをトレーニングすることを含むことができる。
いくつかの実施形態では、OS、ハイパーバイザなどは、メモリの第一部分からメモリの第二部分にオブジェクトまたはコンポーネントの少なくともいくつかを、第一部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第一閾値を超えて使用量が減少する、または減少すると予測される場合、移動させるように構成されることができる(例えば、第一メモリ部分106a内にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第一閾値を超えて使用量が減少する、または減少すると予測される場合、第一メモリ部分106a内のオブジェクトまたはコンポーネントは第二メモリ部分106bに移動することができる)。そのような移動は、アプリケーションの始動後に行われることができる。また、OS、ハイパーバイザなどは、メモリの第二部分からメモリの第一部分にオブジェクトまたはコンポーネントの少なくともいくつかを、第二部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第二閾値を超えて使用量が増加する、または増加すると予測される場合、移動させるように構成されることができる(例えば、第二メモリ部分106b内にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての第二閾値を超えて使用量が増加する、または増加すると予測される場合、第二メモリ部分106b内のオブジェクトまたはコンポーネントは第一メモリ部分106aに移動することができる)。そのような移動は、アプリケーションの始動後にも行われることができる。また、アプリケーションの始動後、OS、ハイパーバイザなどは、実施形態に応じてメモリの第二部分、下位側部分、または最下位側部分内のオブジェクトまたはコンポーネントの少なくともいくつかについての第三閾値を超えて使用量が減少する場合、メモリの第二部分、またはメモリの下位側もしくは最下位側部分(例えば、第Nメモリ部分106cを参照)からオブジェクトまたはコンポーネントの少なくともいくつかを除去するように構成されることができる。
具体的には、図2は、図1に示されるモバイルデバイス102によって、またはモバイルデバイス102と同様に構成された別のタイプのコンピューティングデバイスによって実行されることができる方法200の動作を示す。また、いくつかの実施形態では、方法200は、一般にコンピューティングデバイスのOS、またはモバイルデバイスのOSによって少なくとも部分的に実行されることができる。また、方法200は、ハイパーバイザ及び/または1つ以上のオペレーティングシステムによって少なくとも部分的に実行されることができる。
図2では、方法200は、アプリケーションの複数のプロセスを監視するステップ202で始まる。例えば、ステップ202は、コンピューティングデバイス(モバイルデバイスなど)では、アプリケーションの複数のプロセスを監視することを含むことができる。
ステップ204では、方法20は、複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内でのオブジェクトまたはコンポーネントの配置を決定することを続ける。例えば、ステップ204は、コンピューティングデバイスにおいて、複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内でのオブジェクトまたはコンポーネントの配置を決定することを含むことができる。
ステップ204でのスコアリングは、機械学習に少なくとも部分的に基づくことができる。それらのような実施形態では、OS、ハイパーバイザなどは、複数のプロセスの監視、オブジェクトまたはコンポーネントのスコアリング、及びオブジェクトまたはコンポーネントのロードを繰り返すように構成されることができる。そして、監視、スコアリング、及びロードを繰り返すごとに、OS、ハイパーバイザなどは、オブジェクトまたはコンポーネントのスコアリングの少なくとも一部分をトレーニングするように構成されることができる(例えば、方法200のステップ214を参照)。ステップ204でのスコアリングは、ANNに少なくとも部分的に基づくことができ、それらのような例では、トレーニングは、ステップ214においてANNをトレーニングすることを含むことができる。
ステップ206では、方法200は、スコアリングされたオブジェクトまたはコンポーネントの対応するID及びスコアをスコアテーブルに格納することを続ける。例えば、ステップ206は、スコアリングされたオブジェクトまたはコンポーネントの対応するID及びスコアを格納することを含むことができ、格納は、コンピューティングデバイスのメモリに実装されたスコアテーブル(例えば、モバイルデバイスのメモリに実装されたスコアテーブル)で行われることができる。
ステップ208では、方法は、アプリケーションを始動することを続ける。アプリケーションの始動は、アプリケーションのルートプロセスを実行することを含むことができる。ルートプロセスは、第一レベル(例えば、最高のクリティカル度レベル)及び/または第二レベル(例えば、最高より低いクリティカル度レベル)にスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。いくつかの実施形態では、ステップ202での監視及びステップ204でのスコアリングは、ステップ208でのアプリケーションの始動の一部分であることができる(図示せず)。
アプリケーションの始動中、方法は、ステップ210では、アプリケーションのルートプロセスを実行することを続ける。また、アプリケーションの始動中、方法は、ステップ212でのスコアリングされたオブジェクトまたはコンポーネントのスコアに従って、少なくとも部分的に、スコアリングされたオブジェクトまたはコンポーネントをメモリの一部にロードすることを続ける。ステップ204では第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、ステップ204では第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションにとってクリティカルではないことができる。
いくつかの実施形態では、例えば、ステップ210では、方法200は、ルートプロセスを介して、第一レベル(例えば、最高のクリティカル度レベル)にスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。また、ステップ210では、方法200は、ルートプロセスを介して、第二レベル(例えば、最高よりも低いクリティカル度レベル)にスコアリングされたオブジェクトまたはコンポーネントのロードを含むことができる。
いくつかの実施形態では、例えば、ステップ212において、方法200は、メモリの第一部分(例えば、メモリのパフォーマンスレベルが最も高い部分)に、第一レベル(例えば、最高のクリティカル度レベル)にスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードすることを含むことができる。また、ステップ212では、方法200は、メモリの第二部分(例えば、メモリのパフォーマンスレベルが最高よりも低い部分)に、第二レベル(例えば、最高よりも低いクリティカル度レベル)にスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的にロードすることを含むことができる。メモリの第一部分及びメモリの第二部分は、異なる機能またはトレードオフを有することができる1つ以上のタイプのメモリで構成されることができる。例えば、第一部分は、メモリの別個の部分の読み出し及び書き込み速度に対して最高のパフォーマンスを提供することができる。第二部分は、メモリの別個の部分の読み出し及び書き込み速度に対して2番目に高いパフォーマンスを提供することができる。ただし、トレードオフとして第二部分は、第一部分よりも大きなメモリ容量、データの信頼性、妥当性、または永続性を提供することができる。例えば、いくつかの実施形態では、メモリの第一部分はDRAMを含むことができ、メモリの第二部分はNVRAMを含むことができる。NVRAMは3D XPointメモリを含むことができる。
図2に示されるように、方法200は、ステップ208でのアプリケーションの始動後にそれ自体を繰り返すことができる。例えば、方法200は、アプリケーションの始動中、複数のプロセスの監視、オブジェクトまたはコンポーネントのスコアリング、及びオブジェクトまたはコンポーネントのロードを繰り返すことを含むことができる。ステップ214では、方法200は、ステップ202から212の繰り返しごとに、ステップ204でのオブジェクトまたはコンポーネントのスコアリングの少なくとも一部分をトレーニングすることを続ける。例えば、監視、スコアリング、及びロードを繰り返すごとに、ステップ214での方法は、オブジェクトまたはコンポーネントのスコアリングの少なくとも一部分をトレーニングすることを続けることができる。いくつかの実施形態では、ステップ204でのスコアリングは、ANNに少なくとも部分的に基づくことができ、トレーニングは、ステップ214においてANNをトレーニングすることを含むことができる。いくつかの実施形態では、少なくともいくつかのステップの繰り返しは、他のステップと並行して行われることができる。例えば、ステップ202はそれ自体を連続して繰り返すものとして実装されてもよく、その出力データをステップ204にストリーミングすることができ、ステップ204もまた、それ自体を連続して繰り返すものとしても実装される、などである。それらのような実施形態の結果として、方法200は、永続的な実行パイプラインとして実施されることができる。
具体的には、図3は、図1に示されるモバイルデバイス102によって、またはモバイルデバイス102と同様に構成された別のタイプのコンピューティングデバイスによって実行されることができる方法300の動作を示す。また、いくつかの実施形態では、方法300は、一般にコンピューティングデバイスのOS、またはモバイルデバイスのOSによって少なくとも部分的に実行されることができる。また、方法300は、ハイパーバイザ及び/または1つ以上のオペレーティングシステムによって少なくとも部分的に実行されることができる。
図3では、方法300は、アプリケーションの複数のプロセスを監視する、方法200のステップ202で始まる。次に、方法200のステップ204では、方法300は、複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内でのオブジェクトまたはコンポーネントの配置を決定することを続ける。次に、方法200のステップ206では、方法300は、スコアリングされたオブジェクトまたはコンポーネントの対応するID及びスコアをスコアテーブルに格納することを続ける。次に、方法200のステップ208では、方法300は、アプリケーションを始動することを続ける。アプリケーションの始動中、方法300は、ステップ210では、アプリケーションのルートプロセスを実行することをも続ける。また、アプリケーションの始動中、方法300は、ステップ212でのスコアリングされたオブジェクトまたはコンポーネントのスコアに従ってスコアリングされたオブジェクトまたはコンポーネントを少なくとも部分的に、メモリの一部にロードすることを続ける。
ステップ302では、方法300は、メモリの高位側部分からメモリの下位側部分にオブジェクトまたはコンポーネントの少なくともいくつかを、高位側部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての閾値を超えて使用量が減少する、または減少すると予測される場合、移動させることを続ける。ステップ304では、方法300は、メモリの下位側部分からメモリの上位側部分にオブジェクトまたはコンポーネントの少なくともいくつかを、下位側部分にロードされるオブジェクトまたはコンポーネントの少なくともいくつかについての閾値を超えて使用量が増加する、または増加すると予測される場合、移動させることを続ける。ステップ306では、方法300は、ステップ304に言及されたメモリの下位側部分からオブジェクトまたはコンポーネントの少なくともいくつかを、下位側部分内のオブジェクトまたはコンポーネントの少なくともいくつかについての第二閾値を超えて使用量が減少する場合、除去することを続ける。
ステップ308では、方法300は、ステップ202から212及びステップ302から306の繰り返しごとに、ステップ204でのオブジェクトまたはコンポーネントのスコアリングの少なくとも一部分をトレーニングすることを続ける。少なくともいくつかのステップの繰り返しが、他のステップと並行して行われることができることを理解されたい。例えば、ステップ302及び304は、連続して繰り返すなどして、実施されることができる。それらのような実施形態の結果として、方法300は、永続的な実行パイプラインとして実装されることができる。
本明細書に開示されるいくつかの実施形態は、異なるタイプのメモリ(例えば、DRAM、NVRAM、3D XPointメモリ、及びフラッシュメモリ)を含むモバイルデバイス(例えば、図1に示されるモバイルデバイス102、ならびにそのメモリ106a、106b、及び106cの異なる部分を参照)などのコンピューティングデバイスに関する。コンピューティングデバイスのオペレーティングシステム、またはデバイス内の別のシステムは、アプリケーションの異なるデータオブジェクト及びコンポーネント(例えば、図1に示されるオブジェクトまたはコンポーネント108a、108b、及び108cを参照)をスコアリングして、オブジェクト及びコンポーネントがメモリ内のどこに初期配置されるかを決定することができる(例えば、図2及び3に示されるステップ204を参照)。オブジェクト及びコンポーネントは、コンピューティングデバイスの異なるタイプのメモリに配置されることができ、オブジェクト及びコンポーネントの配置は、アプリケーションが初期起動されるときに行われることができる(例えば、図2及び3に示されるステップ208から212を参照)。
初期アプリケーションプロセス(例えば、アプリケーションのルートプロセス)は、実行用の任意のロード可能なモジュール及びライブラリに加えて実行可能ファイルを含むことができる。これらの実行可能ファイルならびにロード可能なモジュール及びライブラリは、アプリケーションプロセスの前で、かつアプリケーションのルートプロセス中に、アプリケーションプロセスのためにメモリにロードされることができる(例えば、図2及び3に示されるステップ208から212を参照)。
一部のコンポーネント(スタティックメンバなど)は、クリティカルパス上にあるため、DRAMなどのパフォーマンスのより高いメモリタイプにロードされるように事前決定されることができる(例えば、これらはそれぞれステップ204及び212に含まれることができる)。一部のコンポーネントは、プロセス間通信(IPC)用のメモリマップド共有ファイルにロードされ得るので、DRAMなどのパフォーマンスのより高いメモリタイプにロードすることができる(例えば、これらはそれぞれステップ204及び212に含まれることができる)。また、メモリタイプは、パフォーマンスが高いほど、よりクリティカルなプロセスに明示的に割り振られることができる、または共有メモリ領域は、パフォーマンスが高いほど、よりクリティカルなプロセスに明示的に割り振られることができる(例えば、アノニマス共有メモリ(Ashmem)か、グラフィックスメモリアロケータ(Gralloc)かいずれかを介して)(例えば、これはステップ204に含まれることができる)。かなりのサイズのユーザにトリガされたクリティカルなメモリページの中には、デバイスのパフォーマンスのより高いメモリタイプに移行するものがある。クリティカルな構造(例えば、アプリケーションランタイム環境及びシステムコールに関連する)を、デバイスのパフォーマンスのより高いメモリタイプに割り振ることもできる(例えば、これはステップ204に含まれることができる)。
コンピューティングデバイスは、例えばOSなどを介して、実行中にアプリケーションごとにコンポーネント及びオブジェクトをスコアリングし、スコアをスコアテーブル(アプリケーション自体の一部分であることができる)に格納することができる(例えば、ステップ204及び206を参照)。ユーザがアプリケーションを複数回呼び出した後、スコアリングプロセス(例えば、カウント、トレーニング、及び/または機械学習プロセスを介して実装される)を使用して、アプリケーションのパフォーマンスを向上させることができる(例えば、ステップ214及び308を参照)。任意選択では、コンピューティングデバイスは、初期スコアテーブルを含むことにより、どのオブジェクトがクリティカルであるか、そしてどれがクリティカルでないかを識別することができる。
アプリケーションプロセス内のオブジェクトは、プロセス間ではデフォルトで共有される(例えば、ルートプロセスのフォーク後)。ステップ302または304では、オブジェクトについての書き込み(例えば、コピーオンライト(COW)についてのトリガ)がある場合、どのバスが使用されていないか、または近いうちに使用されなくなると期待されるかに応じて(例えば、DRAMバスまたはNVRAMバスの帯域幅に応じて)、オブジェクトまたはその一部は、保持されている位置から別のメモリタイプへ(例えば、NVRAMからDRAMへ、またはDRAMからNVRAMへ)または同じメモリタイプへ移動すること、及び/またはコピーされることができる。ステップ302及び304では、コンポーネントまたはオブジェクトの移動は、コンポーネントまたはオブジェクト(またはその一部)が使用されると期待される頻度、またはエビクトされるまでにメモリに残存する時間にも依存することができる。
いくつかの実施形態では、インテリジェントCOWは、ルートプロセスからアプリケーションプロセスまで使用されることができる。インテリジェントCOWの実装は、現在及び予測されたメモリバスのトラフィック、オブジェクトの使用量、COWが有効ではなくなるまでの予測時間、及びユーザメトリック(例えば、1秒あたりのフレーム数、画面応答など)による高感度を含む入力の関数であることができる。インテリジェントCOWは、現在及び予測されたメモリバスのトラフィック、オブジェクトの使用量、予測時間、及びユーザ関連メトリックなどの入力を使用する期待値最大化アルゴリズムを介して向上することができる。
ステップ204では、期待値最大化アルゴリズムを使用して、意味のあるメトリック(例えば、1秒あたりのフレーム数、タッチ-レンダリング応答時間など)によって測定される所期のユーザエクスペリエンスを最大化し、複数のメモリタイプのバス容量リソースを最大化することができる。
ステップ302では、共有オブジェクトは、デバイス内のパフォーマンスの最も高いタイプのメモリ(DRAMなど)に初期配置され、徐々に、そのメモリタイプに部分的にコピーされ、パフォーマンスのより低いタイプのメモリ(NVRAMまたはフラッシュメモリなど)に部分的にコピーされることができる。COWによってトリガされる場合、部分ごとに徐々にコピーされることができる。そして、経時的に、パフォーマンスの最も高いタイプのメモリ内の共有オブジェクトの部分(DRAM内の部分など)は、頻繁に使用されない場合、パフォーマンスのより低いタイプのメモリ(NVRAMまたはフラッシュメモリなど)にエビクトされることができる。あるいは、パフォーマンスの最も高いタイプのメモリ内の部分をパフォーマンスのより低いタイプのメモリ全体に直接コピーすることができる、またはこれらの部分をステップ302から304の間などでは書き込みごとに異なるタイプのメモリ間で往復させることができる。
異なるタイプのメモリ間の往復は、異なるタイプのメモリ間のピンポンを含むことができる。ピンポンは、オブジェクトの部分を1つのメモリ部分またはタイプからもう1つにコピーするまたは移動させる高レベルのアルゴリズムである、またはそれを含むことができる。例えば、新しいプロセスをフォークすることができ、それを、ある部分の共有オブジェクトに書き込む。メモリバスAがビジーで、バスBが空いているとする。次に、オブジェクトの部分の読み出し-変更-書き込みを、ピンポンを介してメモリAからメモリBに移動させることができる。また、オブジェクトのその部分がメモリBにあるプロセスとは別のプロセスをフォークすることができる。そして、メモリバスAがビジーで、バスBが空いているとする。次に、オブジェクトの部分の読み出し-変更-書き込みは、メモリBのある部分から移動してメモリBの同じ部分または別の部分に戻ることができる。メモリバスBがビジーで、バスAが空いている場合、オブジェクトの部分の読み出し-変更-書き込みは、メモリBからメモリAに移動することができる。
オペレーティングシステムは、ユーザクリティカルなワーキングセットのオブジェクト(例えば、フォアグラウンドのアプリケーション及び/またはバックグラウンドで実行中のプロセスによって使用されるオブジェクト)を、コンピューティングデバイスのパフォーマンスの最も高いタイプのメモリに保持しようとすることができる。一部のオブジェクトのクリティカルな部分がパフォーマンスの最も高いタイプのメモリにキャッシュされたままで、他のオブジェクトは、コンピューティングデバイス内のパフォーマンスのより低いタイプのメモリにマイグレーションすることができる。
いくつかの実施形態では、OS(またはハイパーバイザなど)は、アプリケーションを始動するように構成されることができ、アプリケーションの始動は、アプリケーションの前の実行のパターンに従った初期点までのアプリケーションについてのルートプロセスの実行を含む。また、OS(またはハイパーバイザなど)は、アプリケーションを開始する要求を受信すると、アプリケーションのルートプロセスを使用することによって、コンピューティングデバイス内のアプリケーションを開始する要求を受信し、コンピューティングデバイスのユーザからアプリケーションを開始するように構成されることができる。
具体的には、図4は、個別のアプリケーションまたはアプリケーショングループのためにカスタマイズされたルートプロセスの作成を実施することができる、コントローラ及びメモリ404を少なくとも含むモバイルデバイス102を示す。コントローラ及びメモリ404のメモリは、図1に示されるメモリ104を含むことができる。モバイルデバイス102のコントローラ及びメモリ404は、モバイルデバイスで実行されるアプリケーション(例えば、アプリケーション406a、406b、及び406cを参照)のための命令及びデータを含むことができる。モバイルデバイス102のコントローラは、データに基づいてアプリケーションの命令を実行することができる。データは、バイナリ形式、またはプログラミング言語インタプリタによる解釈に適した形式のアプリケーション命令コードを含むことができる。データは、いくつかのデータ構造、ライブラリなどを含むことができる。また、コントローラは、コントローラのレジスタに命令及びデータを保持することができる。メモリは、そのメモリセル内に命令及びデータを保持することができる。いくつかの実施形態では、モバイルデバイス102のメモリのメモリセルは、フラッシュメモリセル及び/またはNVRAMセルを含むことができる。NVRAMセルは、3D XPointメモリセルである、またはそれらを含むことができる。
いくつかの実施形態では、メモリは、異なる速度、レイテンシ、帯域幅及び他のパラメータを有することができる。例えば、SRAMメモリを高速キャッシュとして、DRAMをメインメモリとして、そしてNVRAMをストレージメモリとして使用することができる。
モバイルデバイス102に含まれ、実行可能であるアプリケーションごとの命令及びデータは、アプリケーションの、ルートプロセスデータ及びルートプロセスの命令を含むことができる。モバイルデバイス102に含まれるアプリケーションのそれぞれのルートプロセス(例えば、アプリケーション406aのルートプロセス408、アプリケーション406bのルートプロセス412、及びアプリケーション406cのルートプロセス416を参照)は、コントローラ及びメモリ404によって実装されることができる。コントローラは、ルートプロセスの命令及びデータに従ってルートプロセスの命令を実行するように構成されることができ、メモリは、コントローラによるルートプロセスの実行のために命令及びデータを保持する、または格納するように構成されることができる。
図4及び6では、ルートプロセスが単一のアプリケーションに対応することが示される(例えば、ルートプロセス408及び対応するアプリケーション406a、ならびにルートプロセス608及び対応するアプリケーション606aを参照)。ルートプロセスを複数のプロセスにフォークすることができ、これら複数のプロセスを単一のアプリケーションまたは単一のアプリケーションを含む複数のアプリケーションが使用することができることを理解されたい。例えば、単一のアプリケーションがアプリケーショングループ内にある場合、このグループのルートプロセスを複数のフォークされたプロセスにフォークすることができ、複数のフォークされたプロセスをグループ内のアプリケーションが使用することができる。また、アプリケーショングループ内の単一のアプリケーションは、複数の異なるフォークされたプロセスを使用することができる。例えば、アプリケーション606a(アプリグループの一部分であることができる)は、フォークされたプロセス610a、610b、及び610cを使用することができる。アプリケーション606aを含むグループ内の他のアプリが図6に示されていないことに留意されたい。また、言及されるように、グループの複数のアプリケーションは、複数の異なるフォークされたプロセスを使用することができる。例えば、アプリケーション606a、606b、及び606cは、これらのアプリケーションが同じグループ内にある場合(これは図6には示されていない)などには、フォークされたプロセス610a、610b、及び610cを使用することができる。それらのような実施形態は、フォークをマージすることによって実装されることができる。
いくつかの実施形態では、フォークされたルートプロセスの初期実行は、ライブラリをプリロードすること、必要なライブラリ及び初期データ構造からフォークされたプロセスを構成すること、及びさらに再使用するためにフォークされたプロセスを保存することに限定されることができる。また、いつでも、フォークされたプロセスの実行は、ある状態でメモリに保存されることができ、プロセスの再実行に時間を費やさないようにするために再使用されることができる。
本開示の目的のために、図1、4、及び6がアプリケーションごとのルートプロセスを参照するが、そのようなアプリケーションがアプリケーショングループの一部分であることができ、ルートプロセスがアプリケーショングループのルートプロセスであることができることを理解されたい。
モバイルデバイス102に含まれるアプリケーション(例えば、アプリケーション406a、406b及び406cを参照)の他のプロセスは、コントローラ及びメモリ404によっても実装されることができる。コントローラは、他のプロセスの命令及びデータに従ってアプリケーションの他のプロセスの命令を実行するように構成されることができ、メモリは、コントローラによる他のプロセスの実行のために命令及びデータを保持する、または格納するように構成されることができる。
具体的には、図5は、図1、4及び6に示されるモバイルデバイス102によって、またはモバイルデバイス102と同様に構成された別のタイプのコンピューティングデバイスによって実行されることができる方法500の動作を示す。また、いくつかの実施形態では、方法500は、一般にコンピューティングデバイスのOS、またはモバイルデバイスのOSによって少なくとも部分的に実行されることができる。また、方法500は、ハイパーバイザ及び/または1つ以上のオペレーティングシステムによって少なくとも部分的に実行されることができる。
図5では、方法500は、ステップ502で始まり、アプリケーションの使用状況を監視して、アプリケーションのためにメモリからの読み出し及びメモリへの書き込みの頻度または最新性を決定する。いくつかの実施形態(図示せず)では、方法500は、アプリケーションの使用状況を監視し、及び/または追跡し、アプリケーションの以前の実行のパターンの数量、頻度、及び/または最新性を決定することから始めることができる。
アプリケーションの以前の実行のパターンは、監視される、及び/または追跡されるアプリケーションの以前の実行でのパターンの少なくとも数量、頻度及び/または最新性を含むこと、それらに関連すること、または基づくことができる。監視される、及び/または追跡されるパターンは、ユーザまたはマシンによるアプリケーションの使用状況の任意のタイプのパターンであることができる。例えば、アプリケーションのメモリアクセス及び使用状況の任意のタイプのパターンを監視する、及び/または追跡することができる。パターンは、メモリからの読み出し、メモリへの書き込み、物理メモリ空間内のアドレスパターン、仮想空間内のアドレスパターン、データの局所性(空間的及び/または時間的)、バンクの競合、命令ごとのCPUサイクルなどの数量、頻度及び/または最新性などのメトリックを含むこと、これらに関連すること、または基づくことができる。
また、アプリケーションの使用状況を監視して追跡することは、アプリケーションの始動中(例えば、アプリケーションがメモリにロードされているときを含む)、及び/またはその後のアプリケーションの実行中に行われることができる。アプリケーションの使用状況を監視して追跡することは、アプリケーションの始動中で、かつ始動後のアプリケーションの実行中の任意の他の期間に行うことができる。ランタイム中にアプリケーションの使用状況を監視して追跡することによって、アプリケーションの効果的及び/または効率的なルートプロセスの導出が容易になることができる。例えば、始動後、ユーザは画面にタッチしてアプリケーションのある要素をトリガし、ある結果を期待することができる。その結果の配信は、いくつかの実施形態では、アプリケーションのランタイム中に行われる監視に基づいてクリティカルなメモリオブジェクトをプリロードすることができるため、非常に迅速になることができる。いくつかの実施形態では、オブジェクトのプリロードは、NAND型フラッシュメモリなどのより遅いメモリからDRAMなどのより速いメモリに行われることができる。
ステップ504では、方法500は、アプリケーションのために、メモリからの読み出し及びメモリへの書き込みの頻度または最新性に従って、アプリケーションの以前の実行のパターンを生成することを続ける。いくつかの実施形態(図示せず)では、方法500は、監視される、及び/または追跡されるアプリケーションの以前の実行でのパターンの数量、頻度及び/または最新性に従って、アプリケーションの以前の実行のパターンを生成することを続けることができる。
また、アプリケーションの以前の実行の生成されたパターンは、監視される、及び/または追跡されるアプリケーションの以前の実行でのパターンの少なくとも数量、頻度及び/または最新性を含むこと、それらに関連すること、または基づくことができる。ステップ504で生成されるパターンは、ユーザまたはマシンによるアプリケーションの使用状況の任意のタイプのパターンであることができる。例えば、ステップ504では、生成されたパターンは、メモリアクセスの任意のタイプのパターンを含むことができ、アプリケーションの使用状況は、監視される、及び/または追跡されることができる。また、例えば、生成されたパターンは、メモリからの読み出し、メモリへの書き込み、物理メモリ空間内のアドレスパターン、仮想空間内のアドレスパターン、データの局所性(空間的及び/または時間的)、バンクの競合の数量、頻度及び/または最新性などのメトリック、またはアプリケーション及びアプリケーションのためのメモリの使用状況に関連する任意の他のタイプのメトリックを含むこと、それらに関連すること、または基づくことができる。
ステップ506では、方法500は、アプリケーションの以前の実行のパターンに従って、アプリケーションのルートプロセスを初期点まで実行することを続ける。ステップ506は、アプリケーションの以前の実行のパターンに従ってアプリケーションのルートプロセスをカスタマイズし、次に、アプリケーションの以前の実行のパターンに従ってアプリケーションのルートプロセスを初期点まで実行することを含むことができる。ステップ506は、図2に示されるステップ210も含むことができる。ステップ506は、図2に示されるステップ212、及びステップ208も含むことができる。
ルートプロセスのカスタマイズは、さまざまなライブラリからのその作成、デフォルトで利用可能な他のルートプロセスの使用、データ構造の形成、及びネットワークを介したルートプロセスコンポーネントのさまざまなソースへのクエリで行われるが、これらに限定されないことができる。
アプリケーションの以前の実行のパターンは、監視される、及び/または追跡されるアプリケーションの以前の実行でのパターンの少なくとも数量、頻度及び/または最新性を含むこと、それらに関連すること、または基づくことができる。監視される、及び/または追跡されるパターンは、ユーザまたはマシンによるアプリケーションの使用状況の任意のタイプのパターンであることができる。例えば、アプリケーションのメモリアクセス及び使用量の任意のタイプのパターンを監視する、及び/または追跡することができる。アプリケーションの以前の実行のパターンは、ユーザまたはマシンによるアプリケーションの使用状況の任意のタイプのパターンの少なくとも数量、頻度及び/または最新性などのメトリックを含むこと、それらに関連すること、または基づくことができる。例えば、パターンは、メモリからの読み出し、メモリへの書き込み、物理メモリ空間内のアドレスパターン、仮想空間内のアドレスパターン、データの局所性(空間的及び/または時間的)、バンクの競合、命令ごとのCPUサイクルなどの数量、頻度及び/または最新性などのメトリックを含むこと、これらに関連すること、または基づくことができる。
アプリケーションのルートプロセスの実行は、アプリケーションのためのメモリへの任意の初期書き込み及び/またはメモリからの任意の初期読み出しの前に、メモリ内のデータを移動させることを含むことができる。また、アプリケーションのルートプロセスの実行は、アプリケーションのためのメモリへの任意の初期書き込み及び/またはメモリからの任意の初期読み出しの前に、メモリ内のデータをコピーすることを含むことができる。そして、移動した、及び/またはコピーされたデータは、アプリケーションの以前の実行のパターンに関連するデータを含むことができる。いくつかの実施形態では、メモリへの任意の初期書き込みの前のメモリ内のデータの移動及び/またはコピーは、共通コード及び読み出し専用データを移動させないようにする、及び/またはコピーしないようにすることを含むことができる。いくつかの実施形態では、方法500は、コンピューティングデバイス内のOS(またはハイパーバイザ)がOS(またはハイパーバイザ)のルートプロセスをフォークした後、アプリケーションの予測された初期書き込み及び/または読み出しを実行して、アプリケーションのルートプロセスの実行を、アプリケーションのルートプロセスがアプリケーションのためのアプリケーションレベルのプロセスであるようにカスタマイズすることを含むことができる。
また、方法500は、ルートプロセス(図面には示されていない)の少なくとも一部分の実行の前に、アプリケーションのルートプロセスのためのデータをフラッシュメモリに格納することを含むことができる。また、方法500は、ルートプロセス(図面には示されていない)の少なくとも一部分の実行の前に、アプリケーションのルートプロセスのためのデータをNVRAMに格納することを含むことができる。NVRAMは、3D XPointメモリを含むことができる。いくつかの実施形態では、新しいデータを格納することにより、アプリケーションの使用状況に関連する古い未使用のデータが上書きされることができる。
ステップ508では、方法500は、ユーザからアプリケーションを開始する要求を受信することを続ける。ステップ510では、方法500は、アプリケーションを開始する要求を受信すると、アプリケーションのルートプロセスを使用することによって、アプリケーションを開始することを続ける。いくつかの実施形態では、方法500は、アプリケーションの以前の実行のパターンに従って、少なくとも部分的にコンピューティングデバイス内のOSによって、アプリケーションのルートプロセスをバックグラウンドプロセスとして実行することを含むことができる。それらのような実施形態では、方法500は、OSによって、コンピューティングデバイスのユーザからアプリケーションを開始する要求を受信することも含むことができる。そして、方法500は、アプリケーションを開始する要求を受信すると、アプリケーションのルートプロセスまたはルートプロセスのフォークされたプロセスを使用することによって、コンピューティングデバイス内のアプリケーションをOSによって開始することを含むことができる。いくつかの実施形態では、フォークされたプロセスのコード及びデータは、アプリケーション、別のプロセスまたはOSによるコード及びデータの初期変更までコピーされない。いくつかの実施形態では、コード及びデータの変更された部分のみがコピーされ、変更されない部分は共通のままである。いくつかの実施形態では、それらの部分は、メモリページ、キャッシュラインもしくはファイルシステムセクタ、またはコンピュータ可読記憶媒体の他の素子への書き込みを監視することによって識別されることができる。
いくつかの実施形態では、ルートプロセスを初期点まで実行することは、1つのデバイス上で、例えば、クラウドコンピューティング環境内で行われ、次にそれを、別のデバイスからアプリケーションのうちの少なくとも1つを開始する要求を受信するときにフォークし、次に、ネットワークを介してモバイルデバイスなどの別のデバイスにフォークされたプロセスを転送し、次に、モバイルデバイス上でフォークされたプロセスをアプリケーションの開始点として使用することができる。
具体的には、図6は、コントローラ及びメモリ404を少なくとも含むモバイルデバイス102を示し、コントローラ及びメモリ404のメモリは図1に示されるメモリ104を含むことができる。モバイルデバイス102のコントローラ及びメモリ404は、モバイルデバイスで実行されるアプリケーション(例えば、アプリケーション606a、606b、及び606cを参照)のための命令及びデータを含むことができる。モバイルデバイス102のコントローラは、データに基づいてアプリケーションの命令を実行することができる。データは、バイナリ形式、またはプログラミング言語インタプリタによる解釈に適した形式のアプリケーション命令コードを含むことができる。データは、いくつかのデータ構造、ライブラリなどを含むことができる。また、コントローラは、コントローラのレジスタに命令及びデータを保持することができる。メモリは、そのメモリセル内に命令及びデータを保持することができる。いくつかの実施形態では、モバイルデバイス102のメモリのメモリセルは、フラッシュメモリセル及び/またはNVRAMセルを含むことができる。NVRAMセルは、3D XPointメモリセルである、またはそれらを含むことができる。
図6にも示されるように、モバイルデバイス102に含まれ、実行可能であるアプリケーションごとの命令及びデータは、アプリケーションの、ルートプロセスデータ及びルートプロセスの命令を含むことができる。図6に示されるように、モバイルデバイス102に含まれるアプリケーションのルートプロセス(例えば、それぞれのルートプロセス608、612及び616を参照)は、コントローラ及びメモリ404によって実装されることができる。コントローラは、ルートプロセスの命令及びデータに従ってルートプロセスの命令を実行するように構成され、メモリは、コントローラによるルートプロセスの実行のために命令及びデータを保持する、または格納するように構成される。また、図6で示されるように、モバイルデバイス102に含まれるアプリケーション(例えば、アプリケーション606a、606b及び606cを参照)のその他のプロセスは、コントローラ及びメモリ404によっても実装されることができる。コントローラは、その他のプロセスの命令及びデータに従ってアプリケーションのその他のプロセスの命令を実行するように構成され、メモリは、コントローラによるその他のプロセスの実行のために命令及びデータを保持する、または格納するように構成される。
さらに、図6に示されるように、コントローラ及びメモリ404は、モバイルデバイス102に格納されて実行可能であるアプリケーションのそれぞれのルートプロセスからフォークされる複数のプロセス(例えば、フォークされたプロセス610a、610b、610c、614a、614b、618a、及び618bを参照)のデータ及び命令を含むことができる。図6に示されるように、少なくともプロセス610a、610b、及び610cは、ルートプロセス608からフォークされるが、ルートプロセス608からフォークされるプロセスがさらに存在してもよい。また示されるように、プロセス614a及び614bは、ルートプロセス612からフォークされる。そして、プロセス618a及び618bは、ルートプロセス616からフォークされる。
いくつかの実施形態では、モバイルデバイス102のオペレーティングシステム、またはモバイルデバイス内の、もしくはそれに関連するハイパーバイザは、アプリケーションのルートプロセス(例えば、アプリケーション606aのルートプロセス608、アプリケーション606bのルートプロセス612、及びアプリケーション606cのルートプロセス616を参照)を、複数のプロセス(例えば、フォークされたプロセス610a、610b、610c、614a、614b、618a、及び618bを参照)にフォークするように構成される。それらのような実施形態では、オペレーティングシステムまたはハイパーバイザは、アプリケーションを開始する要求を受信すると、複数のフォークされたプロセス(例えば、フォークされたプロセス610a、610b、610c、614a、614b、618a、及び618bを参照)、及び/またはアプリケーションを開始する要求に応じたそれぞれのルートプロセス(例えば、アプリケーション606aのルートプロセス608、アプリケーション606bのルートプロセス612、及びアプリケーション606cのルートプロセス616を参照)のうちの少なくとも1つを使用することによって、モバイルデバイス102内のアプリケーションを開始するように構成されることができる。
フォークされた複数のプロセスの少なくとも一部またはそれぞれは、アプリケーションの親ルートプロセスとは異なることができる。それらの違いは、実行するコンピューティングデバイス内のさまざまなアプリケーション及びさまざまなアプリケーション部分に基づくことができる。そして、フォークされた複数のプロセスの少なくとも一部またはそれぞれは、アプリケーションの実行の少なくともある時点では、アプリケーションの親ルートプロセスと同一であることができる。
本開示の目的のために、図1、4、及び6がアプリケーションごとのルートプロセスを参照するが、そのようなアプリケーションがアプリケーショングループの一部分であることができ、ルートプロセスがアプリケーショングループのルートプロセスであることができることを理解されたい。
具体的には、図7は、図6に示されるモバイルデバイス102によって、またはモバイルデバイス102と同様に構成された別のタイプのコンピューティングデバイスによって実行されることができる方法700の動作を示す。また、いくつかの実施形態では、方法700は、一般にコンピューティングデバイスのオペレーティングシステム、またはモバイルデバイスのオペレーティングシステムによって実行されることができる。また、方法700は、ハイパーバイザ及び/または1つ以上のオペレーティングシステムによって実行されることができる。
図7では、方法700は、図5にさらに詳細に示される方法500のステップ502から508で始まる。ステップ502では、方法700は、アプリケーションの使用状況を監視して、アプリケーションのためにメモリからの読み出し及びメモリへの書き込みの頻度または最新性を決定することを含む。ステップ504では、方法は、アプリケーションのためのメモリからの読み出し及びメモリへの書き込みの頻度または最新性に従って、アプリケーションの以前の実行のパターンを生成することを含む。ステップ506では、方法は、アプリケーションの以前の実行のパターンに従って、アプリケーションのルートプロセスを初期点まで実行することを含む。ステップ508では、方法は、ユーザからアプリケーションを開始する要求を受信することを含む。
ステップ702では、方法700は、アプリケーションのルートプロセスを複数のプロセスにフォークすることを続ける。ステップ704では、方法700は、アプリケーションを開始する要求を受信すると、アプリケーションを開始する要求に従って複数のプロセスのうちの少なくとも1つを使用することによって、アプリケーションを開始することを続ける。あるいは、ステップ702では、方法700は、アプリケーションを開始する要求を受信すると、アプリケーションを開始する要求に従って親ルートプロセス(例えば、ルートプロセス608を参照)及び複数のプロセス(例えば、フォークされたプロセス610a、610b、及び610cを参照)を使用することによって、アプリケーションを開始することを続けることができる。
方法700に関しては、フォークされた複数のプロセスの少なくとも一部またはそれぞれは、アプリケーションの親ルートプロセスとは異なることができる。それらの違いは、実行するコンピューティングデバイス内のさまざまなアプリケーション及びさまざまなアプリケーション部分に基づくことができる。そして、フォークされた複数のプロセスの少なくとも一部またはそれぞれは、アプリケーションの実行の少なくともある時点では、アプリケーションの親ルートプロセスと同一であることができる。
具体的には、図8は、図1、4、及び6に示されるモバイルデバイス102によって、またはモバイルデバイス102と同様に構成された別のタイプのコンピューティングデバイスによって実行されることができる方法800の動作を示す。また、いくつかの実施形態では、方法800は、一般にコンピューティングデバイスのオペレーティングシステム、またはモバイルデバイスのオペレーティングシステムによって実行されることができる。また、方法800は、ハイパーバイザ及び/または1つ以上のオペレーティングシステムによって実行されることができる。
図8に示されるように、方法800は、図5に示される方法500または図7に示される方法700から始まる。ステップ802では、方法800は、ユーザからアプリケーションを終了する要求を受信することを続ける。例えば、ステップ802では、方法800は、コンピューティングデバイスのユーザ(例えば、モバイルデバイスのユーザ)からアプリケーションを終了する要求を受信することを続ける。
ステップ804では、方法800は、アプリケーションを終了する要求を受信すると、アプリケーションを少なくとも部分的に終了することを続ける。ステップ806では、方法800は、アプリケーションを終了する要求を受信すると、アプリケーションのルートプロセスを少なくとも部分的に終了することを続ける。
図8に示されるように、ステップ808では、ステップ806が完了すると、方法800は、所定の条件に従ってルートプロセスを少なくとも部分的に再実行する(アプリケーション及びルートプロセスを少なくとも部分的に終了した後)ことを続ける。ステップ808では、ルートプロセスの少なくとも部分的な再実行は、アプリケーションの以前の実行のパターンに基づいて行われることができる。また、ステップ808では、ルートプロセスの少なくとも部分的な再実行は、アプリケーションの以前の実行のパターンによって更新されることができる。
図8に示されるように、ステップ810では、ステップ806が完了していない場合、方法800は、アプリケーションを終了する要求を受信すると、アプリケーションのルートプロセスを実行することを続けることを進める。換言すれば、方法800は、ステップ802では、モバイルデバイスのユーザからアプリケーションを終了する要求を受信することを含むことができ、次いで、ステップ804では、アプリケーションを終了する要求を受信すると、アプリケーションを少なくとも部分的に終了することを含むことができ、次に、ステップ810では、アプリケーションを終了する要求を受信したとき、ステップ804から810の間にルートプロセスを停止することなく、アプリケーションのルートプロセスを実行することを続けることを含むことができる。この結果、少なくとも部分的に終了したアプリケーション、またはこのルートプロセスを使用することができる他のアプリケーションを再起動することをユーザが決定した場合、再度、アプリケーションのルートプロセスは再使用されることができる。
方法500及び700を実施することができる実施形態などのいくつかの実施形態では、ルートプロセスが、任意のユーザによる特定のコンピューティングデバイス上でのアプリケーションの使用のためにカスタマイズされるように、アプリケーションの以前の実行のパターンは、特定のユーザ及び他のユーザによる特定のコンピューティングデバイス(例えば、特定のモバイルデバイス)でのアプリケーションの使用からのものである。
方法500及び700を実施することができるいくつかの他の実施形態などのいくつかの他の実施形態では、ルートプロセスが、特定のユーザによる特定のモバイルデバイス上でのアプリケーションの使用のためにカスタマイズされるように、アプリケーションの以前の実行のパターンは、特定のユーザによる特定のコンピューティングデバイス(例えば、特定のモバイルデバイス)上でのアプリケーションの使用からのものである。
方法500及び700を実施することができるいくつかの他の実施形態などのいくつかの他の実施形態では、ルートプロセスが、特定のユーザによるコンピューティングデバイス及び少なくとも1つの他のコンピューティングデバイス上でのアプリケーションの使用のためにカスタマイズされるように、アプリケーションの以前の実行のパターンは、特定のユーザによる特定のコンピューティングデバイス(例えば、特定のモバイルデバイス)及び少なくとも1つの他のコンピューティングデバイス上での特定のアプリケーションの使用からのものである。
方法200、方法300、方法500、方法700、方法800、または本明細書に記載の任意の他の方法、プロセス、もしくは動作に関しては、いくつかの実施形態では、非一時的なコンピュータ可読記憶媒体は命令を格納し、これらの命令は、少なくとも1つの処理デバイス(図9に示されるコントローラ906など)によって実行されると、少なくとも1つの処理デバイスに、方法200、方法300、方法500、方法700、方法800、または本明細書に記載の任意の他の方法、プロセス、もしくは動作、及び/またはそれらの任意の組み合わせを実行させる。
例えば、いくつかの実施形態は、コンピュータ実行可能命令で有形に符号化される非一時的なコンピュータ可読記憶媒体を含むことができ、これらのコンピュータ実行可能命令は、コンピューティングデバイスに関連するプロセッサによって実行されると、図2に示される方法200などの方法を実行する。また、例えば、いくつかの実施形態は、コンピュータ実行可能命令で有形に符号化される非一時的なコンピュータ可読記憶媒体を含むことができ、これらのコンピュータ実行可能命令は、コンピューティングデバイスに関連するプロセッサによって実行されると、図3に示される方法300、図5に示される方法500、図7に示される方法700、及び図8に示される方法800などの方法を実行する。
また、例えば、いくつかの実施形態は、コンピュータ実行可能命令で有形に符号化される非一時的なコンピュータ可読記憶媒体を含むことができ、これらのコンピュータ実行可能命令は、コンピューティングデバイスに関連するプロセッサによって実行されると、モバイルデバイスでは、アプリケーションの複数のプロセスを監視することを含む方法を実行することができる。また、方法は、アプリケーションの始動中に複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内のオブジェクトまたはコンポーネントの配置を決定することを含むことができる。そして、アプリケーションの始動中に、方法は、メモリの第一部分に、第一レベルにスコアリングされたオブジェクトまたはコンポーネントをロードするだけでなく、メモリの第二部分に、第二レベルにスコアリングされたオブジェクトまたはコンポーネントをロードすることをも含むことができる。第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションの始動にとってクリティカルではないことができる。
また、例えば、いくつかの実施形態は、モバイルデバイス内のOSによって、アプリケーションの始動中にアプリケーションのための複数のプロセスを監視することを含む方法を含むことができる。複数のプロセスの監視は、バックグラウンドプロセスで行われることができる。また、方法は、アプリケーションの始動中に複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、アプリケーションの始動中にメモリ内のオブジェクトまたはコンポーネントの配置を決定することを含むことができる。そして、アプリケーションの始動中に、方法は、メモリの第一部分に、第一レベルにスコアリングされたオブジェクトまたはコンポーネントをロードするだけでなく、メモリの第二部分に、第二レベルにスコアリングされたオブジェクトまたはコンポーネントをロードすることを含むことができる。第二レベルにスコアリングされたオブジェクトまたはコンポーネントは、第一レベルにスコアリングされたオブジェクトまたはコンポーネントよりもアプリケーションの始動にとってクリティカルではないことができる。
図9は、本開示のいくつかの実施形態による、さまざまなアプリケーションプロセスのための初期データ配信を実施することができる例示的なコンピューティングデバイス900を示す。また、コンピューティングデバイス900は、本開示のいくつかの実施形態による、個別のアプリケーションまたはアプリケーショングループのためにカスタマイズされたルートプロセスの作成を実施することができる。デバイス900は、モバイルデバイス102、またはモバイルデバイス(スマートフォン、タブレットコンピュータ、IoTデバイス、スマートテレビ、スマートウォッチ、グラスまたは他のスマート家電、車載情報システム、ウェアラブルスマートデバイス、ゲームコンソール、PC、デジタルカメラ、もしくはそれらの任意の組み合わせなど)である、またはそれらにある程度類似している、モバイルデバイス102または任意の他のタイプのコンピューティングデバイスである、またはそれを含む、またはその一部分であることができる。示されるように、デバイス900は、少なくともワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、イントラネット、エクストラネット、インターネット、及び/またはそれらの任意の組み合わせを含む通信ネットワーク(複数可)914に接続されることができる。
本明細書に記載のコンピューティングデバイスまたはモバイルデバイス(モバイルデバイス102またはコンピューティングデバイス900など)のそれぞれは、パーソナルコンピュータ(PC)、タブレットPC、セットトップボックス(STB)、パーソナルデジタルアシスタント(PDA)、携帯電話、ウェブアプライアンス、サーバ、ネットワークルータ、スイッチもしくはブリッジ、またはそのマシンによって行われるアクションを指定する命令セットを実行することができる(連続してまたは別の方法で)任意のマシンである、またはそれによって置換されることができる。
また、単一のマシンが図9に示されるデバイス900、ならびに図1、4及び6に示されるモバイルデバイス102に示されるが、用語「マシン」はまた、本明細書で説明される方法または動作のうちの任意の1つまたは複数を実行するために、個々でまたは共同して命令の1つのセット(または複数のセット)を実行するマシンの任意の集まりを含むと解釈されるものとする。そして、図示されたコンピューティングデバイスまたはモバイルデバイスのそれぞれは、少なくともバス及び/またはマザーボード、1つ以上のコントローラ(1つ以上のCPUなど)、一時的なデータストレージを含むことができるメインメモリ、少なくとも1つのタイプのネットワークインタフェース、永続的なデータストレージを含むことができるストレージシステム、及び/またはそれらの任意の組み合わせを各含むことができる。いくつかのマルチデバイスの実施形態では、1つのデバイスは、本明細書に記載の方法のいくつかの部分を完了し、次に、ネットワークを介して別のデバイスに完了の結果を送信することができるため、別のデバイスは、本明細書に記載の方法の他のステップを続行することができる。
また、図9は、本開示のいくつかの実施形態による、例示的なコンピューティングデバイス900のパーツの例を示す。デバイス900は、示されるように、ネットワーク(複数可)914に通信可能に結合されることができる。デバイス900は、少なくともバス904、コントローラ906(CPUなど)、メモリ908、ネットワークインタフェース910、データストレージシステム912、及び他のコンポーネント916(これはGPSコンポーネント、I/Oコンポーネント、及びセンサなど、モバイルデバイスまたはコンピューティングデバイスに見られる任意のタイプのコンポーネントであることができる)を含む。他のコンポーネント916は、1つ以上のディスプレイ、異なるタイプのセンサ、オーディオ及び/またはビジュアル入出力デバイス、追加の特定用途向けメモリ、1つ以上の追加のコントローラ(例えば、GPU)、またはそれらの任意の組み合わせを含むことができる。バス904は、コントローラ906、メモリ908、ネットワークインタフェース910、データストレージシステム912、及び他のコンポーネント916を通信可能に結合する。デバイス900は、コンピュータシステムを含み、このコンピュータシステムは、少なくとも、コントローラ906、メモリ908(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ、同期DRAM(SDRAM)またはRambus DRAM(RDRAM)などのDRAM、スタティックランダムアクセスメモリ(SRAM)など)、及びデータストレージシステム912を含み、これらは、バス904(複数のバスを含むことができる)を介して相互に通信する。
換言すれば、図9は、本開示の実施形態が動作することができるコンピュータシステムを含む例示的なデバイス900のブロック図である。いくつかの実施形態では、コンピュータシステムは、実行時に、本明細書で議論される方法のいずれか1つ以上をマシンに実行させるための命令セットを含むことができる。それらのような実施形態では、マシンは、LAN、イントラネット、4Gまたは5Gなどのモバイルワイヤレスネットワーク、エクストラネット、及び/またはインターネット(例えば、ネットワーク(複数可)914)内の他のマシンに接続される(例えば、ネットワークインタフェース910を介してネットワーク化される)ことができる。マシンは、クライアントサーバネットワーク環境内のサーバまたはクライアントマシンの容量内で、ピアツーピア(または分散)ネットワーク環境(例えば本明細書で説明するピアツーピアネットワーク)内のピアマシンとして、またはクラウドコンピューティングインフラストラクチャもしくは環境内のサーバもしくはクライアントマシンとして動作することができる。
コントローラ906は、1つ以上の汎用処理デバイス、例えばマイクロプロセッサ、中央処理装置などを表す。さらに特に、処理デバイスは、複合命令セットコンピューティング(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、単一命令複数データ(SIMD)、複数命令複数データ(MIMD)、または他の命令セットを実装する1つのプロセッサ、もしくは命令セットの組み合わせを実装する複数のプロセッサであることができる。また、コントローラ906は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、ネットワークプロセッサなどの1つ以上の専用処理デバイスであることができる。コントローラ906は、本明細書で議論される動作及びステップを行うための命令を実行するように構成される。さらに、コントローラ906は、1つ以上の通信ネットワーク(ネットワーク(複数可)914など)を介して通信するために、ネットワークインタフェース910などのネットワークインタフェースデバイスを含むことができる。
データストレージシステム912は、本明細書で説明される方法または機能のうちのいずれか1つ以上を具現化する1つ以上の命令セットまたはソフトウェアが格納されるマシン可読記憶媒体(コンピュータ可読媒体としても知られている)を含むことができる。また、命令は、コンピュータシステムがそれを実行する間に、メモリ908内に、及び/またはコントローラ906内に完全にまたは少なくとも部分的に常駐することができ、メモリ908及びコントローラ906はまた、マシン可読記憶媒体をも構成する。メモリ908は、デバイス900のメインメモリである、またはそれを含むことができる。
メモリ、コントローラ、及びデータストレージ部分は、例示的な実施形態では、それぞれ単一部分であると示されているが、各部分は、命令を格納してそれらのそれぞれの動作を行うことができる単一部分または複数部分を含むと解釈されるべきである。「マシン可読記憶媒体」という用語はまた、マシンによって実行するための命令のセットを記憶またはエンコードすることが可能であり、マシンに本開示の方法論のうちの任意の1つ以上を実行させる任意の媒体を含むと解釈されるべきである。したがって、用語「マシン可読記憶媒体」は、限定されないが、ソリッドステートメモリ、光学媒体、及び磁気媒体を含むと解釈されるものとする。
図10は、本開示のいくつかの実施形態による、ルートプロセスの代替例を含む図1、4、及び6に描写されるモバイルデバイス102を示す。図10に示されるように、モバイルデバイス102は、コントローラ及びメモリ404、ならびにルートプロセスの代替の4つの例示的なケースを含む(図10に示される例示的なケース1、2、3、及び4を参照)。また、図10に示されるモバイルデバイス102は、図1、4、及び6に示されるモバイルデバイス102の態様を含むことができる。
図10に示される例示的な第一ケースはケース1である。ケース1では、アプリケーション606aは、図6に示される通りに描写されている。アプリケーション606aは、複数のフォークされたプロセス(例えば、フォークされたプロセス610a、610b、及び610cを参照)にフォークされるルートプロセス608を含む。
図10に示される例示的な第二ケースはケース2である。ケース2では、アプリケーション1002はルートプロセス「a」を含み、アプリケーション1004はルートプロセス「b」を含む。ケース2では、複数のアプリケーションで使用されているさまざまなルートプロセスが示される。これは多対多マッピングの例であり、多対一マッピングの例のスーパーセットである。アプリケーションのルートプロセスは、2つ以上のアプリケーションで使用されることができる。また、本明細書に記載のいくつかの実施形態では、一対多マッピングの例を使用することができる。例えば、複数の異なるルートプロセスは単一のアプリケーションで使用されることができる。図10に示されるように、ケース2では、アプリケーション1002のルートプロセス「a」は、フォークされたプロセス1a及び2aにフォークされ、プロセス1aはアプリケーション1002によって使用されており、プロセス2aはアプリケーション1004によって使用されている。また示されるように、ケース2では、アプリケーション1004のルートプロセス「b」は、フォークされたプロセス1b及び2bにフォークされ、フォークされたプロセス1bはアプリケーション1002によって使用されており、プロセス2bはアプリケーション1004によって使用されている。
図10に示される例示的な第三ケースはケース3である。ケース3では、アプリケーション1006はルートプロセス「a」を含み、オペレーティングシステム1008(モバイルデバイス102のOSである)はルートプロセス「b」を含む。ケース3では、ルートプロセス「a」は少なくともフォークされたプロセス1a及び2にフォークされ、ルートプロセス「b」は少なくともフォークされたプロセス1bにフォークされる。ケース3では、OSが生成したフォークされたプロセス(フォークされたプロセス1b)は、1つまたは複数のアプリケーションによって使用されることができる(例えば、図10はアプリケーション1006によって使用されているOSが生成したフォークされたプロセスを示す)。そして、OS1008は、任意のアプリケーションからフォークされたプロセスを要求して、独自のプロセス(例えば、OSによって使用されていることが示されている、アプリケーション1006のルートプロセス「a」からフォークされる、フォークされたプロセス2を参照)を変更する、及び/または生成することができる。そして、OS以外の他のアプリケーションは、アプリケーション1006のルートプロセス「a」からフォークされる、フォークされたプロセス2を使用することができる。
図10に示される例示的な第四ケースはケース4である。ケース4では、アプリケーション1010はルートプロセス「a」を含み、アプリケーション1012はルートプロセス「b」を含む。ケース4では、フォークされたプロセス1及び2は、アプリケーション1010のルートプロセス「a」からフォークされ、少なくともフォークされたプロセス1は、アプリケーション1012のルートプロセス「b」からもフォークされる。ケース4は、異なるアプリケーションからの2つのフォークされたプロセスを1つのフォークされたプロセス(例えば、フォークされたプロセス1を参照)にマージすることを示す。いくつかの例では、異なるアプリケーションからのフォークされたプロセスは、組み合わされマージされたフォークされたプロセスにマージされる異なるフォークされたプロセスであることができる。いくつかの他の例では、マージされるフォークされたプロセスは同じプロセス及び/またはデータを含むことができる。図10のケース4に示されるマージの実施態様は、フォークされたプロセスのマージを含む専用フォークプロセスを含むことができるマージされたフォークを介して行われることができる。専用フォークプロセスは、OSシステムコールであることができる。マージを伴う専用フォークは、1つ以上のプロセスを入力(例えば、それぞれがバイトコードで表される)として使用し、プロセス(複数可)を1つの参照プロセスにマージすることができる。それは、マージスキーマ(XMLファイルで記述されたマージスキーマなど)を使用することができる。マージスキーマはバイトコード及びデータのセクションを指すことができ、各セクションは、ある特定の関数呼び出しまたはタスクを表すことができる。また、マージスキーマは、各セクションのマージ(例えば、第一プロセスでの関連セクションが第二プロセスでのものに置換される、または第一プロセスAに挿入されるなど)のための命令を提供することができる。
先行する詳細な説明の一部は、アルゴリズム及びコンピュータメモリ内のデータビットに対する操作の記号表現の観点から提示されている。このようなアルゴリズムの説明及び表現は、その働きの趣旨を当業者に最も効果的に伝えるためにデータ処理技術において当業者が用いる方法である。アルゴリズムはここでは(及び全般的に)、望ましい結果に至る自己矛盾のない動作順序であると考えられる。動作は、物理量の物理的な操作を必要とするものである。通常、必ずしもではないが、これらの量は格納し、組み合わせ、比較し、及び他の方法で操作することができる電気または磁気信号という形を取る。主に共通使用の理由により、これらの信号をビット、値、要素、シンボル、文字、用語、数などと言うことが、時によって好都合であることが分かっている。
しかし、これら及び同様の用語はすべて、適切な物理量に対応付けられるべきであり、これらの量に適用される好都合な標示にすぎないことをしっかりと認識しておくべきである。本開示では、コンピュータシステムのレジスタ及びメモリ内の物理(電子的)量として表されたデータを操作して、コンピュータシステムメモリもしくはレジスタまたは他のこのような情報記憶システム内の物理量として同様に表された他のデータに変換するコンピュータシステムまたは同様の電子コンピューティング装置の操作及びプロセスに言及することができる。
本開示は、本明細書における動作を実行するための装置にも関する。この装置は、意図された目的のために専用に構築されることができる、またはコンピュータに格納されたコンピュータプログラムによって選択的にアクティブにされる、または再構成される汎用コンピュータを含むことができる。このようなコンピュータプログラムは、例えば、フロッピーディスク、光ディスク、CD-ROM、及び光磁気ディスクを含む任意のタイプのディスク、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、EPROM、EEPROM、磁気もしくは光カード、またはそれぞれがコンピュータシステムバスに結合される電子命令の格納に適した任意のタイプの媒体であるが、これらに限定されないコンピュータ可読記憶媒体に格納することができる。
本明細書で示したアルゴリズム及び表示は、何らかの特定のコンピュータまたは他の装置に本来的に関係づけられるものではない。さまざまな汎用システムを、本明細書での教示に従ってプログラムによって用いることもできるし、または本方法を行うためにより専用の装置を構築することが好都合であることが分かる可能性もある。種々のこれらのシステムの構造は、以下の説明で述べるように現れる。加えて、本開示は何らかの特定のプログラミング言語に関して説明されていない。本明細書で説明したような本開示の教示を実施するために、種々のプログラミング言語を使用できることを理解されたい。
本開示を、本開示によるプロセスを行うようにコンピュータシステム(または他の電子装置)をプログラミングするために用いることができる命令が格納されたマシン可読媒体を含むことができる、コンピュータプログラム製品またはソフトウェアとして示すことができる。マシン可読媒体には、マシン(例えば、コンピュータ)によって読取可能な形態で情報を格納するための任意のメカニズムが含まれる。いくつかの実施形態では、マシン可読(例えば、コンピュータ可読)媒体としては、マシン(例えば、コンピュータ)読取可能な記憶媒体、例えば読み出し専用メモリ(「ROM」)、ランダムアクセスメモリ(「RAM」)、磁気ディスク記憶媒体、光記録媒体、フラッシュメモリコンポーネントなどが挙げられる。
前述の明細書では、本開示の実施形態は、その特定の例示的な実施形態を参照して説明されてきた。以下の特許請求の範囲に述べる本開示の実施形態のより広い趣旨及び範囲から逸脱することなく、さまざまな変更を加えることができることが明らかである。したがって、明細書及び図面は限定的な意味ではなく例示的な意味で考慮されるべきである。
Claims (20)
- モバイルデバイスにおいて、アプリケーションの複数のプロセスを監視することと、
前記複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、前記アプリケーションの始動中にメモリ内での前記オブジェクトまたはコンポーネントの配置を決定することと、
前記アプリケーションの前記始動中に、
前記メモリの第一部分内に、第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントを少なくとも部分的にロードすることと、
前記メモリの第二部分内に、第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントを少なくとも部分的にロードすることであって、前記第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントは前記第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントよりも前記アプリケーションにとってクリティカルではない、前記ロードすることと、
を含む、方法。 - 前記アプリケーションの前記始動は、前記アプリケーションについてのルートプロセスを実行することを含む、請求項1に記載の方法。
- 前記ルートプロセスは、前記第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントの前記ロードを含む、請求項2に記載の方法。
- 前記ルートプロセスは、前記第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントの前記ロードを含む、請求項3に記載の方法。
- 前記メモリの前記第一部分は、ダイナミックランダムアクセスメモリ(DRAM)を含む、請求項1に記載の方法。
- 前記メモリの前記第二部分は、不揮発性ランダムアクセスメモリ(NVRAM)を含む、請求項5に記載の方法。
- 前記NVRAMは、3D XPointメモリセルを含む、請求項6に記載の方法。
- 前記スコアリングされたオブジェクトまたはコンポーネントの対応するID及びスコアをスコアテーブルに格納することを含む、請求項1に記載の方法。
- 前記スコアリングは、機械学習に少なくとも部分的に基づく、請求項1に記載の方法。
- 前記複数のプロセスの前記監視、前記オブジェクトまたはコンポーネントの前記スコアリング、及び前記オブジェクトまたはコンポーネントの前記ロードを繰り返すことと、
前記監視、前記スコアリング、及び前記ロードを繰り返すごとに、前記オブジェクトまたはコンポーネントの前記スコアリングの少なくとも一部分をトレーニングすることと、
を含む、請求項9に記載の方法。 - 前記スコアリングは、人工ニューラルネットワーク(ANN)に少なくとも部分的に基づき、
前記トレーニングは、前記ANNをトレーニングすることを含む、請求項10に記載の方法。 - 前記アプリケーションの前記始動後、
前記メモリの前記第一部分から前記メモリの前記第二部分に前記オブジェクトまたはコンポーネントの少なくともいくつかを、前記第一部分にロードされた前記オブジェクトまたはコンポーネントの前記少なくともいくつかについての第一閾値を超えて使用量が減少する、または減少すると予測される場合、移動させることと、
前記メモリの前記第二部分から前記メモリの前記第一部分に前記オブジェクトまたはコンポーネントの少なくともいくつかを、前記第二部分にロードされる前記オブジェクトまたはコンポーネントの前記少なくともいくつかについての第二閾値を超えて使用量が増加する、または増加すると予測される場合、移動させることと、
を含む、請求項1に記載の方法。 - 前記アプリケーションの前記始動後、
前記メモリの前記第二部分から前記オブジェクトまたはコンポーネントの少なくともいくつかを、前記第二部分内の前記オブジェクトまたはコンポーネントの前記少なくともいくつかについての第三閾値を超えて使用量が減少する場合、除去すること、
を含む、請求項12に記載の方法。 - 前記アプリケーションの前記始動は、前記アプリケーションについてのルートプロセスを、前記アプリケーションの以前の実行のパターンに従って初期点まで実行することを含む、請求項1に記載の方法。
- 前記モバイルデバイスのユーザから前記アプリケーションを開始する要求を受信することと、
前記アプリケーションを開始する前記要求を受信すると、前記アプリケーションの前記ルートプロセスを使用することによって、前記モバイルデバイスで前記アプリケーションを開始することと、
を含む、請求項14に記載の方法。 - 前記実行、前記受信、または前記開始のうちの少なくとも1つは、前記モバイルデバイスのオペレーティングシステム(OS)によって実行される、請求項15に記載の方法。
- 前記モバイルデバイスのオペレーティングシステム(OS)によって、前記アプリケーションの前記ルートプロセスを複数のプロセスにフォークすることと、
前記アプリケーションを開始する前記要求を受信すると、前記アプリケーションを開始する前記要求に従って前記複数のプロセスのうちの少なくとも1つを使用することによって、前記モバイルデバイスで前記アプリケーションを開始することと、
を含む、請求項15に記載の方法。 - 前記複数のプロセスの少なくともいくつかは、前記ルートプロセスとは異なる、請求項17に記載の方法。
- コンピュータ実行可能命令によって有形に符号化される非一時的なコンピュータ可読記憶媒体であって、
前記コンピュータ実行可能命令は、コンピューティングデバイスに関連するプロセッサによって実行されると、方法を実行し、
前記方法は、
モバイルデバイスにおいて、アプリケーションの複数のプロセスを監視することと、
前記アプリケーションの始動中に前記複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、前記アプリケーションの前記始動中にメモリ内での前記オブジェクトまたはコンポーネントの配置を決定することと、
前記アプリケーションの前記始動中に、
前記メモリの第一部分内に、第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントをロードすることと、
前記メモリの第二部分内に、第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントをロードすることであって、前記第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントは前記第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントよりも前記アプリケーションの前記始動にとってクリティカルではない、前記ロードすることと、
を含む、前記非一時的なコンピュータ可読記憶媒体。 - モバイルデバイスのオペレーティングシステム(OS)によって、アプリケーションの始動中に前記アプリケーションの複数のプロセスを監視することであって、前記複数のプロセスの前記監視はバックグラウンドプロセスである、前記監視することと、
前記アプリケーションの前記始動中に前記複数のプロセスによって使用されるオブジェクトまたはコンポーネントをスコアリングし、前記アプリケーションの前記始動中にメモリ内での前記オブジェクトまたはコンポーネントの配置を決定することと、
前記アプリケーションの前記始動中に、
前記メモリの第一部分内に、第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントをロードすることと、
前記メモリの第二部分内に、第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントをロードすることであって、前記第二レベルにスコアリングされた前記オブジェクトまたはコンポーネントは前記第一レベルにスコアリングされた前記オブジェクトまたはコンポーネントよりも前記アプリケーションの前記始動にとってクリティカルではない、前記ロードすることと、
を含む、方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/592,547 US11474828B2 (en) | 2019-10-03 | 2019-10-03 | Initial data distribution for different application processes |
US16/592,547 | 2019-10-03 | ||
PCT/US2020/053537 WO2021067431A1 (en) | 2019-10-03 | 2020-09-30 | Initial data distribution for different application processes |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022550448A true JP2022550448A (ja) | 2022-12-01 |
Family
ID=75274124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022520361A Pending JP2022550448A (ja) | 2019-10-03 | 2020-09-30 | さまざまなアプリケーションプロセスのための初期データ配信 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11474828B2 (ja) |
EP (1) | EP4038500A4 (ja) |
JP (1) | JP2022550448A (ja) |
KR (1) | KR20220054395A (ja) |
CN (1) | CN114467099A (ja) |
WO (1) | WO2021067431A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11436041B2 (en) | 2019-10-03 | 2022-09-06 | Micron Technology, Inc. | Customized root processes for groups of applications |
US11599384B2 (en) | 2019-10-03 | 2023-03-07 | Micron Technology, Inc. | Customized root processes for individual applications |
US11429445B2 (en) | 2019-11-25 | 2022-08-30 | Micron Technology, Inc. | User interface based page migration for performance enhancement |
US20210255898A1 (en) * | 2020-05-11 | 2021-08-19 | Suresh Babu Revoled Konti | System and method of predicting application performance for enhanced user experience |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001101010A (ja) * | 1999-09-30 | 2001-04-13 | Hitachi Ltd | 仮想機械最適化方法 |
JP2012194852A (ja) * | 2011-03-17 | 2012-10-11 | Seiko Epson Corp | 再配置プログラム、情報処理装置およびプログラムの再配置方法 |
Family Cites Families (87)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4476524A (en) | 1981-07-02 | 1984-10-09 | International Business Machines Corporation | Page storage control methods and means |
US5218677A (en) | 1989-05-30 | 1993-06-08 | International Business Machines Corporation | Computer system high speed link method and means |
US6138179A (en) | 1997-10-01 | 2000-10-24 | Micron Electronics, Inc. | System for automatically partitioning and formatting a primary hard disk for installing software in which selection of extended partition size is not related to size of hard disk |
CA2312444A1 (en) | 2000-06-20 | 2001-12-20 | Ibm Canada Limited-Ibm Canada Limitee | Memory management of data buffers incorporating hierarchical victim selection |
US6976114B1 (en) | 2001-01-25 | 2005-12-13 | Rambus Inc. | Method and apparatus for simultaneous bidirectional signaling in a bus topology |
US7370288B1 (en) | 2002-06-28 | 2008-05-06 | Microsoft Corporation | Method and system for selecting objects on a display device |
US8001266B1 (en) | 2003-03-31 | 2011-08-16 | Stretch, Inc. | Configuring a multi-processor system |
EP1473906A2 (en) | 2003-04-28 | 2004-11-03 | Matsushita Electric Industrial Co., Ltd. | Service management system, and method, communications unit and integrated circuit for use in such system |
JP4164423B2 (ja) | 2003-08-29 | 2008-10-15 | キヤノン株式会社 | センシング部とポインティングデバイスとを含み構成される装置 |
US20050060174A1 (en) | 2003-09-15 | 2005-03-17 | Heyward Salome M. | Absence management systems and methods |
EP1784727B1 (en) | 2004-08-26 | 2019-05-08 | Red Hat, Inc. | Method and system for providing transparent incremental and multiprocess check-pointing to computer applications |
JP4529612B2 (ja) | 2004-09-21 | 2010-08-25 | 株式会社セガ | 携帯端末におけるアプリケーションプログラム使用時の通信料の削減方法 |
US20070045961A1 (en) | 2005-08-31 | 2007-03-01 | Morris Robert P | Method and system providing for navigation of a multi-resource user interface |
KR100678913B1 (ko) | 2005-10-25 | 2007-02-06 | 삼성전자주식회사 | 가상 메모리 시스템에서 페이지 폴트를 줄이는 장치 및방법 |
US8042109B2 (en) | 2006-03-21 | 2011-10-18 | Intel Corporation | Framework for domain-specific run-time environment acceleration using virtualization technology |
US20070226702A1 (en) | 2006-03-22 | 2007-09-27 | Rolf Segger | Method for operating a microcontroller in a test environment |
TW200805394A (en) | 2006-07-07 | 2008-01-16 | Alcor Micro Corp | Memory storage device and the read/write method thereof |
US9274921B2 (en) | 2006-12-27 | 2016-03-01 | International Business Machines Corporation | System and method for managing code displacement |
US20090049389A1 (en) | 2007-08-13 | 2009-02-19 | Siemens Medical Solutions Usa, Inc. | Usage Pattern Driven Graphical User Interface Element Rendering |
US20090150541A1 (en) | 2007-12-06 | 2009-06-11 | Sony Corporation And Sony Electronics Inc. | System and method for dynamically generating user interfaces for network client devices |
US8789159B2 (en) * | 2008-02-11 | 2014-07-22 | Microsoft Corporation | System for running potentially malicious code |
US8689508B2 (en) | 2008-05-28 | 2014-04-08 | Steeltec Supply, Inc. | Extra strength backing stud having notched flanges |
US8898667B2 (en) | 2008-06-04 | 2014-11-25 | International Business Machines Corporation | Dynamically manage applications on a processing system |
US8464256B1 (en) | 2009-04-10 | 2013-06-11 | Open Invention Network, Llc | System and method for hierarchical interception with isolated environments |
US20100169708A1 (en) | 2008-12-29 | 2010-07-01 | John Rudelic | Method and apparatus to profile ram memory objects for displacment with nonvolatile memory |
US8161260B2 (en) | 2009-02-09 | 2012-04-17 | Oracle International Corporation | Optimal memory allocation for guested virtual machine(s) |
KR101612922B1 (ko) | 2009-06-09 | 2016-04-15 | 삼성전자주식회사 | 메모리 시스템 및 메모리 시스템 관리 방법 |
US8832683B2 (en) | 2009-11-30 | 2014-09-09 | Red Hat Israel, Ltd. | Using memory-related metrics of host machine for triggering load balancing that migrate virtual machine |
US8607023B1 (en) | 2009-12-16 | 2013-12-10 | Applied Micro Circuits Corporation | System-on-chip with dynamic memory module switching |
US8806140B1 (en) | 2009-12-16 | 2014-08-12 | Applied Micro Circuits Corporation | Dynamic memory module switching with read prefetch caching |
US8402061B1 (en) | 2010-08-27 | 2013-03-19 | Amazon Technologies, Inc. | Tiered middleware framework for data storage |
US8775731B2 (en) | 2011-03-25 | 2014-07-08 | Dell Products, L.P. | Write spike performance enhancement in hybrid storage systems |
US9141528B2 (en) | 2011-05-17 | 2015-09-22 | Sandisk Technologies Inc. | Tracking and handling of super-hot data in non-volatile memory systems |
US8631131B2 (en) | 2011-09-07 | 2014-01-14 | Red Hat Israel, Ltd. | Virtual machine pool cache |
US11074495B2 (en) | 2013-02-28 | 2021-07-27 | Z Advanced Computing, Inc. (Zac) | System and method for extremely efficient image and pattern recognition and artificial intelligence platform |
US9916538B2 (en) | 2012-09-15 | 2018-03-13 | Z Advanced Computing, Inc. | Method and system for feature detection |
US11195057B2 (en) | 2014-03-18 | 2021-12-07 | Z Advanced Computing, Inc. | System and method for extremely efficient image and pattern recognition and artificial intelligence platform |
US8738875B2 (en) | 2011-11-14 | 2014-05-27 | International Business Machines Corporation | Increasing memory capacity in power-constrained systems |
US8838887B1 (en) | 2012-03-30 | 2014-09-16 | Emc Corporation | Drive partitioning for automated storage tiering |
US20150081964A1 (en) | 2012-05-01 | 2015-03-19 | Hitachi, Ltd. | Management apparatus and management method of computing system |
US20150301743A1 (en) | 2012-09-24 | 2015-10-22 | Hitachi, Ltd. | Computer and method for controlling allocation of data in storage apparatus hierarchical pool |
GB2507596B (en) | 2012-10-30 | 2014-09-17 | Barclays Bank Plc | Secure computing device and method |
US10311609B2 (en) | 2012-12-17 | 2019-06-04 | Clinton B. Smith | Method and system for the making, storage and display of virtual image edits |
US9508040B2 (en) | 2013-06-12 | 2016-11-29 | Microsoft Technology Licensing, Llc | Predictive pre-launch for applications |
KR20150043102A (ko) | 2013-10-14 | 2015-04-22 | 한국전자통신연구원 | 하이브리드 메모리의 데이터 관리 장치 및 방법 |
CA2867589A1 (en) | 2013-10-15 | 2015-04-15 | Coho Data Inc. | Systems, methods and devices for implementing data management in a distributed data storage system |
US10338826B2 (en) | 2013-10-15 | 2019-07-02 | Cypress Semiconductor Corporation | Managed-NAND with embedded random-access non-volatile memory |
US10013500B1 (en) * | 2013-12-09 | 2018-07-03 | Amazon Technologies, Inc. | Behavior based optimization for content presentation |
US9411638B2 (en) | 2013-12-19 | 2016-08-09 | International Business Machines Corporation | Application startup page fault management in a hardware multithreading environment |
US9892121B2 (en) | 2014-07-15 | 2018-02-13 | Hitachi, Ltd. | Methods and systems to identify and use event patterns of application workflows for data management |
US20160378583A1 (en) | 2014-07-28 | 2016-12-29 | Hitachi, Ltd. | Management computer and method for evaluating performance threshold value |
US9477427B2 (en) | 2014-09-19 | 2016-10-25 | Vmware, Inc. | Storage tiering based on virtual machine operations and virtual volume type |
US10452538B2 (en) | 2015-01-21 | 2019-10-22 | Red Hat, Inc. | Determining task scores reflective of memory access statistics in NUMA systems |
WO2016134035A1 (en) | 2015-02-17 | 2016-08-25 | Coho Data, Inc. | Virtualized application-layer space for data processing in data storage systems |
US9910664B2 (en) * | 2015-05-04 | 2018-03-06 | American Megatrends, Inc. | System and method of online firmware update for baseboard management controller (BMC) devices |
KR102401772B1 (ko) | 2015-10-02 | 2022-05-25 | 삼성전자주식회사 | 전자 장치에서 어플리케이션 실행 장치 및 방법 |
US11182344B2 (en) | 2016-03-14 | 2021-11-23 | Vmware, Inc. | File granular data de-duplication effectiveness metric for data de-duplication |
US10353634B1 (en) * | 2016-03-28 | 2019-07-16 | Amazon Technologies, Inc. | Storage tier-based volume placement |
US10324760B2 (en) | 2016-04-29 | 2019-06-18 | Advanced Micro Devices, Inc. | Leases for blocks of memory in a multi-level memory |
US20190339688A1 (en) | 2016-05-09 | 2019-11-07 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for data collection, learning, and streaming of machine signals for analytics and maintenance using the industrial internet of things |
US11327475B2 (en) | 2016-05-09 | 2022-05-10 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for intelligent collection and analysis of vehicle data |
US20200348662A1 (en) | 2016-05-09 | 2020-11-05 | Strong Force Iot Portfolio 2016, Llc | Platform for facilitating development of intelligence in an industrial internet of things system |
WO2019216975A1 (en) | 2018-05-07 | 2019-11-14 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for data collection, learning, and streaming of machine signals for analytics and maintenance using the industrial internet of things |
US20200225655A1 (en) | 2016-05-09 | 2020-07-16 | Strong Force Iot Portfolio 2016, Llc | Methods, systems, kits and apparatuses for monitoring and managing industrial settings in an industrial internet of things data collection environment |
US11774944B2 (en) | 2016-05-09 | 2023-10-03 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for the industrial internet of things |
US11112784B2 (en) | 2016-05-09 | 2021-09-07 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for communications in an industrial internet of things data collection environment with large data sets |
US10037173B2 (en) | 2016-08-12 | 2018-07-31 | Google Llc | Hybrid memory management |
US10152427B2 (en) | 2016-08-12 | 2018-12-11 | Google Llc | Hybrid memory management |
CN109213539B (zh) | 2016-09-27 | 2021-10-26 | 华为技术有限公司 | 一种内存回收方法及装置 |
US20180276112A1 (en) | 2017-03-27 | 2018-09-27 | International Business Machines Corporation | Balancing memory pressure across systems |
US11442445B2 (en) | 2017-08-02 | 2022-09-13 | Strong Force Iot Portfolio 2016, Llc | Data collection systems and methods with alternate routing of input channels |
US20190050163A1 (en) | 2017-08-14 | 2019-02-14 | Seagate Technology Llc | Using snap space knowledge in tiering decisions |
US10223270B1 (en) * | 2017-09-06 | 2019-03-05 | Western Digital Technologies, Inc. | Predicting future access requests by inverting historic access requests in an object storage system |
CN107783801B (zh) | 2017-11-06 | 2021-03-12 | Oppo广东移动通信有限公司 | 应用程序预测模型建立、预加载方法、装置、介质及终端 |
CN109814936A (zh) | 2017-11-20 | 2019-05-28 | 广东欧珀移动通信有限公司 | 应用程序预测模型建立、预加载方法、装置、介质及终端 |
KR102416929B1 (ko) | 2017-11-28 | 2022-07-06 | 에스케이하이닉스 주식회사 | 메모리 모듈 및 메모리 모듈의 동작 방법 |
TWI647567B (zh) | 2017-12-13 | 2019-01-11 | 國立中正大學 | 使用記憶體位址定位冷熱存取區間之方法 |
US20190190981A1 (en) * | 2017-12-15 | 2019-06-20 | Ca, Inc. | Intelligent trace generation from compact transaction runtime data |
US10782908B2 (en) | 2018-02-05 | 2020-09-22 | Micron Technology, Inc. | Predictive data orchestration in multi-tier memory systems |
WO2019171237A1 (en) | 2018-03-05 | 2019-09-12 | Tensera Networks Ltd. | Application preloading in the presence of user actions |
US20200133254A1 (en) | 2018-05-07 | 2020-04-30 | Strong Force Iot Portfolio 2016, Llc | Methods and systems for data collection, learning, and streaming of machine signals for part identification and operating characteristics determination using the industrial internet of things |
JP7261037B2 (ja) | 2019-02-21 | 2023-04-19 | 株式会社日立製作所 | データ処理装置、ストレージ装置およびプリフェッチ方法 |
US11379260B2 (en) * | 2019-09-04 | 2022-07-05 | Oracle International Corporation | Automated semantic tagging |
US11599384B2 (en) | 2019-10-03 | 2023-03-07 | Micron Technology, Inc. | Customized root processes for individual applications |
US11436041B2 (en) | 2019-10-03 | 2022-09-06 | Micron Technology, Inc. | Customized root processes for groups of applications |
US20210157718A1 (en) | 2019-11-25 | 2021-05-27 | Micron Technology, Inc. | Reduction of page migration between different types of memory |
US11429445B2 (en) | 2019-11-25 | 2022-08-30 | Micron Technology, Inc. | User interface based page migration for performance enhancement |
-
2019
- 2019-10-03 US US16/592,547 patent/US11474828B2/en active Active
-
2020
- 2020-09-30 WO PCT/US2020/053537 patent/WO2021067431A1/en unknown
- 2020-09-30 CN CN202080068495.5A patent/CN114467099A/zh active Pending
- 2020-09-30 EP EP20871456.8A patent/EP4038500A4/en active Pending
- 2020-09-30 JP JP2022520361A patent/JP2022550448A/ja active Pending
- 2020-09-30 KR KR1020227010631A patent/KR20220054395A/ko unknown
-
2022
- 2022-10-17 US US17/967,721 patent/US20230039910A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001101010A (ja) * | 1999-09-30 | 2001-04-13 | Hitachi Ltd | 仮想機械最適化方法 |
JP2012194852A (ja) * | 2011-03-17 | 2012-10-11 | Seiko Epson Corp | 再配置プログラム、情報処理装置およびプログラムの再配置方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114467099A (zh) | 2022-05-10 |
EP4038500A4 (en) | 2023-10-18 |
EP4038500A1 (en) | 2022-08-10 |
US11474828B2 (en) | 2022-10-18 |
US20230039910A1 (en) | 2023-02-09 |
KR20220054395A (ko) | 2022-05-02 |
US20210103446A1 (en) | 2021-04-08 |
WO2021067431A1 (en) | 2021-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2022550448A (ja) | さまざまなアプリケーションプロセスのための初期データ配信 | |
US20230205575A1 (en) | Customized root processes for individual applications | |
US11005934B2 (en) | Efficient live-migration of remotely accessed data | |
US10037267B2 (en) | Instruction set architecture and software support for register state migration | |
US11436041B2 (en) | Customized root processes for groups of applications | |
US11487523B2 (en) | Updating machine emulator | |
KR20200078331A (ko) | 장치로 애플리케이션 기능들을 오프로드하는 시스템 및 방법 | |
US20210406091A1 (en) | Technologies to offload workload execution | |
JP2022522474A (ja) | 組み込みソフトウェアアプリケーションのための機械学習ベースの異常検出 | |
Garg et al. | Catalyst: Gpu-assisted rapid memory deduplication in virtualization environments | |
US10127076B1 (en) | Low latency thread context caching | |
JP2017522658A (ja) | 移行および遠隔ランタイム統合 | |
US11340958B2 (en) | Real-time simulation of compute accelerator workloads for distributed resource scheduling | |
US20240320335A1 (en) | Detection of ransomware activity based on os pagination functionality | |
US20230409406A1 (en) | Checkpoint system for accelerators/quantum computing functions-as-a-service | |
Zhao et al. | STC: Improving the Performance of Virtual Machines Based on Task Classification | |
Tao | A simulation of live virtual machine migration | |
CN117311895A (zh) | 使用用户空间存储器处理特权指令的系统和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220531 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230314 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20231010 |