From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@gmail.com>
Cc: Laurent Vivier <lvivier@redhat.com>,
Thomas Huth <thuth@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
QEMU <qemu-devel@nongnu.org>,
Markus Armbruster <armbru@redhat.com>,
Michael Roth <mdroth@linux.vnet.ibm.com>,
Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [RFC 0/5] hmp, qmp: Add some commands to introspect virtio devices
Date: Thu, 2 Apr 2020 16:23:45 +0100 [thread overview]
Message-ID: <20200402152345.GR2834@work-vm> (raw)
In-Reply-To: <CAJ+F1CLejBjX7Q6Ttb4jh96juPdWAGx8fvc3FRVSY-TfXJcoUQ@mail.gmail.com>
* Marc-André Lureau (marcandre.lureau@gmail.com) wrote:
> Hi
>
> On Thu, Apr 2, 2020 at 12:03 PM Laurent Vivier <lvivier@redhat.com> wrote:
> >
> > This series introduces new QMP/HMP commands to dump the status
> > of a a virtio device at different levels.
>
> Looks nice, but my feeling is that we are growing qemu with debugging
> facilities in general with HMP/QMP.
>
> If this is only for debugging purposes, why don't we compile it only
> when --enable-debug?
>
> A guest that would need to be debugged could have its state loaded in
> a debug version of qemu.
>
> Alternatively, I think most of the data you provide here could
> probably be introspected via gdb scripts.
>
> Just some thoughts
I kind of agree, but virtio is bread-and-butter, so having it available
all the time isn't a bad idea; however having said that hte same
argument would be for why having gdb scripts to examine your virtio
queues would be useful if you're dealing with a core.
Dave
>
> >
> > 1. Main command
> >
> > HMP Only:
> >
> > virtio [subcommand]
> >
> > Example:
> >
> > List all sub-commands:
> >
> > (qemu) virtio
> > virtio query -- List all available virtio devices
> > virtio status path -- Display status of a given virtio device
> > virtio queue-status path queue -- Display status of a given virtio queue
> > virtio queue-element path queue [index] -- Display element of a given virtio queue
> >
> > 2. List available virtio devices in the machine
> >
> > HMP Form:
> >
> > virtio query
> >
> > Example:
> >
> > (qemu) virtio query
> > /machine/peripheral-anon/device[3]/virtio-backend [virtio-net]
> > /machine/peripheral-anon/device[1]/virtio-backend [virtio-serial]
> > /machine/peripheral-anon/device[0]/virtio-backend [virtio-blk]
> >
> > QMP Form:
> >
> > { 'command': 'query-virtio', 'returns': ['VirtioInfo'] }
> >
> > Example:
> >
> > -> { "execute": "query-virtio" }
> > <- { "return": [
> > {
> > "path": "/machine/peripheral-anon/device[3]/virtio-backend",
> > "type": "virtio-net"
> > },
> > {
> > "path": "/machine/peripheral-anon/device[1]/virtio-backend",
> > "type": "virtio-serial"
> > },
> > {
> > "path": "/machine/peripheral-anon/device[0]/virtio-backend",
> > "type": "virtio-blk"
> > }
> > ]
> > }
> >
> > 3. Display status of a given virtio device
> >
> > HMP Form:
> >
> > virtio status <path>
> >
> > Example:
> >
> > (qemu) virtio status /machine/peripheral-anon/device[3]/virtio-backend
> > /machine/peripheral-anon/device[3]/virtio-backend:
> > Device Id: 1
> > Guest features: 0x0000000130afffa7
> > Host features: 0x0000000179bfffe7
> > Backend features: 0x0000000000000000
> > Endianness: little
> > VirtQueues: 3
> >
> > QMP Form:
> >
> > { 'command': 'virtio-status',
> > 'data': { 'path': 'str' },
> > 'returns': 'VirtioStatus'
> > }
> >
> > Example:
> >
> > -> { "execute": "virtio-status",
> > "arguments": {
> > "path": "/machine/peripheral-anon/device[3]/virtio-backend"
> > }
> > }
> > <- { "return": {
> > "backend_features": 0,
> > "guest_features": 5111807911,
> > "num_vqs": 3,
> > "host_features": 6337593319,
> > "device_endian": "little",
> > "device_id": 1
> > }
> > }
> >
> > 4. Display status of a given virtio queue
> >
> > HMP Form:
> >
> > virtio queue-status <path> <queue>
> >
> > Example:
> >
> > (qemu) virtio queue-status /machine/peripheral-anon/device[3]/virtio-backend 0
> > /machine/peripheral-anon/device[3]/virtio-backend:
> > index: 0
> > inuse: 0
> > last_avail_idx: 61
> > shadow_avail_idx: 292
> > signalled_used: 61
> > signalled_used_valid: 1
> > VRing:
> > num: 256
> > num_default: 256
> > align: 4096
> > desc: 0x000000006c352000
> > avail: 0x000000006c353000
> > used: 0x000000006c353240
> >
> > QMP Form:
> >
> > { 'command': 'virtio-queue-status',
> > 'data': { 'path': 'str', 'queue': 'uint16' },
> > 'returns': 'VirtQueueStatus'
> > }
> >
> > Example:
> >
> > -> { "execute": "virtio-queue-status",
> > "arguments": {
> > "path": "/machine/peripheral-anon/device[3]/virtio-backend",
> > "queue": 0
> > }
> > }
> > <- { "return": {
> > "signalled_used": 373,
> > "inuse": 0,
> > "vring_desc": 864411648,
> > "vring_num_default": 256,
> > "signalled_used_valid": 1,
> > "vring_avail": 864415744,
> > "last_avail_idx": 373,
> > "queue_index": 0,
> > "vring_used": 864416320,
> > "shadow_avail_idx": 619,
> > "used_idx": 373,
> > "vring_num": 256,
> > "vring_align": 4096
> > }
> > }
> >
> > 5. Display element of a given virtio queue
> >
> > HMP Form:
> >
> > virtio queue-element <path> <queue> [index]
> >
> > Example:
> >
> > Dump the information of the head element of the first queue of
> > the first virtio device::
> >
> > (qemu) virtio queue-element/machine/peripheral-anon/device[3]/virtio-backend 0
> > index: 67
> > ndescs: 1
> > descs: addr 0x6fe69800 len 1536 (write-only)
> >
> > (qemu) xp/128bx 0x6fe69800
> > 000000006fe69800: 0x02 0x00 0x00 0x00 0x00 0x00 0x00 0x00
> > 000000006fe69808: 0x00 0x00 0x01 0x00 0x52 0x54 0x00 0x12
> > 000000006fe69810: 0x34 0x56 0x52 0x54 0x00 0x09 0x51 0xde
> > 000000006fe69818: 0x08 0x00 0x45 0x00 0x00 0x4c 0x8f 0x32
> >
> > device[3] is a virtio-net device and we can see in the element buffer the
> > MAC address of the card::
> >
> > [root@localhost ~]# ip link show ens4
> > 2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP m0
> > link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
> >
> > and the MAC address of the gateway::
> >
> > [root@localhost ~]# arp -a
> > _gateway (192.168.122.1) at 52:54:00:09:51:de [ether] on ens4
> >
> > QMP Form:
> >
> > { 'command': 'virtio-queue-element',
> > 'data': { 'path': 'str', 'queue': 'uint16', '*index': 'uint16' },
> > 'returns': 'VirtioQueueElement'
> > }
> >
> > Example:
> >
> > -> { "execute": "virtio-queue-element",
> > "arguments": {
> > "path": "/machine/peripheral-anon/device[3]/virtio-backend",
> > "queue": 0
> > }
> > }
> > -> { "return": {
> > "index": 109,
> > "len": 0,
> > "ndescs": 1,
> > "descs": [
> > { "flags": 2, "len": 2048, "addr": 853145600 }
> > ]
> > }
> > }
> >
> > Laurent Vivier (5):
> > qmp: add QMP command query-virtio
> > qmp: add QMP command virtio-status
> > qmp: add QMP command virtio-queue-status
> > qmp: add QMP command virtio-queue-element
> > hmp: add virtio commands
> >
> > Makefile | 2 +-
> > Makefile.target | 7 +-
> > docs/system/monitor.rst | 2 +
> > hmp-commands-virtio.hx | 148 ++++++++++++++++++
> > hmp-commands.hx | 10 ++
> > hw/virtio/Makefile.objs | 2 +
> > hw/virtio/virtio-stub.c | 32 ++++
> > hw/virtio/virtio.c | 313 +++++++++++++++++++++++++++++++++++++
> > include/hw/virtio/virtio.h | 1 +
> > include/monitor/hmp.h | 4 +
> > monitor/misc.c | 17 ++
> > qapi/Makefile.objs | 2 +-
> > qapi/qapi-schema.json | 1 +
> > qapi/virtio.json | 302 +++++++++++++++++++++++++++++++++++
> > tests/qtest/qmp-cmd-test.c | 1 +
> > 15 files changed, 840 insertions(+), 4 deletions(-)
> > create mode 100644 hmp-commands-virtio.hx
> > create mode 100644 hw/virtio/virtio-stub.c
> > create mode 100644 qapi/virtio.json
> >
> > --
> > 2.25.1
> >
> >
>
>
> --
> Marc-André Lureau
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
prev parent reply other threads:[~2020-04-02 15:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-02 10:02 [RFC 0/5] hmp,qmp: Add some commands to introspect virtio devices Laurent Vivier
2020-04-02 10:02 ` [RFC 1/5] qmp: add QMP command query-virtio Laurent Vivier
2020-04-02 14:23 ` Eric Blake
2020-04-02 10:02 ` [RFC 2/5] qmp: add QMP command virtio-status Laurent Vivier
2020-04-02 14:27 ` Eric Blake
2020-04-02 10:03 ` [RFC 3/5] qmp: add QMP command virtio-queue-status Laurent Vivier
2020-04-02 14:30 ` Eric Blake
2020-04-02 10:03 ` [RFC 4/5] qmp: add QMP command virtio-queue-element Laurent Vivier
2020-04-02 14:31 ` Eric Blake
2020-04-02 14:58 ` Dr. David Alan Gilbert
2020-04-02 10:03 ` [RFC 5/5] hmp: add virtio commands Laurent Vivier
2020-04-02 15:08 ` Dr. David Alan Gilbert
2020-04-02 14:33 ` [RFC 0/5] hmp, qmp: Add some commands to introspect virtio devices Marc-André Lureau
2020-04-02 15:23 ` Dr. David Alan Gilbert [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200402152345.GR2834@work-vm \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@gmail.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.