diff --git a/how-to/what-is-vm-cache-and-how-do-I-use-it.md b/how-to/what-is-vm-cache-and-how-do-I-use-it.md new file mode 100644 index 0000000000..d05c6213a3 --- /dev/null +++ b/how-to/what-is-vm-cache-and-how-do-I-use-it.md @@ -0,0 +1,45 @@ +# What Is VMCache and How To Enable It + +* [What is VMCache](#what-is-vmcache-and-how-to-enable-it) +* [How is this different to VM templating](#how-is-this-different-to-vm-templating) +* [How to enable VMCache](#how-to-enable-vmcache) +* [Limitations](#limitations) + +### What is VMCache +VMCache is a new function that creates VMs as caches before using it. +It helps speed up new container creation. +The function consists of a server and some clients communicating +through Unix socket. The protocol is gRPC in [protocols/cache/cache.proto](https://github.com/kata-containers/runtime/blob/master/protocols/cache/cache.proto). +The VMCache server will create some VMs and cache them by factory cache. +It will convert the VM to gRPC format and transport it when gets +requested from clients. +Factory grpccache is the VMCache client. It will request gRPC format +VM and convert it back to a VM. If VMCache function is enabled, +kata-runtime will request VM from factory grpccache when it creates +a new sandbox. + +### How is this different from VM templating +Both [VM templating](https://github.com/kata-containers/documentation/blob/master/how-to/what-is-vm-templating-and-how-do-I-use-it.md) and VMCache help speed up new container creation. +When VM templating enabled, new VMs are created by cloning from a pre-created template VM, and they will share the same initramfs, kernel and agent memory in readonly mode. So it saves a lot of memory if there are many Kata Containers running on the same host. +VMCache is not vulnerable to [share memory CVE](https://github.com/kata-containers/documentation/blob/master/how-to/what-is-vm-templating-and-how-do-I-use-it.md#what-are-the-cons) because each VM doesn't share the memory. + +### How to enable VMCache +VMCache can be enabled by changing your Kata Containers config file (`/usr/share/defaults/kata-containers/configuration.toml`, +overridden by `/etc/kata-containers/configuration.toml` if provided) such that: +* `vm_cache_number` specifies the number of caches of VMCache: + * unspecified or == 0 + VMCache is disabled + * `> 0` + will be set to the specified number +* `vm_cache_endpoint` specifies the address of the Unix socket. + +Then you can create a VM templating for later usage by calling: +``` +$ sudo kata-runtime factory init +``` +and purge it by ctrl-c it. + +### Limitations +* Cannot work with VM templating. +* Cannot work with vsock. +* Only supports the qemu hypervisor. diff --git a/how-to/what-is-vm-templating-and-how-do-I-use-it.md b/how-to/what-is-vm-templating-and-how-do-I-use-it.md index 423aeaaa8c..1d2974a415 100644 --- a/how-to/what-is-vm-templating-and-how-do-I-use-it.md +++ b/how-to/what-is-vm-templating-and-how-do-I-use-it.md @@ -7,6 +7,11 @@ by cloning from a pre-created template VM, and they will share the same initramfs, kernel and agent memory in readonly mode. It is very much like a process fork done by the kernel but here we *fork* VMs. +### How is this different from VMCache +Both [VMCache](https://github.com/kata-containers/documentation/blob/master/how-to/what-is-vm-cache-and-how-do-I-use-it.md) and VM templating help speed up new container creation. +When VMCache enabled, new VMs are created by the VMCache server. So it is not vulnerable to share memory CVE because each VM doesn't share the memory. +VM templating saves a lot of memory if there are many Kata Containers running on the same host. + ### What are the Pros VM templating helps speed up new container creation and saves a lot of memory if there are many Kata Containers running on the same host.