Luke Nowakowski-Krijger | 8373bc4 | 2019-07-10 08:30:52 -0700 | [diff] [blame] | 1 | .. SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | ============ |
Luis R. Rodriguez | a2e1999 | 2015-02-13 17:13:40 +1030 | [diff] [blame] | 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 |
Luke Nowakowski-Krijger | 8373bc4 | 2019-07-10 08:30:52 -0700 | [diff] [blame] | 24 | These operations correspond to high level functionality where it is |
| 25 | known that the overhead of indirect call isn't very important. |
Luis R. Rodriguez | a2e1999 | 2015-02-13 17:13:40 +1030 | [diff] [blame] | 26 | |
| 27 | - indirect call which allows optimization with binary patch |
Luke Nowakowski-Krijger | 8373bc4 | 2019-07-10 08:30:52 -0700 | [diff] [blame] | 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. |
Luis R. Rodriguez | a2e1999 | 2015-02-13 17:13:40 +1030 | [diff] [blame] | 31 | |
| 32 | - a set of macros for hand written assembly code |
Luke Nowakowski-Krijger | 8373bc4 | 2019-07-10 08:30:52 -0700 | [diff] [blame] | 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. |