From: Thomas Monjalon <thomas.monjalon@6wind.com>
To: "Jiajia, SunX" <sunx.jiajia@intel.com>
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-bulk alloc mode setup
Date: Fri, 20 Mar 2015 22:45:50 +0100 [thread overview]
Message-ID: <11895300.1p8srIVla4@xps13> (raw)
In-Reply-To: <F21F274FCF2C0948830A3ED0034529772D3F50@SHSMSX104.ccr.corp.intel.com>
2015-03-20 06:50, Jiajia, SunX:
> Tested-by: Jiajia, SunX <sunx.jiajia@intel.com>
> - Tested Commit: fe4810a01e57645ad92577d628f562791408ce21
This commit id is related to a PDF doc change.
> - OS: Fedora20 3.11.10-301.fc20.x86_64
> - GCC: gcc version 4.8.3
> - CPU: Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz
> - NIC: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection [8086:10fb]
> - Target x86_64-native-linuxapp-gcc
> - Total 22 cases, 22 passed, 0 failed
It seems this test is related to bonding, not ixgbe buffer overrun in
non-bulk alloc mode.
> TOPO:
> * Connections ports between tester/ixia and DUT
> - TESTER(Or IXIA)-------DUT
> - portA------------------port0
> - portB------------------port1
> - portC------------------port2
> - portD------------------port3
>
> Test Setup#1 for Functional test
> ================================
>
> Tester has 4 ports(portA--portD), and DUT has 4 ports(port0--port3), then connect portA to port0, portB to port1, portC to port2, portD to port3.
>
>
>
> - Case: Basic bonding--Create bonded devices and slaves
> Description:
> Use Setup#1.
> Create bonded device and add some ports as salve of bonded device,
> Then removed slaves or added slaves or change the bonding primary slave
> Or change bonding mode and so on.
> Expected test result:
> Verify the basic functions are normal.
>
> - Case: Basic bonding--MAC Address Test
> Description:
> Use Setup#1.
> Create bonded device and add some ports as slaves of bonded device,
> Check that the changes of the bonded device and slave MAC
> Expected test result:
> Verify the behavior of bonded device and slave according to the mode.
>
> - Case: Basic bonding--Device Promiscuous Mode Test
> Description:
> Use Setup#1.
> Create bonded device and add some ports as slaves of bonded device,
> Set promiscuous mode on or off, then send packets to the bonded device
> Or slaves.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves according to the mode.
>
> - Case: Mode 0(Round Robin) TX/RX test
> Description:
> Use Setup#1.
> Create bonded device with mode 0 and add 3 ports as slaves of bonded device,
> Forward packets between bonded device and unbounded device, start to forward,
> And send packets to unbound device or slaves.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 0.
>
> - Case: Mode 0(Round Robin) Bring one slave link down
> Description:
> Use Setup#1.
> Create bonded device with mode 0 and add 3 ports as slaves of bonded device,
> Forward packets between bonded device and unbounded device, start to forward,
> Bring the link on either port 0, 1 or 2 down. And send packets to unbound
> device or slaves.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 0.
>
> - Case: Mode 0(Round Robin) Bring all slave links down
> Description:
> Use Setup#1.
> Create bonded device with mode 0 and add 3 ports as slaves of bonded device,
> Forward packets between bonded device and unbounded device, start to forward,
> Bring the links down on all bonded ports. And send packets to unbound
> device or slaves.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 0.
>
> - Case: Mode 1(Active Backup) TX/RX Test
> Description:
> Use Setup#1.
> Create bonded device with mode 1 and add 3 ports as slaves of bonded device,
> Forward packets between bonded device and unbounded device, start to forward,
> And send packets to unbound device or slaves.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 1.
>
> - Case: Mode 1(Active Backup) Change active slave, RX/TX test
> Description:
> Use Setup#1.
> Continuing from previous test case.Change the active slave port from port0
> to port1.Verify that the bonded device's MAC has changed to slave1's MAC.
>
> testpmd> set bonding primary 1 4
>
> Repeat the transmission and reception(TX/RX) test verify that data is now
> transmitted and received through the new active slave and no longer through
> port0
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 1.
>
> - Case: Mode 1(Active Backup) Link up/down active eth dev
> Description:
> Use Setup#1.
>
> Bring link between port A and port0 down. If tester is ixia, can use
> IxExplorer to set the "Simulate Cable Disconnect" at the port property.
> Verify that the active slave has been changed from port0. Repeat the
> transmission and reception test verify that data is now transmitted and
> received through the new active slave and no longer through port0
>
> Bring port0 to link down at the remote end.Verify the active slave has been changed from port0.
> send 100 packets to port3.
>
> testpmd> show port stats 4----(Verify port3 have 100 rx packets,meanwhile
> port4 have 100 tx packets,the current primary port have 100 tx packets,and port0
> doesn`t have any packet)
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 1.
>
> - Case: Mode 1(Active Backup) Bring all slave links down
> Description:
> Use Setup#1.
> Bring all slave ports of bonded port down.
> Verify that bonded callback for link down is called and no active slaves.
> Verify that data cannot be sent or received through bonded port. Send 100 packets
> to port3 and verify that bonded port can't TX 100 packets.
>
> Bring port 0-2 to link down at the remote end. Verify port4 has been link down and has no active slave.
> Send 100 rx packets to port3.
>
> testpmd> show port stats 4----(Verify port3 have 100 rx packets,meanwhile
> port4 doesn`t have any packet)
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 1.
>
> - Case: Mode 2(Balance XOR) TX Load Balance test
> Description:
> Use Setup#1.
> Bonded port will activate each slave eth dev based on the following hash function:
>
> ((dst_mac XOR src_mac) % (number of slave ports))
>
> Send 300 packets from IXIA port D to non-bonded port(port3),and verify these packets
> will be forwarded to bonded device. The bonded device will transimit these packets to all slaves.
> Verify that each slave receive correct number of packets according to the policy. The total number
> of packets which received by slave should be equal as 300 packets.
>
> Create 3 streams in the IXIA,which streams source MAC are 00:00:03:00:0F:00,
> 00:00:03:00:0F:01,00:00:03:00:0F:02 respectively (make sure generate different value by
> the policy ((dst_mac XOR src_mac) % (number of slave ports)) ) and dest MAC all is
> 90:E2:BA:4A:54:80(this value should been your unbonded port address). Respectively
> send 100 packets to port3 by the 3 streams.
>
> testpmd> show port stats all----(Verify port3 have 300 rx packets,
> port4 have 300 tx packets,and port 0-2 have 100 tx packets respectively)
>
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 2.
>
> - Case: Mode 2(Balance XOR) TX Load Balance Link down
> Description:
> Use Setup#1.
> ring link down of one slave.
> Send 300 packets from non-bonded port(port3), and verify these
> packets will be forwarded to bonded device.
> Verify that each active slave receive correct number of packets
> (according to the mode policy), and the down slave will not receive packets.
> Link down slave 0 at the remote end.Create 3 streams in the IXIA like case13.
> Then respectively send 100 packets to port3 by the 3 streams.
>
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 2.
>
> - Case: Mode 2(Balance XOR) Bring all slave links down
> Description:
> Use Setup#1.
> Bring all slave links down.
> Verify that bonded callback for link down is called.
> Verify no packet can be sent.
>
> Bring all slaves to link down at the remote end.Create
> 3 streams in the IXIA like case13.Then respectively send 100 packets
> to port3 by the 3 streams.
>
> testpmd> show port info 4----(Verify bonding port has been linked down)
> testpmd> show port stats all----(Verify port3 have 300 rx packets,meanwhile
> port 0,1,2 and 4 don`t have any packet)
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 2.
>
>
> - Case: Mode 2(Balance XOR) Layer 3+4 forwarding
> Description:
> Use Setup#1.
> Use "xmit_hash_policy()" to change to this forwarding mode
> Create a stream of traffic which will exercise all slave ports using the transmit policy
>
> ((SRC_PORT XOR DST_PORT) XOR ((SRC_IP XOR DST_IP) AND 0xffff) % # of Slaves
>
> Transmit data through bonded device, verify TX packet count for each slave port is as expected
>
> Create 3 streams on a port which is mapped with unbonded port 3 at the IXIA end.
> And set different IP by the transmit policy.Then send 100 packets on each stream.
>
> testpmd> show port stats all----(Verify port3 have 300 rx packets,
> meanwhile port4 have 300 rx packets, port 0-2 have 100 tx packets respectively)
>
> Add Vlan tag in the previouse 3 streams. Everthing else remains the same.
> Then send 100 packets on each stream. Verify the packet statics is the same as above.
>
> testpmd> show port stats all----(Verify port3
> have 300 rx packets,meanwhile port4 have 300 rx packets,port 0-2 have 100 tx packets respecitvely)
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 2.
>
> - Case: Mode 2(Balance XOR) RX test
> Description:
> Use Setup#1.
> Send 100 packets to each bonded slaves(port0,1,2)
> Verify that each slave receives 100 packets and the bonded device receive a total 300 packets.
> Verify that the bonded device forwards 300 packets to the non-bonded port(port4).
>
> Send 100 packets to port0,1,2 respectively.
>
> testpmd> show port stats all----(Verify port0,1,2 have 100 tx packets respectively
> and port4 have 300 rx packets,and port3 have 300 tx packets)
>
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 2.
>
> - Case: Mode 3(Broadcast) TX/RX Test
> Description:
> Use Setup#1.
> Add ports 0-2 as slave devices to the bonded port 4. Make all slaves
> to be active slaves on bonded device.
>
> RX: Send a packet stream(100 packets) from port A on the traffic
> generator to be forwarded through the bonded port4 to port3.
> Verify the sum of the packets transmitted from the traffic generator
> portA is equal the total received packets on port0, port4 and portD(Traffic generator).
>
> testpmd> show port stats all---(Verify port0 receive 100 packets,
> and port4 receive 100 packets, and port3 transmit 100 packets)
>
> TX: Send a packet stream(100 packets) from portD on the traffic generator
> to be forwarded through port3 to the bonded port4. Verify the sum of
> the packets(100packets) transmitted from the traffic generator port is equal the total
> received packets on port4, portA and transmitted to port0.
>
> testpmd> show port stats all---(Verify port3 RX 100 packets,
> and port0,1,2 TX 100 packets,port4 has 300 TX packets)
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 3.
>
>
> - Case: Mode 3(Broadcast) Bring one slave link down
> Description:
> Use Setup#1.
> Bring one slave port link down. Send 100 packets through portD to port3,
> then port3 forwards to bondede device(port4), verify that the bonded device
> and other slaves TX the correct number of packets(100 packets for each port).
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 3.
>
> - Case: Mode 3(Broadcast) Bring all slave links down
> Description:
> Use Setup#1.
> Bring all slave ports of bonded port down
> Verify that bonded callback for link down is called
> Verify that data cannot be sent or received through bonded port.
> Expected test result:
> Verify the RX/TX status of bonded device and slaves in mode 3.
>
> - Case: Mode 5(Transmit load balance) basic test
> ============================================================================
>
> Use Setup#1
>
> Create bonded device. Add first slave - port 0. Verify default bonded device has default mode 5.
> Verify bonded device MAC address is that of primary slave. Add another slaves port 1 and 2 to
> the bonded device. Verify that their MAC are different.
>
> Bring the primary slave down. Verify if bonding interface reconfigured itself. The next port
> (in this scenario port 1) should became a primary one but the MAC should not be changed - should
> still be the MAC of port 0.
>
> Bring a slave of bonding device down. Verify if bonding interface reconfigured itself.
>
> Bring the portA, portB and portC down. Verify the bonded device will link down.
>
> Set bonded device promiscuous mode to be off. Verify only the promiscuous state of primary
> interface will be off.
>
>
> - Case: Mode 5(Transmit load balance) TX/RX test
> ============================================================================
>
> Use Setup#1
>
> Create a bonded device(port4 in this scenario). Add port 0-2 as slaves of bonding port4. Make
> packets to transmit between port3 and port4. Then start to forward streams.
>
> TX: Prepare a packet stream which will send packets in 5 minutes. Send this stream from portD
> to port3. Verify that port3 will receive all packets---no missed packets and no error packets.
> Port 0-2 transmitting packets will be represented as packet0, packet1 and packet2 respectively
> and their average packets will be represented as mean. Then verify port 0-2 will meet the situation:
> mean = (packet0 + packet1 + packet2)/3, packet0, packet1 and packet2 will be higher than 90% of mean
> and lower than 110% of mean. Then the test of port0, port1 and port2 balancing are finished positive.
>
> RX: A continuation of TX testing setup. Prepare 3 packet streams and each stream has 100 packets.
> Respectively, send these streams from portA, portB and portC. Verify only the primary slave port0 will
> receive 100 packets, and port3 will transmit 100 packets.
>
>
> - Case: Mode 5(Transmit load balance) Bring one slave link down
> ============================================================================
>
> Use Setup#1
>
> Create a bonded device(port4 in this scenario). Add port0, port1 and port2 as slaves of bonding port4.
> Make packets to transmit between port3 and port4. Then start to forward streams.
>
> TX: Prepare a packet stream which will send packets in 5 minutes. Bringing port0 link down in the remote
> end. Send this stream from portD to port3. After the time of 5 minutes is out, verify that port3 will receive
> all packets---no missed packets and no error packets. Port 1-2 transmitting packets will be represented as
> packet1 and packet2 respectively and their average packets will be represented as mean. Then verify port1 and
> port2 will meet the situation:
> mean = (packet1 + packet2)/2, packet1 and packet2 will be higher than 90% of mean and lower than 110% of mean.
> Then the test of port1 and port2 balancing are finished positive.
>
> RX: Prepare 3 packet streams and each stream has 100 packets. Respectively, send these streams from portA, portB
> and portC. Verify the primary port(port0 this scenario) will receive 100 packets, and port1 and port2 will receive
> nothing, and port3 will transmit 100 packets.
>
>
> - Case: Mode 5(Transmit load balance) Bring all slaves link down
> =============================================================================
>
> Use Setup#1
>
> First, set the same setup as case 30. Second, bring all slaves link down.
>
> TX: Prepare 1 packet stream which will have 300 packets. Send this stream from portD to port3. Verify port0,
> port1 and port2 will transmit nothing.
>
> RX: Prepare 3 packet streams and each stream has 100 packets. Respectively, send these streams from portA,
> portB and portC. Verify port0, port1 and port2 will receive nothing.
>
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Pawel Wodkowski
> > Sent: Friday, March 20, 2015 12:09 AM
> > To: dev@dpdk.org
> > Cc: Wodkowski, PawelX
> > Subject: [dpdk-dev] [PATCH] ixgbe: fix buffer overrun bug in non-bulk
> > alloc mode setup
> >
> > From: Pawel Wodkowski <pawelx.wdkowski@intel.com>
> >
> > When bulk alloc is enabled at compile time but preconditions for
> > it are not met at runtime the ixgbe_reset_rx_queue() function
> > overrides rxq->sw_ring not allocated elements.
> >
> > Fixes: 01fa1d6 ("ixgbe: unify Rx setup")
> > Signed-off-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
> > ---
> > lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 4 ++--
> > 1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c
> > b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c
> > index 42f0aa5..dddc12f 100644
> > --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c
> > +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c
> > @@ -2111,8 +2111,8 @@ ixgbe_reset_rx_queue(struct ixgbe_hw *hw, struct
> > ixgbe_rx_queue *rxq)
> > * entries is always allocated
> > */
> > memset(&rxq->fake_mbuf, 0x0, sizeof(rxq->fake_mbuf));
> > - for (i = 0; i < RTE_PMD_IXGBE_RX_MAX_BURST; ++i) {
> > - rxq->sw_ring[rxq->nb_rx_desc + i].mbuf = &rxq->fake_mbuf;
> > + for (i = rxq->nb_rx_desc; i < len; ++i) {
> > + rxq->sw_ring[i].mbuf = &rxq->fake_mbuf;
> > }
> >
> > rxq->rx_nb_avail = 0;
> > --
> > 1.9.1
>
next prev parent reply other threads:[~2015-03-20 21:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-19 16:09 Pawel Wodkowski
2015-03-19 17:02 ` De Lara Guarch, Pablo
2015-03-19 19:42 ` Ananyev, Konstantin
2015-03-20 21:46 ` Thomas Monjalon
2015-03-20 6:50 ` Jiajia, SunX
2015-03-20 21:45 ` Thomas Monjalon [this message]
2015-03-23 2:10 ` Jiajia, SunX
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=11895300.1p8srIVla4@xps13 \
--to=thomas.monjalon@6wind.com \
--cc=dev@dpdk.org \
--cc=sunx.jiajia@intel.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 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).