diff mbox series

[v3,4/4] docs: Add documentation for vhost based RNG implementation

Message ID 20210710005929.1702431-5-mathieu.poirier@linaro.org
State New
Headers show
Series virtio: Add vhost-user based RNG | expand

Commit Message

Mathieu Poirier July 10, 2021, 12:59 a.m. UTC
Add description and example for the vhost-user based RNG implementation.
Tailored on Viresh Kumar's vhost-user-i2c documentation.

Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>

---
 docs/tools/index.rst          |  1 +
 docs/tools/vhost-user-rng.rst | 74 +++++++++++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 docs/tools/vhost-user-rng.rst

-- 
2.25.1

Comments

Alex Bennée July 21, 2021, 4:55 p.m. UTC | #1
Mathieu Poirier <mathieu.poirier@linaro.org> writes:

> Add description and example for the vhost-user based RNG implementation.

> Tailored on Viresh Kumar's vhost-user-i2c documentation.

>

> Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>

> ---

>  docs/tools/index.rst          |  1 +

>  docs/tools/vhost-user-rng.rst | 74 +++++++++++++++++++++++++++++++++++

>  2 files changed, 75 insertions(+)

>  create mode 100644 docs/tools/vhost-user-rng.rst

>

> diff --git a/docs/tools/index.rst b/docs/tools/index.rst

> index d923834a7398..9d80fa89eceb 100644

> --- a/docs/tools/index.rst

> +++ b/docs/tools/index.rst

> @@ -15,5 +15,6 @@ Contents:

>     qemu-nbd

>     qemu-pr-helper

>     qemu-trace-stap

> +   vhost-user-rng

>     virtfs-proxy-helper

>     virtiofsd

> diff --git a/docs/tools/vhost-user-rng.rst b/docs/tools/vhost-user-rng.rst

> new file mode 100644

> index 000000000000..7f69d7bb3c58

> --- /dev/null

> +++ b/docs/tools/vhost-user-rng.rst

> @@ -0,0 +1,74 @@

> +QEMU vhost-user-rng - RNG emulation backend

> +===========================================

> +

> +Synopsis

> +--------

> +

> +**vhost-user-rng** [*OPTIONS*]

> +

> +Description

> +-----------

> +

> +This program is a vhost-user backend that emulates a VirtIO random number

> +generator (RNG).  It uses the host's random number generator pool,

> +/dev/urandom by default but configurable at will, to satisfy requests from

> +guests.

> +

> +This program is designed to work with QEMU's ``-device

> +vhost-user-rng-pci`` but should work with any virtual machine monitor

> +(VMM) that supports vhost-user. See the Examples section below.

> +

> +Options

> +-------

> +

> +.. program:: vhost-user-rng

> +

> +.. option:: -h, --help

> +

> +  Print help.

> +

> +.. option:: -v, --verbose

> +

> +   Increase verbosity of output

> +

> +.. option:: -s, --socket-path=PATH

> +

> +  Listen on vhost-user UNIX domain socket at PATH. Incompatible with --fd.

> +

> +.. option:: -f, --fd=FDNUM

> +

> +  Accept connections from vhost-user UNIX domain socket file descriptor FDNUM.

> +  The file descriptor must already be listening for connections.

> +  Incompatible with --socket-path.

> +

> +.. option:: -p, --period

> +

> +  Rate, in milliseconds, at which the RNG hardware can generate random data.

> +  Used in conjunction with the --max-bytes option.

> +

> +.. option:: -m, --max-bytes

> +

> +  In conjuction with the --period parameter, provides the maximum number of byte

> +  per milliseconds a RNG device can generate.

> +

> +Examples

> +--------

> +

> +The daemon should be started first:

> +

> +::

> +

> +  host# vhost-user-rng --socket-path=rng.sock --period=1000 --max-bytes=4096

> +

> +The QEMU invocation needs to create a chardev socket the device can

> +use to communicate as well as share the guests memory over a memfd.

> +

> +::

> +

> +  host# qemu-system								\

> +      -chardev socket,path=$(PATH)/rng.sock,id=rng0				\

> +      -device vhost-user-rng-pci,chardev=rng0					\

> +      -m 4096 									\

> +      -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on	\

> +      -numa node,memdev=mem							\

> +      ...


Would it be worth pointing out how a guest may consume the randomness? I
appreciate this will be guest specific but currently I'm struggling how
to consume the entropy in a Linux guest.

  cat /dev/urandom > /dev/null

didn't seem to cause any to be consumed above what was during boot up.

-- 
Alex Bennée
diff mbox series

Patch

diff --git a/docs/tools/index.rst b/docs/tools/index.rst
index d923834a7398..9d80fa89eceb 100644
--- a/docs/tools/index.rst
+++ b/docs/tools/index.rst
@@ -15,5 +15,6 @@  Contents:
    qemu-nbd
    qemu-pr-helper
    qemu-trace-stap
+   vhost-user-rng
    virtfs-proxy-helper
    virtiofsd
diff --git a/docs/tools/vhost-user-rng.rst b/docs/tools/vhost-user-rng.rst
new file mode 100644
index 000000000000..7f69d7bb3c58
--- /dev/null
+++ b/docs/tools/vhost-user-rng.rst
@@ -0,0 +1,74 @@ 
+QEMU vhost-user-rng - RNG emulation backend
+===========================================
+
+Synopsis
+--------
+
+**vhost-user-rng** [*OPTIONS*]
+
+Description
+-----------
+
+This program is a vhost-user backend that emulates a VirtIO random number
+generator (RNG).  It uses the host's random number generator pool,
+/dev/urandom by default but configurable at will, to satisfy requests from
+guests.
+
+This program is designed to work with QEMU's ``-device
+vhost-user-rng-pci`` but should work with any virtual machine monitor
+(VMM) that supports vhost-user. See the Examples section below.
+
+Options
+-------
+
+.. program:: vhost-user-rng
+
+.. option:: -h, --help
+
+  Print help.
+
+.. option:: -v, --verbose
+
+   Increase verbosity of output
+
+.. option:: -s, --socket-path=PATH
+
+  Listen on vhost-user UNIX domain socket at PATH. Incompatible with --fd.
+
+.. option:: -f, --fd=FDNUM
+
+  Accept connections from vhost-user UNIX domain socket file descriptor FDNUM.
+  The file descriptor must already be listening for connections.
+  Incompatible with --socket-path.
+
+.. option:: -p, --period
+
+  Rate, in milliseconds, at which the RNG hardware can generate random data.
+  Used in conjunction with the --max-bytes option.
+
+.. option:: -m, --max-bytes
+
+  In conjuction with the --period parameter, provides the maximum number of byte
+  per milliseconds a RNG device can generate.
+
+Examples
+--------
+
+The daemon should be started first:
+
+::
+
+  host# vhost-user-rng --socket-path=rng.sock --period=1000 --max-bytes=4096
+
+The QEMU invocation needs to create a chardev socket the device can
+use to communicate as well as share the guests memory over a memfd.
+
+::
+
+  host# qemu-system								\
+      -chardev socket,path=$(PATH)/rng.sock,id=rng0				\
+      -device vhost-user-rng-pci,chardev=rng0					\
+      -m 4096 									\
+      -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on	\
+      -numa node,memdev=mem							\
+      ...