- Add bhyve NVMe device emulation.
The initial work on bhyve NVMe device emulation was done by the GSoC student Shunsuke Mie and was heavily modified in performan, functionality and guest support by Leon Dang. bhyve: -s <n>,nvme,devpath,maxq=#,qsz=#,ioslots=#,sectsz=#,ser=A-Z accepted devpath: /dev/blockdev /path/to/image ram=size_in_MiB Tested with guest OS: FreeBSD Head, Linux Fedora fc27, Ubuntu 18.04, OpenSuse 15.0, Windows Server 2016 Datacenter. Tested with all accepted device paths: Real nvme, zdev and also with ram. Tested on: AMD Ryzen Threadripper 1950X 16-Core Processor and Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz. Tests at: https://people.freebsd.org/~araujo/bhyve_nvme/nvme.txt Submitted by: Shunsuke Mie <sux2mfgj_gmail.com>, Leon Dang <leon_digitalmsx.com> Reviewed by: chuck (early version), grehan Relnotes: Yes Sponsored by: iXsystems Inc. Differential Revision: https://reviews.freebsd.org/D14022
This commit is contained in:
parent
3d07f89450
commit
c066c68c57
@ -41,6 +41,7 @@ SRCS= \
|
|||||||
pci_hostbridge.c \
|
pci_hostbridge.c \
|
||||||
pci_irq.c \
|
pci_irq.c \
|
||||||
pci_lpc.c \
|
pci_lpc.c \
|
||||||
|
pci_nvme.c \
|
||||||
pci_passthru.c \
|
pci_passthru.c \
|
||||||
pci_virtio_block.c \
|
pci_virtio_block.c \
|
||||||
pci_virtio_console.c \
|
pci_virtio_console.c \
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd Jun 11, 2018
|
.Dd Jul 05, 2018
|
||||||
.Dt BHYVE 8
|
.Dt BHYVE 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -241,6 +241,8 @@ The LPC bridge emulation can only be configured on bus 0.
|
|||||||
Raw framebuffer device attached to VNC server.
|
Raw framebuffer device attached to VNC server.
|
||||||
.It Li xhci
|
.It Li xhci
|
||||||
eXtensible Host Controller Interface (xHCI) USB controller.
|
eXtensible Host Controller Interface (xHCI) USB controller.
|
||||||
|
.It Li nvme
|
||||||
|
NVM Express (NVMe) controller.
|
||||||
.El
|
.El
|
||||||
.It Op Ar conf
|
.It Op Ar conf
|
||||||
This optional parameter describes the backend for device emulations.
|
This optional parameter describes the backend for device emulations.
|
||||||
@ -433,6 +435,27 @@ xHCI USB devices:
|
|||||||
A USB tablet device which provides precise cursor synchronization
|
A USB tablet device which provides precise cursor synchronization
|
||||||
when using VNC.
|
when using VNC.
|
||||||
.El
|
.El
|
||||||
|
.Pp
|
||||||
|
NVMe devices:
|
||||||
|
.Bl -tag -width 10n
|
||||||
|
.It Li devpath
|
||||||
|
Accepted device paths are:
|
||||||
|
.Ar /dev/blockdev
|
||||||
|
or
|
||||||
|
.Ar /path/to/image
|
||||||
|
or
|
||||||
|
.Ar ram=size_in_MiB .
|
||||||
|
.It Li maxq
|
||||||
|
Max number of queues.
|
||||||
|
.It Li qsz
|
||||||
|
Max elements in each queue.
|
||||||
|
.It Li ioslots
|
||||||
|
Max number of concurrent I/O requests.
|
||||||
|
.It Li sectsz
|
||||||
|
Sector size (defaults to blockif sector size).
|
||||||
|
.It Li ser
|
||||||
|
Serial number with maximum 20 characters.
|
||||||
|
.El
|
||||||
.El
|
.El
|
||||||
.It Fl S
|
.It Fl S
|
||||||
Wire guest memory.
|
Wire guest memory.
|
||||||
|
@ -44,12 +44,12 @@
|
|||||||
#define BLOCKIF_IOV_MAX 33 /* not practical to be IOV_MAX */
|
#define BLOCKIF_IOV_MAX 33 /* not practical to be IOV_MAX */
|
||||||
|
|
||||||
struct blockif_req {
|
struct blockif_req {
|
||||||
struct iovec br_iov[BLOCKIF_IOV_MAX];
|
|
||||||
int br_iovcnt;
|
int br_iovcnt;
|
||||||
off_t br_offset;
|
off_t br_offset;
|
||||||
ssize_t br_resid;
|
ssize_t br_resid;
|
||||||
void (*br_callback)(struct blockif_req *req, int err);
|
void (*br_callback)(struct blockif_req *req, int err);
|
||||||
void *br_param;
|
void *br_param;
|
||||||
|
struct iovec br_iov[BLOCKIF_IOV_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct blockif_ctxt;
|
struct blockif_ctxt;
|
||||||
|
1853
usr.sbin/bhyve/pci_nvme.c
Normal file
1853
usr.sbin/bhyve/pci_nvme.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user