Hi With dpdk 17.02-rc2 i40e driver doesn't load at all when memory allocation is restricted on numa node 1 (on system with more than 1 node, obviously)
[root@micro ~]# /tmp/testpmd -d /home/micro/lib/librte_pmd_i40e.so -c 0xFFFC000 -w 0000:81:00.0 -w 0000:81:00.1 -n 4 --socket-mem=0,8192 -- -i --socket-num=1 EAL: Detected 56 lcore(s) EAL: Probing VFIO support... EAL: PCI device 0000:81:00.0 on NUMA socket 1 EAL: probe driver: 8086:1572 net_i40e PMD: eth_i40e_dev_init(): FW 4.40 API 1.4 NVM 04.05.03 eetrack 80001cd8 RING: Cannot reserve memory HASH: memory allocation failed PMD: i40e_init_ethtype_filter_list(): Failed to create ethertype hash table! EAL: Error - exiting with code: 1 Cause: Requested device 0000:81:00.0 cannot be used Everything is fine with 16.11, or allowing allocations from both nodes I was able to locate the code to fix (at least, I hope so), but I don't really know if it is better to allocate from SOCKET_ID_ANY of from the exact node associated with the network device, something like dev->data->numa_node ("pseudo" patch below) --- dpdk-17.02-rc2.orig/drivers/net/i40e/i40e_ethdev.c 2017-01-30 23:47:11.000000000 +0100 +++ dpdk-17.02-rc2/drivers/net/i40e/i40e_ethdev.c 2017-02-06 21:53:37.812313120 +0100 @@ -899,6 +899,7 @@ .entries = I40E_MAX_ETHERTYPE_FILTER_NUM, .key_len = sizeof(struct i40e_ethertype_filter_input), .hash_func = rte_hash_crc, + .socket_id = SOCKET_ID_ANY, }; /* Initialize ethertype filter rule list and hash */ @@ -942,6 +943,7 @@ .entries = I40E_MAX_TUNNEL_FILTER_NUM, .key_len = sizeof(struct i40e_tunnel_filter_input), .hash_func = rte_hash_crc, + .socket_id = SOCKET_ID_ANY, }; /* Initialize tunnel filter rule list and hash */ @@ -985,6 +987,7 @@ .entries = I40E_MAX_FDIR_FILTER_NUM, .key_len = sizeof(struct rte_eth_fdir_input), .hash_func = rte_hash_crc, + .socket_id = SOCKET_ID_ANY, }; /* Initialize flow director filter rule list and hash */ Any thoughts? Thanks in advance Ivan