From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Peng, Yuan" Subject: Re: [PATCH v2 0/5] Support NIC reset and keep same port id Date: Thu, 29 Jun 2017 03:51:34 +0000 Message-ID: <67D543A150B29E4CAAE53918F64EDAEA373E63D7@SHSMSX103.ccr.corp.intel.com> References: <1495873329-43303-1-git-send-email-wei.dai@intel.com> <1498572438-25125-1-git-send-email-wei.dai@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Cc: "dev@dpdk.org" , "Dai, Wei" To: "Dai, Wei" , "thomas@monjalon.net" , "Lu, Wenzhuo" , "Ananyev, Konstantin" , "Zhang, Helin" , "Wu, Jingjing" Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id BBF262B96 for ; Thu, 29 Jun 2017 05:51:40 +0200 (CEST) In-Reply-To: <1498572438-25125-1-git-send-email-wei.dai@intel.com> Content-Language: en-US List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Tested-by: Peng, Yuan - Tested commit c1923afc0999b5b6f109190bc5b69b6c3d334635+the 5 patches. - OS: 4.5.5-300.fc24.x86_64 - GCC: gcc version 6.1.1 20160510 (Red Hat 6.1.1-2) (GCC) - CPU: Intel(R) Xeon(R) CPU E5-2699 v4 @ 2.20GHz - NIC: Ethernet controller [0200]: Intel Corporation 82599ES 10-Gigabit SFI= /SFP+ Network Connection [8086:10fb] (rev 01) - Default x86_64-native-linuxapp-gcc configuration - Prerequisites: - Total 1cases, 1 passed, 0 failed Steps: DUT: 1. run testpmd with ixgbe VF echo 1 >/sys/bus/pci/devices/0000:07:00.0/sriov_numvfs ip link set ens786f0 vf 0 mac 00:11:22:33:44:11 ./usertools/dpdk-devbind.py -b vfio-pci 07:10.0 ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3 -n 4 -- -i 2. testpmd > set verbose 1=20 testpmd> set fwd rxonly testpmd> start tester: scapy >>> pkt1 =3D Ether(dst=3D"00:11:22:33:44:11")/IP()/UDP()/Raw('x' * 20) >>> sendp(pkt1, iface=3D"ens786f1", count=3D1) Vf can receive the packet correctly. 3. ifconfig ens786f0 down=20 A message is shown in testmd to indicate PF reset: Port 0: Interrupt reset event 4. ifconfig ens786f0 up 5. testpmd > stop=20 6. testpmd > reset_port 0 7. testpmd> reconfig_port 0 PMD: ixgbevf_dev_configure(): VF can't disable HW CRC Strip Port 0 MAC: 00 11 22 33 44 11 Begin to forward at least 100 packets to test reconfiguration 8. tester: >>> sendp(pkt1, iface=3D"ens786f1", count=3D100) 9. Finish forwarding 100 packets to test reconfiguration testpmd> show port stats all ######################## NIC statistics for port 0 #####################= ### RX-packets: 100 RX-missed: 0 RX-bytes: 6200 RX-errors: 0 RX-nombuf: 0 TX-packets: 0 TX-errors: 0 TX-bytes: 0 Throughput (since last show) Rx-pps: 0 Tx-pps: 0 #########################################################################= ### The vf can be reconfigured successfully after pf reset. -----Original Message----- From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Dai Sent: Tuesday, June 27, 2017 10:07 PM To: thomas@monjalon.net; Lu, Wenzhuo ; Ananyev, Konst= antin ; Zhang, Helin ;= Wu, Jingjing Cc: dev@dpdk.org; Dai, Wei Subject: [dpdk-dev] [PATCH v2 0/5] Support NIC reset and keep same port id Sometimes a port have to be reset. After reset, if the port goes through PC= I remove() and then PCI probe() for restoration, its port id may be changed= and this is not expected by some customer DPDK application.=20 Normally, PCI probe() includes two parts: one is in rte_ethdev layer and th= e other is calling PMD dev_init(). PCI remove( ) release all resource alloc= ated from rte_ethdev layer in PCI probe( ) and calls PMD dev_unit( ). To keep same port id and reset the port, only dev_uninit() and dev_init( ) = in PMD can be called and keep all resources allocated from rte_ethdev layer= poart in PCI probe( ). New rte_eth_dev_reset( ) calls rte_eth_dev_stop( ), PMD dev_uninit( ) and t= hen PMD dev_init( ) to reset a port and keep same port id. And then application can go through rte_eth_dev_configure( ), rte_eth_rx_qu= eue_setup( ), rte_eth_tx_queue_setup( ) and rte_eth_dev_start( ) again to r= estore its previous settings or to reconfigure itself with different settin= gs. To test this new feature, 2 testpmd commands are introduced. The first command "reset_port port_id" calls rte_eth_dev_reset( ). The second command "reconfig_port port_id" is used to test if the port can = be reconfigured successfully. This command configure the port with the simp= lest settings include only 1 Rx queue, only 1 Tx queue, Rx mode =3D None an= d Tx mode =3D None. It check port by receving at least 100 packets and then forward these packets from itself. A typical test steps are listed as follows: For example, run "ifconfig PF-name down" will trigger a reset to its VF. 1. run testpmd with ixgbe vF 2. testpmd > set verbose 1 //to observe VF working 3. ifconfig name-of-PF d= own 4. A message is shown in testmd to indicate PF reset 5. ifconfig name-o= f-PF up 6. testpmd > stop // stop forwarding to avoid crash during reset 7.= testpmd > reset_port port_id_of_VF 8. testpmd > reconfig_port port_id_of_V= F Wei Dai (5): ethdev: add support of NIC reset net/ixgbe: add support of reset net/i40e: add support of reset app/testpmd: add command to test NIC reset app/testpmd: add command to test NIC restoration app/test-pmd/cmdline.c | 62 ++++++++++++++++++ app/test-pmd/config.c | 111 +++++++++++++++++++++++++++++= ++++ app/test-pmd/testpmd.h | 2 + drivers/net/i40e/i40e_ethdev.c | 16 +++++ drivers/net/i40e/i40e_ethdev_vf.c | 16 +++++ drivers/net/ixgbe/ixgbe_ethdev.c | 38 +++++++++++ lib/librte_ether/rte_ethdev.c | 17 +++++ lib/librte_ether/rte_ethdev.h | 12 ++++ lib/librte_ether/rte_ether_version.map | 2 +- 9 files changed, 275 insertions(+), 1 deletion(-) -- 2.7.4