https://github.com/hegdebhavya/virtualization-assignment-3
To Modify the CPUID emulation code in KVM to report back additional information when special CPUID leaf nodes are requested.
https://github.com/hegdebhavya/virtualization-assignment-3
cpuid kvm virtualization
Last synced: 3 days ago
JSON representation
To Modify the CPUID emulation code in KVM to report back additional information when special CPUID leaf nodes are requested.
- Host: GitHub
- URL: https://github.com/hegdebhavya/virtualization-assignment-3
- Owner: hegdebhavya
- Created: 2022-12-12T05:21:19.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-12-12T06:35:00.000Z (almost 3 years ago)
- Last Synced: 2024-12-30T04:29:14.034Z (9 months ago)
- Topics: cpuid, kvm, virtualization
- Language: C
- Homepage:
- Size: 106 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Assignment 3
Student Name : Bhavya Hegde
email : bhavya.hegde@sjsu.edu## Modify the CPUID emulation code in KVM to report back additional information when special CPUID leaf nodes are requested.
### Implementation of CPUID leaf nodes 0x4FFFFFFE and 0x4FFFFFFF
* To add support for 0x4ffffffe and 0x4fffffff I have modified the cpuid.c and vmx.c. The SDM defines Exit reasons on Volume 3 Appendix C VMX Basic Exit Reasons section. Here we find all the exit reasons defined by Intel SDM. The Exit reasons supported by VMX are mentioned in file vmx.h at linux/arch/kvm.vmx/vmx.h
First we list the exit reasons not supported by SDM and create a separate list for exit reasons not supported by KVM. The functions to validate the exit reason in modified cpuid code is shown below,
* Once we verify that the subleaf provided to cpuid program is a valid exit reason, we proceed to increase the count and the timer for the particular exit reason in the defined arrays.
* To add support for CPUID leaf nodes 0x4ffffffe and 0x4fffffff please checkout the repo
```
git clone https://github.com/hegdebhavya/linux.git
```* Changes to add support for the new leafnodes can be seen [here](https://github.com/hegdebhavya/linux/commit/e44d5bcb9bcf586438dc1fea16b4dede2b7fe844) ,
Next we build the modules by running the commands```
sudo make modules
```
* We then install the modules```
sudo make INSTALL_MOD_STRIP=1 modules_install```
* Please reload the modules by following the below commands
```
rmmod kvm_intel
rmmod kvm
modprobe kvm_intel
modprobe kvm```
* Next, we launch the 32-bit Ubuntu VM using virt-manager
```
virt-manager
```* The output for testing the number of exits for exit reason 10 (0x0a) which is EXIT_REASON_CPUID can be checked by running command below,
```
./cpuid -s 0x4ffffffe -s 10
```
* The output can be seen in the eax register in screenshot below,
* We observe that the total count for exit 10 is increasing everytime we run the cpuid command.
The dmesg for this exit can be seen in screenshot below
* The output for testing the total time needed for processing exit reason 10 (0x0a) which is EXIT_REASON_CPUID can be checked by running command below,
```
./cpuid -s 0x4fffffff -s 10
```* For output, the high 32-bits of total time spent are returned in register ebx and the low 32-bit of the total time spent are returned in the register ecx.
The output in the ebx, ecx registers can be seen in the screenshot below,

We observe that the total time for exit 10 is increasing everytime we run the cpuid command; this is seen in registers ebx and ecx.
* Next, we test the output of cpuid when we give exit reason which is not supported by SDM, we can test this by using Exit reason 77

* Next, we test the output of cpuid when we give exit reason which is not supported by KVM but is supported by SDM, we can test this by using Exit reason 5

* The output contains eax, ebx, ecx and edx as zero.
### Questions
#### 3. Comment on the frequency of exits – does the number of exits increase at a stable rate? Or are there more exits performed during certain VM operations? Approximately how many exits does a full VM boot entail?
#### Ans.
Yes I see IO_INSTRUCTION (exit reason 30) exit increase at a stable rate. I also observed CPUID (exit reason 10) exit increasing at stable rate while running the cpuid instructions.To calculate the number of exits for full VM boot we can check this by running reboot command and then checking cpuid for leafnode 0x4ffffffc, this can be seen below,

We observe that the reboot caused 3,334,075 (0x0032dfbb) total exits.
#### 4. Of the exit types defined in the SDM, which are the most frequent? Least?
#### Ans
I have collected the output of cpuid command for exit reasons from 0 - 75 and found the following values in the counter| Exit Number | Exit Reason | Exit Frequency |
| :--- | :---: | ---: |
| 48 | EXIT_REASON_EPT_VIOLATION | 502051 |
| 30 | EXIT_REASON_IO_INSTRUCTION | 195510 |
| 10 | EXIT_REASON_CPUID | 72893 |
| 28 | EXIT_REASON_CR_ACCESS | 27148 |
| 0 | EXIT_REASON_EXCEPTION_NMI | 13994 |
| 40 | EXIT_REASON_PAUSE_INSTRUCTION | 1987 |
| 31 | EXIT_REASON_MSR_READ | 162 |
|54 | EXIT_REASON_WBINVD | 6 |
|55 | EXIT_REASON_XSETBV | 2 |
| 29 | EXIT_REASON_DR_ACCESS | 1 |I found Exit reason **48 (EPT_VIOLATION) and Exit reason 30 (IO_INSTRUCTION) to be most frequent** .
The Exit reason **29 (DR_ACCESS) is the least frequent**.