mirror of
https://github.com/apache/nuttx.git
synced 2026-05-29 20:56:47 +08:00
virtio: add virtio framework in NuttX
1. virtio devics/drivers match and probe/remote mechanism;
2. virtio mmio transport layer based on OpenAmp (Compatible with both
virtio mmio version 1 and 2);
3. virtio-serial driver based on new virtio framework;
4. virtio-rng driver based on new virtio framework;
5. virtio-net driver based on new virtio framework
(IOB Offload implementation);
6. virtio-blk driver based on new virtio framework;
7. Remove the old virtio mmio framework, the old framework only
support mmio transport layer, and the new framwork support
more transport layer and this commit has implemented all the
old virtio drivers;
8. Refresh the the qemu-arm64 and qemu-riscv virtio related
configs, and update its README.txt;
New virtio-net driver has better performance
Compared with previous virtio-mmio-net:
| | master/-c | master/-s | this/-c | this/-s |
| :--------------------: | :-------: | :-------: | :-----: | :-----: |
| qemu-armv8a:netnsh | 539Mbps | 524Mbps | 906Mbps | 715Mbps |
| qemu-armv8a:netnsh_smp | 401Mbps | 437Mbps | 583Mbps | 505Mbps |
| rv-virt:netnsh | 487Mbps | 512Mbps | 760Mbps | 634Mbps |
| rv-virt:netnsh_smp | 387Mbps | 455Mbps | 447Mbps | 502Mbps |
| rv-virt:netnsh64 | 602Mbps | 595Mbps | 881Mbps | 769Mbps |
| rv-virt:netnsh64_smp | 414Mbps | 515Mbps | 491Mbps | 525Mbps |
| rv-virt:knetnsh64 | 515Mbps | 457Mbps | 606Mbps | 540Mbps |
| rv-virt:knetnsh64_smp | 308Mbps | 389Mbps | 415Mbps | 474Mbps |
Note: Both CONFIG_IOB_NBUFFERS=64, using iperf command, all in Mbits/sec
Tested in QEMU 7.2.2
Signed-off-by: wangbowen6 <wangbowen6@xiaomi.com>
Signed-off-by: Zhe Weng <wengzhe@xiaomi.com>
This commit is contained in:
+46
-37
@@ -5,50 +5,59 @@
|
||||
|
||||
menuconfig DRIVERS_VIRTIO
|
||||
bool "Virtio Device Support"
|
||||
depends on !OPENAMP
|
||||
depends on OPENAMP
|
||||
default n
|
||||
|
||||
if DRIVERS_VIRTIO
|
||||
menuconfig DRIVERS_VIRTIO_MMIO_NUM
|
||||
int "The number of virtio mmio devices"
|
||||
default 1
|
||||
config DRIVERS_VIRTIO_MMIO
|
||||
bool "Virtio MMIO Device Support"
|
||||
default n
|
||||
|
||||
if DRIVERS_VIRTIO_MMIO_NUM != 0
|
||||
menuconfig DRIVERS_VIRTIO_MMIO_BASE
|
||||
hex "Virtio-mmio base address"
|
||||
|
||||
menuconfig DRIVERS_VIRTIO_MMIO_REGSIZE
|
||||
hex "Virtio-mmio register size"
|
||||
config DRIVERS_VIRTIO_MMIO_QUEUE_LEN
|
||||
int "Virtio MMIO Virtio Queue Length"
|
||||
default 0
|
||||
range 0 1024
|
||||
depends on DRIVERS_VIRTIO_MMIO
|
||||
---help---
|
||||
If this value equals to 0, use the max queue length get from
|
||||
mmio register.
|
||||
|
||||
menuconfig DRIVERS_VIRTIO_MMIO_IRQ
|
||||
int "Virtio-mmio irq number"
|
||||
|
||||
endif
|
||||
|
||||
menuconfig DRIVERS_VIRTIO_NET
|
||||
bool "Virtio network support"
|
||||
default n
|
||||
depends on DRIVERS_VIRTIO_MMIO_NUM > 0
|
||||
select ARCH_HAVE_NETDEV_STATISTICS
|
||||
|
||||
if DRIVERS_VIRTIO_NET
|
||||
config DRIVERS_VIRTIO_NET_QUEUE_LEN
|
||||
int "Queue length"
|
||||
default 16
|
||||
|
||||
endif
|
||||
|
||||
menuconfig DRIVERS_VIRTIO_BLK
|
||||
config DRIVERS_VIRTIO_BLK
|
||||
bool "Virtio block support"
|
||||
depends on !DISABLE_MOUNTPOINT
|
||||
default n
|
||||
depends on DRIVERS_VIRTIO_MMIO_NUM > 0
|
||||
|
||||
endif
|
||||
|
||||
if DRIVERS_VIRTIO_BLK
|
||||
config DRIVERS_VIRTIO_BLK_QUEUE_LEN
|
||||
int "Queue length"
|
||||
default 16
|
||||
|
||||
config DRIVERS_VIRTIO_NET
|
||||
bool "Virtio network support"
|
||||
depends on NETDEVICES
|
||||
default n
|
||||
select ARCH_HAVE_NETDEV_STATISTICS
|
||||
select NETDEV_LATEINIT
|
||||
|
||||
config DRIVERS_VIRTIO_NET_BUFNUM
|
||||
int "Virtio network driver buffer number"
|
||||
default 0
|
||||
depends on DRIVERS_VIRTIO_NET
|
||||
---help---
|
||||
The buffer number in each virtqueue. (We have 2 virtqueues.)
|
||||
If this value equals to 0, use CONFIG_IOB_NBUFFERS / 4 for each.
|
||||
Normally we get just a little improvement for >8 buffers, and very little for >32.
|
||||
|
||||
config DRIVERS_VIRTIO_RNG
|
||||
bool "Virtio rng support"
|
||||
default n
|
||||
select ARCH_HAVE_RNG
|
||||
|
||||
config DRIVERS_VIRTIO_SERIAL
|
||||
bool "Virtio serial support"
|
||||
depends on SERIAL
|
||||
default n
|
||||
select SERIAL_RXDMA
|
||||
select SERIAL_TXDMA
|
||||
|
||||
if DRIVERS_VIRTIO_SERIAL
|
||||
config DRIVERS_VIRTIO_SERIAL_BUFSIZE
|
||||
int "Virtio serial driver buffer size"
|
||||
default 256
|
||||
endif
|
||||
endif # DRIVERS_VIRTIO
|
||||
|
||||
Reference in New Issue
Block a user