| 1 | = [wiki:Framework Framework] = |
| 2 | |
| 3 | Figure 3 describes the execution flow of the FGBI mechanism. The numbers on the arrows in the figure correspond to numbers in the enumerated list below. |
| 4 | |
| 5 | 1) Hashing: At the beginning of each epoch, the Block Hashing components at the different guest VMs compute the hash value for each block. |
| 6 | |
| 7 | 2) Storing: FGBI stores and delivers the hash key of the hashed block to the Hash Indexing component. |
| 8 | |
| 9 | 3) Index Lookup: It checks the content index for identical keys, to determine whether the block has been seen before. The lookup can have two different outcomes: |
| 10 | |
| 11 | Key not seen before: Add it to the index and proceed to step 6. |
| 12 | |
| 13 | Key seen before: Possibly an opportunity to share, so request block comparison. |
| 14 | |
| 15 | 4) Block Comparison: Two blocks are shared if they are bitwise identical. Meanwhile, it notifies the Block Sharing Support Components on corresponding VMs that they have a block to be shared. If not, then there is a hash collision, the blocks aren’t shared, and proceed to step 6. |
| 16 | |
| 17 | 5) Shared Block Update: If two blocks are bitwise identical, then store the same hash value for both blocks. Unless there is a write update to this shared block, it doesn’t need to be compared at the end of the epoch. |
| 18 | |
| 19 | 6) Block Compression: Before transferring, compress all the dirty blocks. |
| 20 | |
| 21 | 7) Transferring: At the end of epoch, there are three different transfer outcomes: |
| 22 | |
| 23 | Block is not shared: FGBI computes the hash value again and compares with the corresponding old value. If they don’t match, mark this block as dirty, compress and send it to the backup host. Repeat step 1 (which means begin the next migration epoch). |
| 24 | |
| 25 | Block is shared but no write update: It means either block was modified during this epoch. Thus, there is no need to compute hash values again for this shared block, and therefore, no need to make comparison, compression, or transfer either. Repeat step 1. |
| 26 | |
| 27 | Block is shared and write update occurs: This means that one or both blocks have been modified during this epoch. Thus, FGBI needs to check which one was modified, and then compress and send the dirty one or both to the backup host. Repeat step 1. |