Sharing annotations
Munin implements a variety of consistency protocols, which are applied at the granularity of individual data items. The protocols are parameterized according to the following options:
whether
to use a write-update or write-invalidate protocol;
whether
several replicas of a modifiable data item may exist simultaneously;
whether
or not to delay updates or invalidations (for example, under release
consistency);
whether
the item has a fixed owner, to which all updates must be sent;
whether
the same data item may be modified concurrently by several writers;
whether
the data item is shared by a fixed set of processes;
whether
the data item may be modified.
Read-only:
No updates may be made after initialization and the item may be freely copied.
Migratory:
Processes typically take turns in making several accesses to the item, at least
one of which is an update. For example, the item might be accessed within a
critical section. Munin always gives both read and write access together to
such an object, even when a process takes a read fault. This saves subsequent
write-fault processing.
Write-shared:
Several processes update the same data item (for example, an array)
concurrently, but this annotation is a declaration from the programmer that the
processes do not update the same parts of it. This means that Munin can avoid
false sharing but must propagate only those words in the data item that are
actually updated at each process. To do this, Munin makes a copy of a page
(inside a write-fault handler) just before it is updated locally. Only the
differences between the two versions are sent in an update.
Producer-consumer:
The data object is shared by a fixed set of processes, only one of which
updates it. As we explained when discussing thrashing above, a writeupdate
protocol is most suitable here. Moreover, updates may be delayed under the
model of release consistency, assuming that the processes use locks to
synchronize their accesses.
Reduction:
The data item is always modified by being locked, read, updated and unlocked.
An example of this is a global minimum in a parallel computation, which must be
fetched and modified atomically if it is greater than the local minimum. These
items are stored at a fixed owner. Updates are sent to the owner, which
propagates them.
Result:
Several processes update different words within the data item; a single process
reads the whole item. For example, different ‘worker’ processes might fill in
different elements of an array, which is then processed by a ‘master’ process.
The point here is that the updates need only be propagated to the master and
not to the workers (as would occur under the ‘write-shared’ annotation just
described).
Conventional:
The data item is managed under an invalidation protocol similar to that
described in the previous section. No process may therefore read a stale
version of the data item.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.