From: Matthew Hall <mhall@mhcomputing.net>
To: dev@dpdk.org
Subject: Re: [dpdk-dev] Possible bug in eal_pci pci_scan_one
Date: Mon, 13 Oct 2014 22:47:12 -0700 [thread overview]
Message-ID: <20141014054711.GB16919@mhcomputing.net> (raw)
In-Reply-To: <20141006091344.GA14759@mhcomputing.net>
Hi,
Did anybody get a chance to look what might be going on in this weird NUMA
bug? I could use some help to understand how you're supposed to make code that
will work right on both NUMA and non-NUMA. Otherwise it's hard to make a
bulletproof DPDK based app that will be able to reliably init on single
socket, dual socket non-NUMA, and dual socket NUMA boxes.
Thanks,
Matthew.
On Mon, Oct 06, 2014 at 02:13:44AM -0700, Matthew Hall wrote:
> Hi Guys,
>
> I'm doing my development on kind of a cheap machine with no NUMA support...
> but several years ago I used DPDK to build a NUMA box that could do 40 gbits
> bidirectional L4-L7 stateful traffic replay.
>
> So given the past experiences I had before, I wanted to clean the code up so
> it'd work well if some crazy guy tried my code on one of these huge boxes,
> too, but then I ran into some weird issues.
>
> 1) When I call rte_eth_dev_socket_id() I get back -1. But the call can return
> -1 if the port_id is bogus or if pci_scan_one didn't get a numa_node (because
> you're on a non-NUMA box for example).
>
> int rte_eth_dev_socket_id(uint8_t port_id)
> {
> if (port_id >= nb_ports)
> return -1;
> return rte_eth_devices[port_id].pci_dev->numa_node;
> }
>
> So you couldn't tell the different between non-NUMA or a bad port value, etc.
>
> 2) The code's behavior and comments disagree with one another. In the
> pci_scan_one function, there's this code:
>
> /* get numa node */
> snprintf(filename, sizeof(filename), "%s/numa_node",
> dirname);
> if (access(filename, R_OK) != 0) {
> /* if no NUMA support just set node to 0 */
> dev->numa_node = -1;
> } else {
> if (eal_parse_sysfs_value(filename, &tmp) < 0) {
> free(dev);
> return -1;
> }
> dev->numa_node = tmp;
> }
>
> It says, just use NUMA node 0 if there is no NUMA support. But then proceeds
> to set the value to -1 in disagreement with the comment, and also stomping on
> the other meaning for -1 in the higher function rte_eth_dev_socket_id.
>
> 3) In conclusion, it seems like some stuff is missing... first there needs to
> be a function that will tell you the number of NUMA nodes present on the box
> so you can create the right number of mbuf_pools, but I couldn't find that function.
>
> Then if you have the function, you can do some magic and shuffle the NICs
> around to get them hooked to a core on the same NUMA, and the mbuf_pool on the
> same NUMA.
>
> When NUMA is not present, can we return 0 instead of -1, or return a specific
> error code that the client can use to know he should just use Socket 0? Right
> now I can't tell apart any potential errors or weird values from correct
> values.
>
> 4) I'm willing to help make and test some patches... but first I want to
> understand what is happening with these funny functions before doing things
> blindly.
>
> Thanks,
> Matthew.
next prev parent reply other threads:[~2014-10-14 5:40 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-06 9:13 Matthew Hall
2014-10-14 5:47 ` Matthew Hall [this message]
2014-10-23 0:44 ` Matthew Hall
2014-10-24 13:06 ` Stephen Hemminger
2014-10-24 19:03 ` Matthew Hall
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=20141014054711.GB16919@mhcomputing.net \
--to=mhall@mhcomputing.net \
--cc=dev@dpdk.org \
/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).