From: Olivier MATZ <olivier.matz@6wind.com>
To: dev@dpdk.org, yliu@fridaylinux.org, maxime.coquelin@redhat.com
Cc: stephen@networkplumber.org, stable@dpdk.org
Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH 6/9] net/virtio: fix queue setup consistency
Date: Thu, 31 Aug 2017 15:49:58 +0200 [thread overview]
Message-ID: <20170831134958.iprf4ikatdox54xo@neon> (raw)
In-Reply-To: <20170831134015.1383-7-olivier.matz@6wind.com>
Platform description
--------------------
guest (dpdk)
+----------------+
| |
| |
| port0 |
+----------------+
|
| virtio
|
+----------------+
| tap0 |
| |
| |
+----------------+
host (linux, vhost-net)
Host configuration
------------------
Start qemu with:
- a ne2k management interface to avoi any conflict with dpdk
- a virtio net device, connected to a tap interface through vhost-net
- mergeable buffers disabled
/usr/bin/qemu-system-x86_64 -k fr -daemonize --enable-kvm -m 2G -cpu host \
-smp 3 -serial telnet::40564,server,nowait -serial null \
-qmp tcp::44340,server,nowait -monitor telnet::49229,server,nowait \
-device ne2k_pci,mac=de:ad:de:01:02:03,netdev=user.0,addr=03 \
-netdev user,id=user.0,hostfwd=tcp::34965-:22 \
-netdev type=tap,id=vhostnet0,script=no,vhost=on,queues=8 \
-device virtio-net-pci,mrg_rxbuf=off,netdev=vhostnet0,mq=on,vectors=17 \
-hda "${VM_PATH}/ubuntu-16.04-template.qcow2" \
-snapshot -vga none -display none
Guest configuration
-------------------
Apply a patch that reverts initialization of queues in testpmd
(initialize rx queue first), and displays some logs in virtio:
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1461,34 +1461,10 @@ start_port(portid_t pid)
}
if (port->need_reconfig_queues > 0) {
port->need_reconfig_queues = 0;
- /* setup tx queues */
- for (qi = 0; qi < nb_txq; qi++) {
- if ((numa_support) &&
- (txring_numa[pi] != NUMA_NO_CONFIG))
- diag = rte_eth_tx_queue_setup(pi, qi,
- nb_txd,txring_numa[pi],
- &(port->tx_conf));
- else
- diag = rte_eth_tx_queue_setup(pi, qi,
- nb_txd,port->socket_id,
- &(port->tx_conf));
-
- if (diag == 0)
- continue;
-
- /* Fail to setup tx queue, return */
- if (rte_atomic16_cmpset(&(port->port_status),
- RTE_PORT_HANDLING,
- RTE_PORT_STOPPED) == 0)
- printf("Port %d can not be set back "
- "to stopped\n", pi);
- printf("Fail to configure port %d tx queues\n", pi);
- /* try to reconfigure queues next time */
- port->need_reconfig_queues = 1;
- return -1;
- }
/* setup rx queues */
for (qi = 0; qi < nb_rxq; qi++) {
+ printf("rte_eth_rx_queue_setup %d %d\n",
+ pi, qi);
if ((numa_support) &&
(rxring_numa[pi] != NUMA_NO_CONFIG)) {
struct rte_mempool * mp =
@@ -1500,7 +1476,6 @@ start_port(portid_t pid)
rxring_numa[pi]);
return -1;
}
-
diag = rte_eth_rx_queue_setup(pi, qi,
nb_rxd,rxring_numa[pi],
&(port->rx_conf),mp);
@@ -1532,6 +1507,34 @@ start_port(portid_t pid)
port->need_reconfig_queues = 1;
return -1;
}
+ /* setup tx queues */
+ for (qi = 0; qi < nb_txq; qi++) {
+ printf("rte_eth_tx_queue_setup %d %d\n",
+ pi, qi);
+ if ((numa_support) &&
+ (txring_numa[pi] != NUMA_NO_CONFIG))
+ diag = rte_eth_tx_queue_setup(pi, qi,
+ nb_txd,txring_numa[pi],
+ &(port->tx_conf));
+ else
+ diag = rte_eth_tx_queue_setup(pi, qi,
+ nb_txd,port->socket_id,
+ &(port->tx_conf));
+
+ if (diag == 0)
+ continue;
+
+ /* Fail to setup tx queue, return */
+ if (rte_atomic16_cmpset(&(port->port_status),
+ RTE_PORT_HANDLING,
+ RTE_PORT_STOPPED) == 0)
+ printf("Port %d can not be set back "
+ "to stopped\n", pi);
+ printf("Fail to configure port %d tx queues\n", pi);
+ /* try to reconfigure queues next time */
+ port->need_reconfig_queues = 1;
+ return -1;
+ }
}
for (event_type = RTE_ETH_EVENT_UNKNOWN;
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -445,6 +445,8 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,
nbufs = 0;
error = ENOSPC;
+ printf("rx_queue_setup() use_simple_rxtx=%d\n",
+ hw->use_simple_rxtx);
if (hw->use_simple_rxtx) {
for (desc_idx = 0; desc_idx < vq->vq_nentries;
desc_idx++) {
@@ -563,6 +565,8 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
vq->vq_free_thresh = tx_free_thresh;
+ printf("tx_queue_setup() use_simple_rxtx=%d\n",
+ hw->use_simple_rxtx);
if (hw->use_simple_rxtx) {
uint16_t mid_idx = vq->vq_nentries >> 1;
Compile dpdk:
cd dpdk.org
make config T=x86_64-native-linuxapp-gcc
sed -i 's,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=n,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=y,' build/.config
sed -i 's,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DRIVER=n,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_DRIVER=y,' build/.config
make -j4
Prepare environment:
mkdir -p /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
modprobe uio_pci_generic
python usertools/dpdk-devbind.py -b uio_pci_generic 0000:00:02.0
./build/app/testpmd -l 0,1 --log-level 7 -- --total-num-mbufs=16384 \
-i --port-topology=chained --disable-hw-vlan-filter \
--disable-hw-vlan-strip --txqflags=0xf01
...
Configuring Port 0 (socket 0)
rte_eth_rx_queue_setup 0 0
rx_queue_setup() use_simple_rxtx=0
rte_eth_tx_queue_setup 0 0
PMD: virtio_update_rxtx_handler(): Using simple rx/tx path
tx_queue_setup() use_simple_rxtx=1
...
Configure testpmd:
set fwd rxonly
set verbose 1
start
Without the fix, there is a segfault in virtio_recv_pkts_vec()
It works ok with the patch.
next prev parent reply other threads:[~2017-08-31 13:50 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20170831134015.1383-1-olivier.matz@6wind.com>
2017-08-31 13:40 ` [dpdk-stable] [PATCH 1/9] net/virtio: revert "do not claim to support LRO" Olivier Matz
2017-08-31 13:40 ` [dpdk-stable] [PATCH 2/9] net/virtio: revert "do not falsely claim to do IP checksum" Olivier Matz
2017-08-31 13:47 ` [dpdk-stable] [dpdk-dev] " Olivier MATZ
2017-08-31 13:40 ` [dpdk-stable] [PATCH 3/9] doc: fix description of L4 Rx checksum offload Olivier Matz
2017-08-31 13:40 ` [dpdk-stable] [PATCH 4/9] net/virtio: fix log levels in configure Olivier Matz
2017-08-31 13:40 ` [dpdk-stable] [PATCH 5/9] net/virtio: fix mbuf port for simple Rx function Olivier Matz
2017-08-31 13:48 ` [dpdk-stable] [dpdk-dev] " Olivier MATZ
2017-08-31 13:40 ` [dpdk-stable] [PATCH 6/9] net/virtio: fix queue setup consistency Olivier Matz
2017-08-31 13:49 ` Olivier MATZ [this message]
2017-08-31 13:40 ` [dpdk-stable] [PATCH 7/9] net/virtio: rationalize setting of Rx/Tx handlers Olivier Matz
2017-09-01 9:19 ` Yuanhan Liu
2017-09-01 9:52 ` Olivier MATZ
2017-09-01 12:31 ` Yuanhan Liu
2017-09-06 14:40 ` Olivier MATZ
2017-09-07 8:13 ` Yuanhan Liu
2017-08-31 13:40 ` [dpdk-stable] [PATCH 8/9] net/virtio: keep Rx handler whatever the Tx queue config Olivier Matz
2017-08-31 13:50 ` [dpdk-stable] [dpdk-dev] " Olivier MATZ
2017-09-01 9:25 ` [dpdk-stable] " Yuanhan Liu
2017-09-01 9:58 ` Olivier MATZ
2017-09-01 12:22 ` Yuanhan Liu
2017-08-31 13:40 ` [dpdk-stable] [PATCH 9/9] net/virtio: fix Rx handler when checksum is requested Olivier Matz
2017-08-31 13:51 ` [dpdk-stable] [dpdk-dev] " Olivier MATZ
[not found] ` <20170907121347.16208-1-olivier.matz@6wind.com>
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 01/10] net/virtio: revert "do not claim to support LRO" Olivier Matz
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 02/10] net/virtio: revert "do not falsely claim to do IP checksum" Olivier Matz
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 03/10] doc: fix description of L4 Rx checksum offload Olivier Matz
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 04/10] net/virtio: fix log levels in configure Olivier Matz
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 05/10] net/virtio: fix mbuf port for simple Rx function Olivier Matz
2017-09-07 12:13 ` [dpdk-stable] [PATCH v2 06/10] net/virtio: fix queue setup consistency Olivier Matz
2017-12-06 5:25 ` [dpdk-stable] [dpdk-dev] " Tiwei Bie
2017-12-07 14:14 ` Olivier MATZ
2017-12-08 2:17 ` Tiwei Bie
2018-02-01 3:14 ` Yao, Lei A
2018-02-01 8:27 ` Olivier Matz
2018-02-07 8:31 ` Xu, Qian Q
2018-02-07 22:01 ` Olivier Matz
2018-02-09 5:44 ` Wang, Zhihong
2018-02-09 8:59 ` Maxime Coquelin
2018-02-09 9:40 ` Maxime Coquelin
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=20170831134958.iprf4ikatdox54xo@neon \
--to=olivier.matz@6wind.com \
--cc=dev@dpdk.org \
--cc=maxime.coquelin@redhat.com \
--cc=stable@dpdk.org \
--cc=stephen@networkplumber.org \
--cc=yliu@fridaylinux.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).