Added object serialization section.
This commit is contained in:
parent
00c53c013e
commit
3b5508a03a
1 changed files with 30 additions and 3 deletions
|
@ -864,10 +864,37 @@ We present three variants of \yad here. The first treats \yad like
|
||||||
Berkeley DB. The second customizes the behavior of the buffer
|
Berkeley DB. The second customizes the behavior of the buffer
|
||||||
manager. Instead of maintaining an up-to-date version of each object
|
manager. Instead of maintaining an up-to-date version of each object
|
||||||
in the buffer manager or page file, it allows the buffer manager's
|
in the buffer manager or page file, it allows the buffer manager's
|
||||||
view of live application objects to become stale. (This is incomplete... I'm writing it right now...)
|
view of live application objects to become stale. This is safe since
|
||||||
|
the system is always able to reconstruct the appropriate page entry
|
||||||
|
form the live copy of the object.
|
||||||
|
|
||||||
|
The reason it would be difficult to do this with Berkeley DB is that
|
||||||
|
we still need to generate log entries as the object is being updated.
|
||||||
|
Otherwise, commit would not be durable, and the application would be
|
||||||
|
unable to abort() transactions. Even if we decided to disallow
|
||||||
|
application aborts, we would still need to write log entries
|
||||||
|
committing. This would cause Berekley DB to write data back to the
|
||||||
|
page file, increasing the working set of the program, and increasing
|
||||||
|
disk activity.
|
||||||
|
|
||||||
|
Under \yad, we implemented this optimization by adding two new
|
||||||
|
operations, update(), which only updates the log, and flush(), which
|
||||||
|
updates the page file. We decrease the size of the page file, so
|
||||||
|
flush() is likely to incur disk overhead. However, we have roughly
|
||||||
|
doubled the number of objects that are cached in memory, and expect
|
||||||
|
flush() to be called relatively infrequently.
|
||||||
|
|
||||||
|
The third \yad plugin to \oasys incorporated all of the updates of the
|
||||||
|
second, but arranged to only the changed portions of objects to the
|
||||||
|
log.
|
||||||
|
|
||||||
|
Figure~\ref{objectSerialization} presents the performance of the three
|
||||||
|
\yad optimizations, and the \oasys plugins implemented on top of other
|
||||||
|
systems. As we can see, \yad performs better than the baseline
|
||||||
|
systems. More interestingly, in non-memory bound systems, the
|
||||||
|
optimizations nearly double \yad's performance, and we see that in the
|
||||||
|
memory-bound setup, update/flush indeed improves memory utilization.
|
||||||
|
|
||||||
It treats the application's pool of deserialized (live)
|
|
||||||
in-memory objects as the primary copy of tdata.
|
|
||||||
|
|
||||||
\subsection{Graph traversal}
|
\subsection{Graph traversal}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue