aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2017-10-18 14:00:23 +0300
committerMaxim Uvarov <maxim.uvarov@linaro.org>2017-10-25 10:00:14 +0300
commit82419a31e6d1846e0676edfa7fb511a23098f5a9 (patch)
tree56fdff379902f3d564653612245bc8dd4aa5cbb6
parentc0aeacf23dddfb7feae47fef6e4d10d6bdb9c812 (diff)
linux-gen: dpdk: bump target dpdk version to 17.08
Changes: - Function rte_set_log_level() is now deprecated. Replace it with rte_log_set_global_level(). - New dependency added to libnuma. - Pcap-based virtual devices are renamed to net_pcap. - DPDK pktio devices cannot be restarted after calling rte_eth_dev_close(). Move rte_eth_dev_close() calls to global terminate from odp_pktio_close(). Signed-off-by: Matias Elo <matias.elo@nokia.com> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
-rw-r--r--.travis.yml3
-rw-r--r--DEPENDENCIES6
-rw-r--r--platform/linux-generic/m4/odp_dpdk.m42
-rw-r--r--platform/linux-generic/pktio/dpdk.c48
-rwxr-xr-xplatform/linux-generic/test/validation/api/pktio/pktio_run_dpdk.sh2
-rwxr-xr-xscripts/build-pktio-dpdk8
6 files changed, 51 insertions, 18 deletions
diff --git a/.travis.yml b/.travis.yml
index d8da542c7..2d3971718 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,6 +41,7 @@ addons:
- clang-3.8
- automake autoconf libtool libssl-dev graphviz mscgen
- libpcap-dev
+ - libnuma-dev
# coverity_scan:
# project:
# name: "$TRAVIS_REPO_SLUG"
@@ -150,7 +151,7 @@ install:
- gem install asciidoctor
# DPDK pktio. Note that cache must be purged if dpdk version changes.
- - DPDK_VERS="17.02"
+ - DPDK_VERS="17.08"
- |
CACHED_DPDK_VERS=`fgrep Version dpdk/pkg/dpdk.spec | cut -d " " -f 2`
if [ "${CACHED_DPDK_VERS}" != "${DPDK_VERS}" ]; then
diff --git a/DEPENDENCIES b/DEPENDENCIES
index e309b3391..68c7b8be5 100644
--- a/DEPENDENCIES
+++ b/DEPENDENCIES
@@ -160,13 +160,17 @@ Prerequisites for building the OpenDataPlane (ODP) API
Use DPDK for ODP packet I/O.
+ DPDK pktio adds a depency to NUMA library.
+ # Debian/Ubuntu
+ $ sudo apt-get install libnuma-dev
+
Note: only packet I/O is accelerated with DPDK. Use
https://git.linaro.org/lng/odp-dpdk.git
for fully accelerated odp dpdk platform.
3.4.1 Building DPDK and ODP with DPDK pktio support
- DPDK packet I/O has been tested to work with DPDK v17.02.
+ DPDK packet I/O has been tested to work with DPDK v17.08.
Follow steps in ./scripts/build-pktio-dpdk
diff --git a/platform/linux-generic/m4/odp_dpdk.m4 b/platform/linux-generic/m4/odp_dpdk.m4
index 9d90bbabd..1e8fa2de9 100644
--- a/platform/linux-generic/m4/odp_dpdk.m4
+++ b/platform/linux-generic/m4/odp_dpdk.m4
@@ -52,7 +52,7 @@ then
AC_DEFINE_UNQUOTED([ODP_DPDK_ZERO_COPY], [$zero_copy],
[Define to 1 to enable DPDK zero copy support])
- DPDK_LIBS="-L$DPDK_PATH/lib -ldpdk -lpthread -ldl -lpcap -lm"
+ DPDK_LIBS="-L$DPDK_PATH/lib -ldpdk -lpthread -ldl -lpcap -lm -lnuma"
AC_SUBST([DPDK_CPPFLAGS])
AC_SUBST([DPDK_LIBS])
AC_SUBST([DPDK_PMDS])
diff --git a/platform/linux-generic/pktio/dpdk.c b/platform/linux-generic/pktio/dpdk.c
index 931cc711c..de9295c41 100644
--- a/platform/linux-generic/pktio/dpdk.c
+++ b/platform/linux-generic/pktio/dpdk.c
@@ -924,12 +924,6 @@ static int dpdk_close(pktio_entry_t *pktio_entry)
rte_pktmbuf_free(pkt_dpdk->rx_cache[i].s.pkt[idx++]);
}
- if (pktio_entry->s.state != PKTIO_STATE_OPENED)
- rte_eth_dev_close(pkt_dpdk->port_id);
-
- if (!ODP_DPDK_ZERO_COPY)
- rte_mempool_free(pkt_dpdk->pkt_pool);
-
return 0;
}
@@ -1016,7 +1010,7 @@ static int dpdk_pktio_init(void)
}
ODP_DBG("rte_eal_init OK\n");
- rte_set_log_level(RTE_LOG_WARNING);
+ rte_log_set_global_level(RTE_LOG_WARNING);
i = pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t),
&original_cpuset);
@@ -1059,6 +1053,28 @@ static int dpdk_pktio_init_local(void)
return 0;
}
+static void dpdk_mempool_free(struct rte_mempool *mp, void *arg ODP_UNUSED)
+{
+ rte_mempool_free(mp);
+}
+
+static int dpdk_pktio_term(void)
+{
+ uint8_t port_id;
+
+ if (!dpdk_initialized)
+ return 0;
+
+ RTE_ETH_FOREACH_DEV(port_id) {
+ rte_eth_dev_close(port_id);
+ }
+
+ if (!ODP_DPDK_ZERO_COPY)
+ rte_mempool_walk(dpdk_mempool_free, NULL);
+
+ return 0;
+}
+
static int dpdk_input_queues_config(pktio_entry_t *pktio_entry,
const odp_pktin_queue_param_t *p)
{
@@ -1244,11 +1260,17 @@ static int dpdk_open(odp_pktio_t id ODP_UNUSED,
pkt_pool = pool_create(pool_entry);
} else {
snprintf(pool_name, sizeof(pool_name), "pktpool_%s", netdev);
- pkt_pool = rte_pktmbuf_pool_create(pool_name,
- DPDK_NB_MBUF,
- DPDK_MEMPOOL_CACHE_SIZE, 0,
- DPDK_MBUF_BUF_SIZE,
- rte_socket_id());
+ /* Check if the pool exists already */
+ pkt_pool = rte_mempool_lookup(pool_name);
+ if (pkt_pool == NULL) {
+ unsigned cache_size = DPDK_MEMPOOL_CACHE_SIZE;
+
+ pkt_pool = rte_pktmbuf_pool_create(pool_name,
+ DPDK_NB_MBUF,
+ cache_size, 0,
+ DPDK_MBUF_BUF_SIZE,
+ rte_socket_id());
+ }
}
if (pkt_pool == NULL) {
ODP_ERR("Cannot init mbuf packet pool\n");
@@ -1557,7 +1579,7 @@ const pktio_if_ops_t dpdk_pktio_ops = {
.name = "dpdk",
.init_global = dpdk_pktio_init_global,
.init_local = dpdk_pktio_init_local,
- .term = NULL,
+ .term = dpdk_pktio_term,
.open = dpdk_open,
.close = dpdk_close,
.start = dpdk_start,
diff --git a/platform/linux-generic/test/validation/api/pktio/pktio_run_dpdk.sh b/platform/linux-generic/test/validation/api/pktio/pktio_run_dpdk.sh
index 14759142d..24194cbc9 100755
--- a/platform/linux-generic/test/validation/api/pktio/pktio_run_dpdk.sh
+++ b/platform/linux-generic/test/validation/api/pktio/pktio_run_dpdk.sh
@@ -74,7 +74,7 @@ run()
if [ "$ODP_PKTIO_IF0" = "" ]; then
setup_pktio_env clean
- export ODP_PKTIO_DPDK_PARAMS="--no-pci --vdev eth_pcap0,iface=$IF0 --vdev eth_pcap1,iface=$IF1"
+ export ODP_PKTIO_DPDK_PARAMS="--no-pci --vdev net_pcap0,iface=$IF0 --vdev net_pcap1,iface=$IF1"
export ODP_PKTIO_IF0=0
export ODP_PKTIO_IF1=1
fi
diff --git a/scripts/build-pktio-dpdk b/scripts/build-pktio-dpdk
index 6c6830ac0..97916c1e1 100755
--- a/scripts/build-pktio-dpdk
+++ b/scripts/build-pktio-dpdk
@@ -10,7 +10,13 @@ if [ "$?" != "0" ]; then
echo "Error: pcap is not installed. You may need to install libpcap-dev"
fi
-git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v17.02 http://dpdk.org/git/dpdk dpdk
+echo '#include "numa.h"' | cpp -H -o /dev/null 2>&1
+if [ "$?" != "0" ]; then
+ echo "Error: NUMA library is not installed. You need to install libnuma-dev"
+ exit 1
+fi
+
+git -c advice.detachedHead=false clone -q --depth=1 --single-branch --branch=v17.08 http://dpdk.org/git/dpdk dpdk
pushd dpdk
git log --oneline --decorate