]> AND Private Git Repository - loba.git/blob - NOTES
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Replace NULL with nullptr.
[loba.git] / NOTES
1 Process parameters
2 ==================
3
4 The process parameters are: initial_load [neighbors...]
5
6 Communications
7 ==============
8
9 There are two receiving channels per host: control for information
10 messages, and data for load transfers.
11
12 Process model
13 =============
14
15 Each process is made of 3 threads: a receiving thread, a computing
16 thread, and a load-balancing thread.
17
18 * Receiving thread
19   ----------------
20
21     Loop
22     | wait for a message to come, either on data channel, or on ctrl channel
23     | push received message in a buffer of received messages
24     | -> ctrl messages on the one side
25     | -> data messages on the other side
26     +-
27
28    The loop terminates when a "finalize" message is received on each
29    channel.
30
31 * Computing thread
32   ----------------
33
34     Loop
35     | if we received some real load, get it (data messages)
36     | if there is some real load to send, send it
37     | if we own some load, simulate some computing on it
38     | sleep a bit if we are looping too fast
39     +-
40     send CLOSE on data for all neighbors
41     wait for CLOSE on data from all neighbors
42
43   The loop terminates when process::still_running() returns false.
44   (read the source for full details...)
45
46 * Load-balancing thread
47   ---------------------
48
49     Loop
50     | receive ctrl messages
51     | call load-balancing algorithm
52     | send ctrl messages
53     | sleep (min_lb_iter_duration)
54     +-
55     send CLOSE on ctrl for all neighbors
56     wait for CLOSE on ctrl from all neighbors
57
58   The loop terminates when process::still_running() returns false.
59   (read the source for full details...)
60
61 Some notes about *load attributes
62 =================================
63 process::real_load              Current *real* load.
64                                 Used for the computations.
65                                 Displayed in log messages.
66
67 process::expected_load          Current load estimation.
68                                 Used for load-balancing estimation, and for
69                                 diffusing to neighbors.
70                                 * Without bookkeeping, it equals real_load
71                                   minus pending sends.
72                                 * With bookkeeping, it corresponds to the
73                                   "virtual load".
74
75 process::received_load          Real load received from neighbors.
76                                 Used when receiveing data messages, and then
77                                 added to real_load.