[virtio-dev] [RFC PATCH 0/1] Virtio-loopback: a virtio based HAL for non-virtualized environments

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Timos Ampelikiotis <t.ampelikiotis@xxxxxxxxxxxxxxxxxxxxxx>

We would like to share with you an RFC for the Virtio-loopback
technology which we have been working on at Virtual Open Systems in
the context of the Automotive Grade Linux community (Software defined
Vehicles expert group)

We previously presented this activity (see [1]) and now we come back
to you with latest development and updates.

We believe that the technology is more mature today and we would like
to assess the community interest in the technology itself and in
merging the code.

Below we provide a brief description of the technology, recent
updates and a short comparison with vDUSE that might be seen as a
similar technology.

1. Overview:
-------

Virtio-loopback is a hardware abstraction layer (HAL) designed for
non-virtualized environments based on virtio. The main objective is
to enable applications communication with vhost-user devices in a
non-virtualized environment.

More in details, Virtio-loopback architecture consists of a new
transport (Virtio-loopback), a user-space application (Adapter) and
the vhost-user devices.

The data path has been implemented using the "zero-copy" principle,
where vhost-user devices access virtqueues directly in the kernel
space. The technology does not require any changes to virtio protocol
and vhost-user library.

The architecture supports vhost-user-rng, input, blk, gpio, can,
sound and console devices. Early support has been provided also for
vhost-user-vsock, i2c and scsi.

2. Updates:
-------

Since the last time virtio-loopback was introduced [1], we implemented
the following updates:
- Multi-device support:
  - The driver can handle multiple instances of virtio-devices and
    connects them with multiple different instances of the vhost-user
    devices though one or many instances of the adapter application.

- Update the memory mapping mechanism (zero copy mechanism between
  virtio and vhost-user devices):
  - The technology implements a page-fault mechanism which enables
    the vhost-user devices to access the vrings buffer located in the
    kernel.

- Update the notification mechanism:
  - Notification can be delivered from the virtio-driver directly to
    the vhost-user-device (by-passing the adapter application)

- Add support for more devices:
  - The technology added support for vhost-user GPIO, CAN and
    Sound device.
  - The architecture has become more device-agnostic and the process
    of supporting new devices has become a trivial task for most
    devices.

3. Virtio-loopback vs vDUSE (+ benchmarks):
-------

Virtio-loopback and vDUSE technologies serve the same purpose by
trying to define a virtio-based HAL between application and
user-spaces drivers.

The main differences between the two technologies are:
- Memory mapping mechanism:
  - Virtio-loopback implements a zero-copy data sharing mechanism
  - vDUSE implements a bouncing buffer mechanism for sharing the data
    with the user-space.
- Dependencies to other technologies:
  - Virtio-loopback is a simple virtio-transport driver while vDUSE
    is relying on vDPA as an upper layer
- Devices supported:
  - Virtio-loopback: virtio-blk, virtio-rng, virtio-input, virtio-can,
    virtio-gpio, virtio-sound
  - vDUSE: virtio-blk and virtio-net

Performance wise the two technologies seems to behave very similarly
when we measured the throughout for the virtio-block case using the
fio tool [4].

4. More information:
-------

More information and instruction about how to test the design can be
found in repo [5].

5. References:
------

[1] -> https://lore.kernel.org/virtio-dev/CANN35wLsm_RTTKmxFz5jcBujoxfjPwsu37FAw9+W58hjt_nVPQ@xxxxxxxxxxxxxx/
[2] -> https://gerrit.automotivelinux.org/gerrit/admin/repos/src/virtio/virtio-loopback-driver
[3] -> https://gerrit.automotivelinux.org/gerrit/admin/repos/src/virtio/virtio-loopback-adapter
[4] -> http://www.virtualopensystems.com/en/research/scientific-contributions/virtio-loopback-perf-eval-icai2024/
[5] -> https://gerrit.automotivelinux.org/gerrit/gitweb?p=src/virtio/virtio-loopback-adapter.git;a=blob;f=Documentation/testing_virtio_loopback_design.md

Thank you for taking the time to review this RFC,
I would appreciate your feedback and suggestions for improvements.

Timos Ampelikiotis (1):
  VirtIO: Add platform bus driver for loopback virtio device

 MAINTAINERS                                |  10 +
 drivers/virtio/Kconfig                     |  20 +
 drivers/virtio/Makefile                    |   2 +
 drivers/virtio/virtio_loopback.c           | 780 +++++++++++++++++
 drivers/virtio/virtio_loopback_transport.c | 924 +++++++++++++++++++++
 include/uapi/linux/virtio_loopback.h       | 259 ++++++
 6 files changed, 1995 insertions(+)
 create mode 100644 drivers/virtio/virtio_loopback.c
 create mode 100644 drivers/virtio/virtio_loopback_transport.c
 create mode 100644 include/uapi/linux/virtio_loopback.h

--
2.34.1





[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux