Commit | Line | Data |
---|---|---|
8373bc4f LNK |
1 | .. SPDX-License-Identifier: GPL-2.0 |
2 | ||
3 | ============ | |
a2e19991 LR |
4 | Paravirt_ops |
5 | ============ | |
6 | ||
7 | Linux provides support for different hypervisor virtualization technologies. | |
8 | Historically different binary kernels would be required in order to support | |
9 | different hypervisors, this restriction was removed with pv_ops. | |
10 | Linux pv_ops is a virtualization API which enables support for different | |
11 | hypervisors. It allows each hypervisor to override critical operations and | |
12 | allows a single kernel binary to run on all supported execution environments | |
13 | including native machine -- without any hypervisors. | |
14 | ||
15 | pv_ops provides a set of function pointers which represent operations | |
16 | corresponding to low level critical instructions and high level | |
17 | functionalities in various areas. pv-ops allows for optimizations at run | |
18 | time by enabling binary patching of the low-ops critical operations | |
19 | at boot time. | |
20 | ||
21 | pv_ops operations are classified into three categories: | |
22 | ||
23 | - simple indirect call | |
8373bc4f LNK |
24 | These operations correspond to high level functionality where it is |
25 | known that the overhead of indirect call isn't very important. | |
a2e19991 LR |
26 | |
27 | - indirect call which allows optimization with binary patch | |
8373bc4f LNK |
28 | Usually these operations correspond to low level critical instructions. They |
29 | are called frequently and are performance critical. The overhead is | |
30 | very important. | |
a2e19991 LR |
31 | |
32 | - a set of macros for hand written assembly code | |
8373bc4f LNK |
33 | Hand written assembly codes (.S files) also need paravirtualization |
34 | because they include sensitive instructions or some of code paths in | |
35 | them are very performance critical. |