next up previous
Next: Parity Logging: Up: Reliability Previous: Mirroring:


To reduce the main memory waste caused by mirroring, we can use parity-based redundancy schemes much like the ones used in RAIDS [6]. Suppose, for example, that we have S servers, each having P pages. Page (i,j) is the tex2html_wrap_inline594 page that resides on server i. Assume, that we have P parity pages, where parity page j is formed by taking the XOR of all the tex2html_wrap_inline594 pages in all servers. We say that all these tex2html_wrap_inline594 pages belong to the same parity group. If a server crashes, all its pages can be restored by XORing all pages within each parity group.

When the client swaps out a page it has to update the parity to reflect the change. This update is done in two steps:

  1. The client sends the swapped out page to the server, which computes the XOR of the old and the new page.
  2. The server sends the just computed XOR to the parity server, which XORs it with the old parity, forming the new parity.
Unfortunately, this method involves two page transfers: one from client to server, and one from server to parity. Moreover, the client should not discard the page just swapped out, because the server may crash before the new parity is computed, thus, making it impossible to restore the swapped out page. This parity method increases the amount of remote main memory only by a factor of (1+1/S) minimizing the memory overhead, but it still imposes a significant runtime overhead.

Evangelos Markatos
Wed Aug 7 11:36:29 EET DST 1996