| 1 | = [wiki:Architecture Architecture] = |
| 2 | |
| 3 | We implemented the FGBI mechanism integrated with sharing and compression support, as shown in Figure 2. In addition to LLM, which is labeled “LLM Migration Manager” in the figure, we add a new component, shown as “FGBI”, and deploy it at both Domain 0 and guest VM. |
| 4 | |
| 5 | For easiness in presentation, we divide FGBI into three main components: |
| 6 | |
| 7 | 1) Dirty Identification: It uses the hash function to compute the hash value for each |
| 8 | block, and identify the new update through the hash comparison at the end of migration |
| 9 | epoch. It has three subcomponents: |
| 10 | |
| 11 | Block Hashing: It creates a hash value for each memory block; |
| 12 | |
| 13 | Hash Indexing: It maintains a hash table based on the hash values generated by the Block Hashing component. The entry in the content index is the hash value that reflects the content of a given block; |
| 14 | |
| 15 | Block Comparison: It compares two blocks to check if they are bitwise identical. |
| 16 | |
| 17 | 2) Block Sharing Support: It handles sharing of bitwise identical blocks. |
| 18 | |
| 19 | 3) Block Compression: It compresses all the dirty blocks on the primary side, before transferring them to the backup host. On the backup side, after receiving the compressed blocks, it decompresses them first before using them to resume the VM. |
| 20 | |
| 21 | In this architecture, the components are divided between the privileged VM Domain 0 and the guest VMs. The VMs contain the Block Sharing Support components. We house the Sharing Support component in the guest VMs to avoid the overhead of using shadow page tables (SPTs). Each VM also contains a Block Hashing component, which means that it has the responsibility of hashing its address space. The Dirty Identification component is placed in the trusted and privileged Domain 0. It receives hash values of the hashed blocks generated by the Block Hashing component in the different VMs. |