[dpdk-dev] Fwd: ixgbe network card has dev_info.max_rx_queues == 0

Sergey Mironov grrwlf at gmail.com
Mon Aug 25 11:41:34 CEST 2014


Forgot to CC to all

---------- Forwarded message ----------
From: Sergey Mironov <grrwlf at gmail.com>
Date: 2014-08-25 13:40 GMT+04:00
Subject: Re: [dpdk-dev] ixgbe network card has dev_info.max_rx_queues == 0
To: Alex Markuze <alex at weka.io>


Hi. I've found more data on this issue. My machine (CB-8970) is
equipped with two ixgbe and six e1000 ports + one more e1000 port as
management interface.
I ask the DPDK to allocate 3 TX queues and 3 RX queues for each of 8
working ports, 6 * 8 = 48 queues (see the configuration code snippet
at the end of the letter)

As a result, I see the message I posted in my first letter:

  PMD: rte_eth_dev_configure: ethdev port_id=2 nb_rx_queues=3 > 0
  EAL: Error - exiting with code: 1

At the same time, if I configure only two ixgbe ports by filtering out
others with --use-device, everything works fine. It gives me the idea,
that my system has a limited resource 'number of queues' and all the
cards share it. Am I correct? Is it possible to view the total amount
of queues available for my system?

Regards,
Sergey


PS configuration code


    for (portid = 0; portid < nb_ports; portid++) {
        ret = rte_eth_dev_configure((uint8_t) portid,  // portid
                                    nb_lcores, //  nb_lcores == 3
                                    nb_lcores, // nb_lcores == 3
                                    &port_conf);
        if (ret < 0) {
            rte_exit(EXIT_FAILURE, "Cannot configure device: "
                     "err=%d, port=%u\n",
                     ret, portid);
        }

        ...
    }




2014-08-23 20:15 GMT+04:00 Alex Markuze <alex at weka.io>:
> I can onlt gues. But it is common to use memory mapped IO that is. The cpu
> can access some part of the nics memory via the pci bus just like it would
> acess its own RAM.
> So its possible these region addresses are stored in a BAR. Base address
> region.
>
> On Aug 22, 2014 10:12 AM, "Sergey Mironov" <grrwlf at gmail.com> wrote:
>>
>> Thanks, I understand that. I see in the ixgbe's code, that
>> dev_info.max_rx_queues is initialized from the hw->mac.max_rx_queues
>> value
>>
>>     dev_info->max_rx_queues = (uint16_t)hw->mac.max_rx_queues;
>>     dev_info->max_tx_queues = (uint16_t)hw->mac.max_tx_queues;
>>
>> but I can't figure out how this hw->mac is produced. Is it mapped to
>> the memory region controlled by the network adapter directly?
>>
>>
>>
>> 2014-08-21 16:52 GMT+04:00 Alex Markuze <alex at weka.io>:
>> > RX and TX Are short hand for Receive and Transmit Queues.
>> > These Queues Store the in/egress packets.
>> >
>> > Just looking at the info you've sent it tells you that max_rx_queues
>> > for this dev is 0 (Clearly something is wrong here) so the nb_rx_q
>> > which is 3 is an Invalid Value -EINVAL == -22.
>> >
>> > On Thu, Aug 21, 2014 at 3:26 PM, Sergey Mironov <grrwlf at gmail.com>
>> > wrote:
>> >> Hi. I have face a strange error on one of my network cards. Call to
>> >> rte_eth_dev_configure returns with error code -22. Increaing the
>> >> verbosity level shows the following:
>> >>
>> >>
>> >> PMD: rte_eth_dev_configure: ethdev port_id=2 nb_rx_queues=3 > 0
>> >> EAL: Error - exiting with code: 1
>> >>
>> >> here is the snippet of code which returns the error
>> >>
>> >>
>> >> ./lib/librte_ether/rte_ethdev.c : 513
>> >>
>> >>     (*dev->dev_ops->dev_infos_get)(dev, &dev_info);
>> >>     if (nb_rx_q > dev_info.max_rx_queues) {
>> >>         PMD_DEBUG_TRACE("ethdev port_id=%d nb_rx_queues=%d > %d\n",
>> >>                 port_id, nb_rx_q, dev_info.max_rx_queues);
>> >>         return (-EINVAL);
>> >>     }
>> >>
>> >> What does this error means (what is rx queues of an adapter?) What may
>> >> cause such a problem? I am using dpdk 1.5.1r1.
>> >>
>> >> Thanks in advance,
>> >> Sergey


More information about the dev mailing list