|Linux provides support for different hypervisor virtualization technologies.
|Historically different binary kernels would be required in order to support
|different hypervisors, this restriction was removed with pv_ops.
|Linux pv_ops is a virtualization API which enables support for different
|hypervisors. It allows each hypervisor to override critical operations and
|allows a single kernel binary to run on all supported execution environments
|including native machine -- without any hypervisors.
|pv_ops provides a set of function pointers which represent operations
|corresponding to low level critical instructions and high level
|functionalities in various areas. pv-ops allows for optimizations at run
|time by enabling binary patching of the low-ops critical operations
|at boot time.
|pv_ops operations are classified into three categories:
|- simple indirect call
| These operations correspond to high level functionality where it is
| known that the overhead of indirect call isn't very important.
|- indirect call which allows optimization with binary patch
| Usually these operations correspond to low level critical instructions. They
| are called frequently and are performance critical. The overhead is
| very important.
|- a set of macros for hand written assembly code
| Hand written assembly codes (.S files) also need paravirtualization
| because they include sensitive instructions or some of code paths in
| them are very performance critical.