From patchwork Thu May 7 13:00:43 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ouyang Changchun X-Patchwork-Id: 4645 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 1CE6F5A17; Thu, 7 May 2015 15:01:21 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 400025697 for ; Thu, 7 May 2015 15:01:17 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 07 May 2015 06:01:10 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,384,1427785200"; d="scan'208";a="567755565" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by orsmga003.jf.intel.com with ESMTP; 07 May 2015 06:01:07 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id t47D143M004553; Thu, 7 May 2015 21:01:04 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id t47D11ko027995; Thu, 7 May 2015 21:01:03 +0800 Received: (from couyang@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id t47D11El027991; Thu, 7 May 2015 21:01:01 +0800 From: Ouyang Changchun To: dev@dpdk.org Date: Thu, 7 May 2015 21:00:43 +0800 Message-Id: <1431003645-27889-5-git-send-email-changchun.ouyang@intel.com> X-Mailer: git-send-email 1.7.12.2 In-Reply-To: <1431003645-27889-1-git-send-email-changchun.ouyang@intel.com> References: <1431003645-27889-1-git-send-email-changchun.ouyang@intel.com> Subject: [dpdk-dev] [RFC PATCH 4/6] vhost: Add new command line option: rxq X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Sample vhost need know the queue number user want to enable for each virtio device, so add the new option '--rxq' into it. Signed-off-by: Changchun Ouyang --- examples/vhost/main.c | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/examples/vhost/main.c b/examples/vhost/main.c index 87dfc67..6a38b42 100644 --- a/examples/vhost/main.c +++ b/examples/vhost/main.c @@ -164,6 +164,9 @@ static int mergeable; /* Do vlan strip on host, enabled on default */ static uint32_t vlan_strip = 1; +/* Rx queue number per virtio device */ +static uint32_t rxq = 1; + /* number of descriptors to apply*/ static uint32_t num_rx_descriptor = RTE_TEST_RX_DESC_DEFAULT_ZCP; static uint32_t num_tx_descriptor = RTE_TEST_TX_DESC_DEFAULT_ZCP; @@ -409,8 +412,14 @@ port_init(uint8_t port) txconf->tx_deferred_start = 1; } - /*configure the number of supported virtio devices based on VMDQ limits */ - num_devices = dev_info.max_vmdq_pools; + /* Configure the virtio devices num based on VMDQ limits */ + switch (rxq) { + case 1: + case 2: num_devices = dev_info.max_vmdq_pools; + break; + case 4: num_devices = dev_info.max_vmdq_pools / 2; + break; + } if (zero_copy) { rx_ring_size = num_rx_descriptor; @@ -432,7 +441,7 @@ port_init(uint8_t port) return retval; /* NIC queues are divided into pf queues and vmdq queues. */ num_pf_queues = dev_info.max_rx_queues - dev_info.vmdq_queue_num; - queues_per_pool = dev_info.vmdq_queue_num / dev_info.max_vmdq_pools; + queues_per_pool = dev_info.vmdq_queue_num / num_devices; num_vmdq_queues = num_devices * queues_per_pool; num_queues = num_pf_queues + num_vmdq_queues; vmdq_queue_base = dev_info.vmdq_queue_base; @@ -577,7 +586,8 @@ us_vhost_usage(const char *prgname) " --rx-desc-num [0-N]: the number of descriptors on rx, " "used only when zero copy is enabled.\n" " --tx-desc-num [0-N]: the number of descriptors on tx, " - "used only when zero copy is enabled.\n", + "used only when zero copy is enabled.\n" + " --rxq [1-4]: rx queue number for each vhost device\n", prgname); } @@ -603,6 +613,7 @@ us_vhost_parse_args(int argc, char **argv) {"zero-copy", required_argument, NULL, 0}, {"rx-desc-num", required_argument, NULL, 0}, {"tx-desc-num", required_argument, NULL, 0}, + {"rxq", required_argument, NULL, 0}, {NULL, 0, 0, 0}, }; @@ -779,6 +790,20 @@ us_vhost_parse_args(int argc, char **argv) } } + /* Specify the Rx queue number for each vhost dev. */ + if (!strncmp(long_option[option_index].name, + "rxq", MAX_LONG_OPT_SZ)) { + ret = parse_num_opt(optarg, 4); + if ((ret == -1) || (!POWEROF2(ret))) { + RTE_LOG(INFO, VHOST_CONFIG, + "Invalid argument for rxq [1,2,4]," + "power of 2 required.\n"); + us_vhost_usage(prgname); + return -1; + } else { + rxq = ret; + } + } break; /* Invalid option - print options. */ @@ -814,6 +839,19 @@ us_vhost_parse_args(int argc, char **argv) return -1; } + if (rxq > 1) { + vmdq_conf_default.rxmode.mq_mode = ETH_MQ_RX_VMDQ_RSS; + vmdq_conf_default.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP | + ETH_RSS_UDP | ETH_RSS_TCP | ETH_RSS_SCTP; + } + + if ((zero_copy == 1) && (rxq > 1)) { + RTE_LOG(INFO, VHOST_PORT, + "Vhost zero copy doesn't support mq mode," + "please specify '--rxq 1' to disable it.\n"); + return -1; + } + return 0; }