On 4/22/2018 12:58 PM, Qi Zhang wrote:
> Each queue has independent configure information in rte_port.
> Base on this, we are able to add new commands to configure
> different queues with different value.
>
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
<...>
> @@ -1752,30 +1753,41 @@ rxtx_config_display(void)
> nb_fwd_lcores, nb_fwd_ports);
>
> RTE_ETH_FOREACH_DEV(pid) {
> - struct rte_eth_rxconf *rx_conf = &ports[pid].rx_conf;
> - struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf;
> + struct rte_eth_rxconf *rx_conf = &ports[pid].rx_conf[0];
> + struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf[0];
>
> printf(" port %d:\n", (unsigned int)pid);
> printf(" CRC stripping %s\n",
> (ports[pid].dev_conf.rxmode.offloads &
> DEV_RX_OFFLOAD_CRC_STRIP) ?
> "enabled" : "disabled");
> - printf(" RX queues=%d - RX desc=%d - RX free threshold=%d\n",
> - nb_rxq, nb_rxd, rx_conf->rx_free_thresh);
> - printf(" RX threshold registers: pthresh=%d hthresh=%d "
> - " wthresh=%d\n",
> - rx_conf->rx_thresh.pthresh,
> - rx_conf->rx_thresh.hthresh,
> - rx_conf->rx_thresh.wthresh);
> - printf(" TX queues=%d - TX desc=%d - TX free threshold=%d\n",
> - nb_txq, nb_txd, tx_conf->tx_free_thresh);
> - printf(" TX threshold registers: pthresh=%d hthresh=%d "
> - " wthresh=%d\n",
> - tx_conf->tx_thresh.pthresh,
> - tx_conf->tx_thresh.hthresh,
> - tx_conf->tx_thresh.wthresh);
> - printf(" TX RS bit threshold=%d - TXQ offloads=0x%"PRIx64"\n",
> - tx_conf->tx_rs_thresh, tx_conf->offloads);
> + printf(" RX queues = %d\n", nb_rxq);
> + for (qid = 0; qid < nb_rxq; qid++) {
> + printf(" Queue Index = %d\n", qid);
> + printf(" RX desc=%d - RX free threshold=%d\n",
> + ports[pid].nb_rx_desc[qid],
> + rx_conf[qid].rx_free_thresh);
> + printf(" RX threshold registers: pthresh=%d hthresh=%d "
> + " wthresh=%d\n",
> + rx_conf[qid].rx_thresh.pthresh,
> + rx_conf[qid].rx_thresh.hthresh,
> + rx_conf[qid].rx_thresh.wthresh);
> + }
> + printf(" TX queues = %d\n", nb_txq);
> + for (qid = 0; qid < nb_txq; qid++) {
> + printf(" Queue Index = %d\n", qid);
> + printf(" TX desc=%d - TX free threshold=%d\n",
> + ports[pid].nb_tx_desc[qid],
> + tx_conf[qid].tx_free_thresh);
> + printf(" TX threshold registers: pthresh=%d hthresh=%d "
> + " wthresh=%d\n",
> + tx_conf[qid].tx_thresh.pthresh,
> + tx_conf[qid].tx_thresh.hthresh,
> + tx_conf[qid].tx_thresh.wthresh);
> + printf(" TX RS bit threshold=%d - TXQ offloads=0x%"PRIx64"\n",
> + tx_conf[qid].tx_rs_thresh,
> + tx_conf[qid].offloads);
> + }
This part requires rebase because of recent updates,
this was wrong to display queue specific values as single value, thanks for fixing.
@@ -2360,9 +2360,9 @@ cmd_setup_rxtx_queue_parsed(
}
ret = rte_eth_rx_queue_setup(res->portid,
res->qid,
- nb_rxd,
+ port->nb_rx_desc[res->qid],
socket_id,
- &port->rx_conf,
+ &port->rx_conf[res->qid],
mp);
if (ret)
printf("Failed to setup RX queue\n");
@@ -2373,9 +2373,9 @@ cmd_setup_rxtx_queue_parsed(
ret = rte_eth_tx_queue_setup(res->portid,
res->qid,
- nb_txd,
+ port->nb_tx_desc[res->qid],
socket_id,
- &port->tx_conf);
+ &port->tx_conf[res->qid]);
if (ret)
printf("Failed to setup TX queue\n");
}
@@ -1738,6 +1738,7 @@ void
rxtx_config_display(void)
{
portid_t pid;
+ queueid_t qid;
printf(" %s packet forwarding%s packets/burst=%d\n",
cur_fwd_eng->fwd_mode_name,
@@ -1752,30 +1753,41 @@ rxtx_config_display(void)
nb_fwd_lcores, nb_fwd_ports);
RTE_ETH_FOREACH_DEV(pid) {
- struct rte_eth_rxconf *rx_conf = &ports[pid].rx_conf;
- struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf;
+ struct rte_eth_rxconf *rx_conf = &ports[pid].rx_conf[0];
+ struct rte_eth_txconf *tx_conf = &ports[pid].tx_conf[0];
printf(" port %d:\n", (unsigned int)pid);
printf(" CRC stripping %s\n",
(ports[pid].dev_conf.rxmode.offloads &
DEV_RX_OFFLOAD_CRC_STRIP) ?
"enabled" : "disabled");
- printf(" RX queues=%d - RX desc=%d - RX free threshold=%d\n",
- nb_rxq, nb_rxd, rx_conf->rx_free_thresh);
- printf(" RX threshold registers: pthresh=%d hthresh=%d "
- " wthresh=%d\n",
- rx_conf->rx_thresh.pthresh,
- rx_conf->rx_thresh.hthresh,
- rx_conf->rx_thresh.wthresh);
- printf(" TX queues=%d - TX desc=%d - TX free threshold=%d\n",
- nb_txq, nb_txd, tx_conf->tx_free_thresh);
- printf(" TX threshold registers: pthresh=%d hthresh=%d "
- " wthresh=%d\n",
- tx_conf->tx_thresh.pthresh,
- tx_conf->tx_thresh.hthresh,
- tx_conf->tx_thresh.wthresh);
- printf(" TX RS bit threshold=%d - TXQ offloads=0x%"PRIx64"\n",
- tx_conf->tx_rs_thresh, tx_conf->offloads);
+ printf(" RX queues = %d\n", nb_rxq);
+ for (qid = 0; qid < nb_rxq; qid++) {
+ printf(" Queue Index = %d\n", qid);
+ printf(" RX desc=%d - RX free threshold=%d\n",
+ ports[pid].nb_rx_desc[qid],
+ rx_conf[qid].rx_free_thresh);
+ printf(" RX threshold registers: pthresh=%d hthresh=%d "
+ " wthresh=%d\n",
+ rx_conf[qid].rx_thresh.pthresh,
+ rx_conf[qid].rx_thresh.hthresh,
+ rx_conf[qid].rx_thresh.wthresh);
+ }
+ printf(" TX queues = %d\n", nb_txq);
+ for (qid = 0; qid < nb_txq; qid++) {
+ printf(" Queue Index = %d\n", qid);
+ printf(" TX desc=%d - TX free threshold=%d\n",
+ ports[pid].nb_tx_desc[qid],
+ tx_conf[qid].tx_free_thresh);
+ printf(" TX threshold registers: pthresh=%d hthresh=%d "
+ " wthresh=%d\n",
+ tx_conf[qid].tx_thresh.pthresh,
+ tx_conf[qid].tx_thresh.hthresh,
+ tx_conf[qid].tx_thresh.wthresh);
+ printf(" TX RS bit threshold=%d - TXQ offloads=0x%"PRIx64"\n",
+ tx_conf[qid].tx_rs_thresh,
+ tx_conf[qid].offloads);
+ }
}
}
@@ -1593,20 +1593,24 @@ start_port(portid_t pid)
}
if (port->need_reconfig_queues > 0) {
port->need_reconfig_queues = 0;
- port->tx_conf.txq_flags = ETH_TXQ_FLAGS_IGNORE;
- /* Apply Tx offloads configuration */
- port->tx_conf.offloads = port->dev_conf.txmode.offloads;
/* setup tx queues */
for (qi = 0; qi < nb_txq; qi++) {
+ port->tx_conf[qi].txq_flags =
+ ETH_TXQ_FLAGS_IGNORE;
+ /* Apply Tx offloads configuration */
+ port->tx_conf[qi].offloads =
+ port->dev_conf.txmode.offloads;
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));
+ port->nb_tx_desc[qi],
+ txring_numa[pi],
+ &(port->tx_conf[qi]));
else
diag = rte_eth_tx_queue_setup(pi, qi,
- nb_txd,port->socket_id,
- &(port->tx_conf));
+ port->nb_tx_desc[qi],
+ port->socket_id,
+ &(port->tx_conf[qi]));
if (diag == 0)
continue;
@@ -1617,15 +1621,17 @@ start_port(portid_t pid)
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);
+ printf("Fail to configure port %d tx queues\n",
+ pi);
/* try to reconfigure queues next time */
port->need_reconfig_queues = 1;
return -1;
}
- /* Apply Rx offloads configuration */
- port->rx_conf.offloads = port->dev_conf.rxmode.offloads;
- /* setup rx queues */
for (qi = 0; qi < nb_rxq; qi++) {
+ /* Apply Rx offloads configuration */
+ port->rx_conf[qi].offloads =
+ port->dev_conf.rxmode.offloads;
+ /* setup rx queues */
if ((numa_support) &&
(rxring_numa[pi] != NUMA_NO_CONFIG)) {
struct rte_mempool * mp =
@@ -1639,8 +1645,10 @@ start_port(portid_t pid)
}
diag = rte_eth_rx_queue_setup(pi, qi,
- nb_rxd,rxring_numa[pi],
- &(port->rx_conf),mp);
+ port->nb_rx_desc[pi],
+ rxring_numa[pi],
+ &(port->rx_conf[qi]),
+ mp);
} else {
struct rte_mempool *mp =
mbuf_pool_find(port->socket_id);
@@ -1652,8 +1660,10 @@ start_port(portid_t pid)
return -1;
}
diag = rte_eth_rx_queue_setup(pi, qi,
- nb_rxd,port->socket_id,
- &(port->rx_conf), mp);
+ port->nb_rx_desc[pi],
+ port->socket_id,
+ &(port->rx_conf[qi]),
+ mp);
}
if (diag == 0)
continue;
@@ -1664,7 +1674,8 @@ start_port(portid_t pid)
RTE_PORT_STOPPED) == 0)
printf("Port %d can not be set back "
"to stopped\n", pi);
- printf("Fail to configure port %d rx queues\n", pi);
+ printf("Fail to configure port %d rx queues\n",
+ pi);
/* try to reconfigure queues next time */
port->need_reconfig_queues = 1;
return -1;
@@ -2225,39 +2236,51 @@ map_port_queue_stats_mapping_registers(portid_t pi, struct rte_port *port)
static void
rxtx_port_config(struct rte_port *port)
{
- port->rx_conf = port->dev_info.default_rxconf;
- port->tx_conf = port->dev_info.default_txconf;
+ uint16_t qid;
- /* Check if any RX/TX parameters have been passed */
- if (rx_pthresh != RTE_PMD_PARAM_UNSET)
- port->rx_conf.rx_thresh.pthresh = rx_pthresh;
+ for (qid = 0; qid < nb_rxq; qid++) {
+ port->rx_conf[qid] = port->dev_info.default_rxconf;
- if (rx_hthresh != RTE_PMD_PARAM_UNSET)
- port->rx_conf.rx_thresh.hthresh = rx_hthresh;
+ /* Check if any Rx parameters have been passed */
+ if (rx_pthresh != RTE_PMD_PARAM_UNSET)
+ port->rx_conf[qid].rx_thresh.pthresh = rx_pthresh;
- if (rx_wthresh != RTE_PMD_PARAM_UNSET)
- port->rx_conf.rx_thresh.wthresh = rx_wthresh;
+ if (rx_hthresh != RTE_PMD_PARAM_UNSET)
+ port->rx_conf[qid].rx_thresh.hthresh = rx_hthresh;
- if (rx_free_thresh != RTE_PMD_PARAM_UNSET)
- port->rx_conf.rx_free_thresh = rx_free_thresh;
+ if (rx_wthresh != RTE_PMD_PARAM_UNSET)
+ port->rx_conf[qid].rx_thresh.wthresh = rx_wthresh;
- if (rx_drop_en != RTE_PMD_PARAM_UNSET)
- port->rx_conf.rx_drop_en = rx_drop_en;
+ if (rx_free_thresh != RTE_PMD_PARAM_UNSET)
+ port->rx_conf[qid].rx_free_thresh = rx_free_thresh;
- if (tx_pthresh != RTE_PMD_PARAM_UNSET)
- port->tx_conf.tx_thresh.pthresh = tx_pthresh;
+ if (rx_drop_en != RTE_PMD_PARAM_UNSET)
+ port->rx_conf[qid].rx_drop_en = rx_drop_en;
- if (tx_hthresh != RTE_PMD_PARAM_UNSET)
- port->tx_conf.tx_thresh.hthresh = tx_hthresh;
+ port->nb_rx_desc[qid] = nb_rxd;
+ }
+
+ for (qid = 0; qid < nb_txq; qid++) {
+ port->tx_conf[qid] = port->dev_info.default_txconf;
+
+ /* Check if any Tx parameters have been passed */
+ if (tx_pthresh != RTE_PMD_PARAM_UNSET)
+ port->tx_conf[qid].tx_thresh.pthresh = tx_pthresh;
- if (tx_wthresh != RTE_PMD_PARAM_UNSET)
- port->tx_conf.tx_thresh.wthresh = tx_wthresh;
+ if (tx_hthresh != RTE_PMD_PARAM_UNSET)
+ port->tx_conf[qid].tx_thresh.hthresh = tx_hthresh;
- if (tx_rs_thresh != RTE_PMD_PARAM_UNSET)
- port->tx_conf.tx_rs_thresh = tx_rs_thresh;
+ if (tx_wthresh != RTE_PMD_PARAM_UNSET)
+ port->tx_conf[qid].tx_thresh.wthresh = tx_wthresh;
- if (tx_free_thresh != RTE_PMD_PARAM_UNSET)
- port->tx_conf.tx_free_thresh = tx_free_thresh;
+ if (tx_rs_thresh != RTE_PMD_PARAM_UNSET)
+ port->tx_conf[qid].tx_rs_thresh = tx_rs_thresh;
+
+ if (tx_free_thresh != RTE_PMD_PARAM_UNSET)
+ port->tx_conf[qid].tx_free_thresh = tx_free_thresh;
+
+ port->nb_tx_desc[qid] = nb_txd;
+ }
}
void
@@ -194,8 +194,10 @@ struct rte_port {
uint8_t need_reconfig_queues; /**< need reconfiguring queues or not */
uint8_t rss_flag; /**< enable rss or not */
uint8_t dcb_flag; /**< enable dcb */
- struct rte_eth_rxconf rx_conf; /**< rx configuration */
- struct rte_eth_txconf tx_conf; /**< tx configuration */
+ uint16_t nb_rx_desc[MAX_QUEUE_ID+1]; /**< per queue rx desc number */
+ uint16_t nb_tx_desc[MAX_QUEUE_ID+1]; /**< per queue tx desc number */
+ struct rte_eth_rxconf rx_conf[MAX_QUEUE_ID+1]; /**< per queue rx configuration */
+ struct rte_eth_txconf tx_conf[MAX_QUEUE_ID+1]; /**< per queue tx configuration */
struct ether_addr *mc_addr_pool; /**< pool of multicast addrs */
uint32_t mc_addr_nb; /**< nb. of addr. in mc_addr_pool */
uint8_t slave_flag; /**< bonding slave port */