Ops can utilize your CPU's virtualization extension through the various supported hypervisors. Ops will only attempt to enable acceleration on systems that support it.
If you deploy to Google Cloud or AWS hardware acceleration will always be enabled however if you are developing locally you'll typically need to turn it on manually.
Also bear in mind that currently the VDSO is tied to pvclock and that requires hardware acceleration so you'll get another speed boost from that as well.
To have Ops enable hardware acceleration when running an image, first check to see if your system's chip has the appropriate support. An easy way to do this on modern Linux based systems is to run the following command:
$ grep -woE 'svm|vmx' /proc/cpuinfo | uniq
If you have a supported Intel CPU you should see the output vmx
, for supported
AMD processors you should see svm
. If your CPU does not support a
virtualization extension you will see no output. If you are certain that your
CPU provides virtualization support and yet you see no output, then please
ensure that the extension is enabled in your BIOS/UEFI system.
If using KVM you need to ensure that your user is a member of the kvm
group.
Ops will not attempt to enable acceleration if your user is not a member of this
group. First check if your user is apart of the kvm group:
$ groups
If your user is a member of the group you should see kvm
in the list. If not
already a member you can add yourself to the group with the following command:
$ usermod -aG kvm `whoami`
The change will take effect upon the next login.
You can then verify by issuing the groups command ensuring you are in the kvm group:
$ groups
Finally, you can check to see
if Ops is using virtualization support by inspecting the command it uses to run
an image. You can do this by enabling verbose output when using the run
or
load
commands. So assuming I have hardware acceleration enabled in my runtime
configuration:
{
"RunConfig": {
"Accel": true
}
}
Then the following command should indicate that hardware acceleration is being used:
$ ops run -v hello -c config.json
...
qemu-system-x86_64 -drive file=${HOME}/.ops/images/hello.img,format=raw,if=virtio -device virtio-net,netdev=n0 -netdev user,id=n0 -enable-kvm -nodefaults -no-reboot -device isa-debug-exit -m 2G -display none -serial stdio
...
Notice that the Qemu command is generated with -enable-kvm
option.
Accelaration support can also be enabled by providing the --accel(-x) flag to the ops run
or load
commands.
$ ops run --accel hello # or ops run -x hello
For macOS users things are a bit simpler. To check for virtualization support you can use the
sysctl(8) command with the argument kern.hv_support
:
$ sysctl kern.hv_support
The output will be kern.hv_support: 1
if support is enabled and
kern.hv_support: 0
otherwise. Nothing more is needed on macOS, if hardware
support is enabled in your runtime configuration then Ops generated hypervisor
commands should include the appropriate acceleration options.