I created a small test program that isolates where this NUMA issue is
coming from.  The problem occurs when I call
pfring_zc_create_cluster(...).  Once inside pfring_zc_create_cluster(...)
it is a black box to me.  Any thoughts on what else I could try to resolve
this issue?


$ gcc -Wall -D_GNU_SOURCE numa.c -lnuma -lpthread -lpfring -lpcap -o numa
$ sudo ./numa
check: found 4 cpu cores
check: cpu 0 -> numa node 0
check: cpu 1 -> numa node 0
check: cpu 2 -> numa node 0
check: cpu 3 -> numa node 0
check: max packet length of 'wlan0' = 1518
libnuma: Warning: node 6 not allowed
numa_sched_setaffinity_v2_int() failed; abort
: Invalid argument
set_mempolicy: Invalid argument


Here is the test program that I created.

#include <numa.h>
#include <stdio.h>
#include <unistd.h>
#include <pfring.h>
#include <pfring_zc.h>
#include <pfring_mod_sysdig.h>
#include <numa.h>
#include <pthread.h>

static int max_packet_len(char *device)
{
  pfring *ring;
  pfring_card_settings settings;

  ring = pfring_open(device, 1536, PF_RING_PROMISC |
PF_RING_ZC_NOT_REPROGRAM_RSS);
  if (ring == NULL)
  {
    return 1536;
  }

  pfring_get_card_settings(ring, &settings);
  pfring_close(ring);
  return settings.max_packet_size;
}

/**
 * gcc -Wall -D_GNU_SOURCE numa.c -lnuma -lpthread -lpfring -lpcap -o numa
 */
int main(int argc, char *args[])
{
  int i;
  int numa_id;
  int num_cpu;
  pfring_zc_cluster *zc;

  char *device = "wlan0";
  int cluster_id = 1234;
  int pkt_len;
  int meta_len = 0;
  int pkt_buffs = 4;
  char *hugepg = "/mnt/huge";

  // how many cpu?
  num_cpu = sysconf(_SC_NPROCESSORS_ONLN);
  printf("check: found %i cpu cores \n", num_cpu);

  // which numa node for each cpu?
  for(i = 0; i < num_cpu; i++)
  {
    numa_id = numa_node_of_cpu(i);
    printf("check: cpu %i -> numa node %i \n", i, numa_id);
  }

  pkt_len = max_packet_len(device);
  printf("check: max packet length of '%s' = %i \n", device, pkt_len);

  // create the cluster
  zc = pfring_zc_create_cluster(cluster_id, pkt_len, meta_len, pkt_buffs,
numa_id, hugepg);
  if (NULL == zc)
  {
    printf("error: %s: check huge table mount?\n", strerror(errno));
    return -1;
  }

  return 0;
}


On Fri, Aug 21, 2015 at 12:09 PM, Nick Allen <[email protected]> wrote:

> I have seen a few past references to issues like this on the list, but
> nothing that helps resolve this issue for me.
>
> libnuma: Warning: node 6 not allowed
> numa_sched_setaffinity_v2_int() failed; abort
> : Invalid argument
> set_mempolicy: Invalid argument
>
>
> I am seeing this issue on both a server running CentOS 6.6 (libnuma 2.0.9,
> Napatech NIC) and my development laptop running Ubuntu 15.04 (libnuma
> 2.0.10, Intel NIC).
>
> The numa_id that gets pased to 'pfring_zc_create_cluster' is 0.
>
> $ numactl --show
> policy: default
> preferred node: current
> physcpubind: 0 1 2 3
> cpubind: 0
> nodebind: 0
> membind: 0
>
>
> When I originally built PF_RING, the configure script was able to find the
> NUMA library.  Attempted against just to be sure.
>
> checking for numa_available in -lnuma... yes
> checking if libnuma is present... yes
>
>
> What am I doing wrong?  What other information can I provide?
>
> Mucho Gracias
>
>
> --
> Nick Allen <[email protected]>
>



-- 
Nick Allen <[email protected]>
_______________________________________________
Ntop-misc mailing list
[email protected]
http://listgateway.unipi.it/mailman/listinfo/ntop-misc

Reply via email to