docs: Add a page for vhost-user usage

BUG=b:233174191
TEST=mdbook build

Change-Id: I3fae676885a41ff6cd21b77f864a1379afe2a2ce
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3659818
Commit-Queue: Keiichi Watanabe <keiichiw@chromium.org>
Reviewed-by: Alexandre Courbot <acourbot@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/docs/book/src/SUMMARY.md b/docs/book/src/SUMMARY.md
index 563b165..5fe2f22 100644
--- a/docs/book/src/SUMMARY.md
+++ b/docs/book/src/SUMMARY.md
@@ -12,6 +12,7 @@
   - [Block](./devices/block.md)
   - [Network](./devices/net.md)
   - [Wayland](./devices/wayland.md)
+  - [Vhost-user](./devices/vhost_user.md)
 - [Integration](./integration/index.md)
   - [ChromeOS](./integration/chromeos.md)
 - [Architecture](./architecture.md)
diff --git a/docs/book/src/devices/images/vhost_user.png b/docs/book/src/devices/images/vhost_user.png
new file mode 100644
index 0000000..2252fd0
--- /dev/null
+++ b/docs/book/src/devices/images/vhost_user.png
Binary files differ
diff --git a/docs/book/src/devices/vhost_user.md b/docs/book/src/devices/vhost_user.md
new file mode 100644
index 0000000..3f8015b
--- /dev/null
+++ b/docs/book/src/devices/vhost_user.md
@@ -0,0 +1,44 @@
+# Vhost-user devices
+
+Crosvm supports [vhost-user] devices for most virtio devices (block, net, etc ) so that device
+emulation can be done outside of the main vmm process.
+
+Here is a diagram showing how vhost-user block device back-end and a vhost-user block front-end in
+crosvm VMM work together.
+
+<!-- Image from https://docs.google.com/presentation/d/1s6wH5L_F8NNiXls5UgWbD34jtBmijoZuiyLu76Fc2NM/edit#slide=id.ge5067b4ec2_0_55 -->
+
+![vhost-user diagram](images/vhost_user.png)
+
+## How to run
+
+Let's take a block device as an example and see how to start vhost-user devices.
+
+First, start vhost-user block backend with `crosvm device` command, which waits for a vmm process
+connecting to the socket.
+
+```sh
+# One-time commands to create a disk image.
+fallocate -l 1G disk.img
+mkfs.ext4 disk.img
+
+VHOST_USER_SOCK=/tmp/vhost-user.socket
+
+# Start vhost-user block backend listening on $VHOST_USER_SOCK
+crosvm device block \
+  --socket "${VHOST_USER_SOCK}" \
+  --file disk.img
+```
+
+Then, open another terminal and start a vmm process with `--vhost-user-blk` flag.
+
+```sh
+crosvm run \
+  --vhost-user-blk "${VHOST_USER_SOCK}" \
+  <usual crosvm arguments>
+  vmlinux
+```
+
+As a result, `disk.img` should be exposed as `/dev/vda` just like with `--rwdisk disk.img`.
+
+[vhost-user]: https://qemu.readthedocs.io/en/latest/interop/vhost-user.html