Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
OutOfCoreOracle |
|
| 1.0;1 | ||||
OutOfCoreOracle$IOAction |
|
| 1.0;1 |
1 | /* | |
2 | * Licensed to the Apache Software Foundation (ASF) under one | |
3 | * or more contributor license agreements. See the NOTICE file | |
4 | * distributed with this work for additional information | |
5 | * regarding copyright ownership. The ASF licenses this file | |
6 | * to you under the Apache License, Version 2.0 (the | |
7 | * "License"); you may not use this file except in compliance | |
8 | * with the License. You may obtain a copy of the License at | |
9 | * | |
10 | * http://www.apache.org/licenses/LICENSE-2.0 | |
11 | * | |
12 | * Unless required by applicable law or agreed to in writing, software | |
13 | * distributed under the License is distributed on an "AS IS" BASIS, | |
14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
15 | * See the License for the specific language governing permissions and | |
16 | * limitations under the License. | |
17 | */ | |
18 | ||
19 | package org.apache.giraph.ooc.policy; | |
20 | ||
21 | import com.sun.management.GarbageCollectionNotificationInfo; | |
22 | import org.apache.giraph.ooc.command.IOCommand; | |
23 | ||
24 | /** | |
25 | * Interface for any out-of-core oracle. An out-of-core oracle is the brain of | |
26 | * the out-of-core mechanism, determining/deciding on out-of-core actions (load | |
27 | * or store) that should happen. | |
28 | * Note: any class implementing this interface should have one and only one | |
29 | * constructor taking only two arguments of types | |
30 | * <code>ImmutableClassesGiraphConfiguration</code> and | |
31 | * <code>OutOfCoreEngine</code> | |
32 | */ | |
33 | public interface OutOfCoreOracle { | |
34 | /** | |
35 | * Different types of IO actions that can potentially lead to a more desired | |
36 | * state of computation for out-of-core mechanism. These actions are issued | |
37 | * based on the status of the memory (memory pressure, rate of data transfer | |
38 | * to memory, etc.) | |
39 | */ | |
40 | 0 | enum IOAction { |
41 | /** | |
42 | * Either of: | |
43 | * - storing incoming messages of any partition currently on disk, or | |
44 | * - storing incoming messages' raw data buffer of any partition | |
45 | * currently on disk, or | |
46 | * - storing partitions' raw data buffer for those partitions that are | |
47 | * currently on disk. | |
48 | */ | |
49 | 0 | STORE_MESSAGES_AND_BUFFERS, |
50 | /** | |
51 | * Storing a partition that is *processed* in the current iteration cycle. | |
52 | * This action is also known as "soft store" | |
53 | */ | |
54 | 0 | STORE_PROCESSED_PARTITION, |
55 | /** | |
56 | * Storing a partition from memory on disk, prioritizing to *processed* | |
57 | * partitions on memory. However, if there is no *processed* partition, | |
58 | * store should happen at any cost, even if an *unprocessed* partition has | |
59 | * to be stored. This action is also know as "hard store". | |
60 | */ | |
61 | 0 | STORE_PARTITION, |
62 | /** | |
63 | * Loading an *unprocessed* partition from disk to memory, only if there are | |
64 | * *processed* partitions in memory. This action basically initiates a swap | |
65 | * operation. | |
66 | */ | |
67 | 0 | LOAD_TO_SWAP_PARTITION, |
68 | /** | |
69 | * Loading an *unprocessed* partition from disk to memory. This action is | |
70 | * also known as "soft load". | |
71 | */ | |
72 | 0 | LOAD_UNPROCESSED_PARTITION, |
73 | /** | |
74 | * Loading a partition (prioritizing *unprocessed* over *processed*) from | |
75 | * disk to memory. Loading a *processed* partition to memory is a prefetch | |
76 | * of that partition to be processed in the next superstep. This action is | |
77 | * also known as "hard load". | |
78 | */ | |
79 | 0 | LOAD_PARTITION, |
80 | /** | |
81 | * Loading a partition regardless of the memory situation. An out-of-core | |
82 | * mechanism may use this action to signal IO threads that it is allowed to | |
83 | * load a partition that is specifically requested. | |
84 | */ | |
85 | 0 | URGENT_LOAD_PARTITION |
86 | } | |
87 | ||
88 | /** | |
89 | * Get the next set of viable IO actions to help bring memory to a more | |
90 | * desired state. | |
91 | * | |
92 | * @return an array of viable IO actions, sorted from highest priority to | |
93 | * lowest priority | |
94 | */ | |
95 | IOAction[] getNextIOActions(); | |
96 | ||
97 | /** | |
98 | * Whether a command is appropriate to bring the memory to a more desired | |
99 | * state. A command is not executed unless it is approved by the oracle. This | |
100 | * method is specially important where there are multiple IO threads | |
101 | * performing IO operations for the out-of-core mechanism. The approval | |
102 | * becomes significantly important to prevent all IO threads from performing | |
103 | * identical command type, if that is a necessity. For instance, execution of | |
104 | * a particular command type by only one thread may bring the memory to a | |
105 | * desired state, and the rest of IO threads may perform other types of | |
106 | * commands. | |
107 | * | |
108 | * @param command the IO command that is about to execute | |
109 | * @return 'true' if the command is approved for execution. 'false' if the | |
110 | * command should not be executed | |
111 | */ | |
112 | boolean approve(IOCommand command); | |
113 | ||
114 | /** | |
115 | * Notification of command completion. Oracle may update its status and commit | |
116 | * the changes a command may cause. | |
117 | * | |
118 | * @param command the IO command that is completed | |
119 | */ | |
120 | void commandCompleted(IOCommand command); | |
121 | ||
122 | /** | |
123 | * Notification of GC completion. Oracle may take certain decisions based on | |
124 | * GC information (such as amount of time it took, memory it reclaimed, etc.) | |
125 | * | |
126 | * @param gcInfo GC information | |
127 | */ | |
128 | void gcCompleted(GarbageCollectionNotificationInfo gcInfo); | |
129 | ||
130 | /** | |
131 | * Called at the beginning of a superstep. | |
132 | */ | |
133 | void startIteration(); | |
134 | } |