summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2021-05-11 09:56:09 +0800
committerLu Qiuwen <[email protected]>2021-05-11 09:56:09 +0800
commitb2b9b27262292d60a726da68a81c0bbe8aa42a33 (patch)
treedb3d72d30adf792d08c04d59129517477eb5751a
parentdd626f381f590e27394030150af6a761092eb620 (diff)
适配DPDK 20.11并降级指令集拓展以适应E5-2650v2等处理器。
-rw-r--r--CMakeLists.txt6
-rw-r--r--cmake/FindDPDK.cmake2
-rw-r--r--service/src/core.c2
-rw-r--r--service/src/phydev.c13
-rw-r--r--tools/systemd/mrenv-script12
5 files changed, 19 insertions, 16 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f328800..a3070ad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,8 +15,8 @@ option(ENABLE_SANITIZE_ADDRESS "Enable AddressSanitizer" FALSE)
option(ENABLE_SANITIZE_THREAD "Enable ThreadSanitizer" FALSE)
option(ENABLE_VNODE_CHECK_THREAD_SAFE "Enable concurrent write thread-safe check for VNODE." FALSE)
-set(CMAKE_C_FLAGS "-std=gnu99 -m64 -march=native")
-set(CMAKE_CXX_FLAGS "-std=gnu++11 -m64 -march=native" )
+set(CMAKE_C_FLAGS "-std=gnu99 -m64 -march=corei7-avx")
+set(CMAKE_CXX_FLAGS "-std=gnu++11 -m64 -march=corei7-avx" )
if(ENABLE_WARNING_ALL)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fPIC")
@@ -82,4 +82,4 @@ message(STATUS "Packet I/O Middleware based on DPDK(Marsio), Version: ${MARSIO_V
# packed
include(Package)
-include(InstallDPDK) \ No newline at end of file
+include(InstallDPDK)
diff --git a/cmake/FindDPDK.cmake b/cmake/FindDPDK.cmake
index 6a7c3aa..c45b8d7 100644
--- a/cmake/FindDPDK.cmake
+++ b/cmake/FindDPDK.cmake
@@ -22,7 +22,7 @@ include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(DPDK DEFAULT_MSG DPDK_ROOT_DIR DPDK_INCLUDE_DIR DPDK_LIBRARY)
if(NOT RTE_MARCH)
- set(RTE_MARCH "native")
+ set(RTE_MARCH "core-avx2")
endif()
# DPDK CPU Flags
diff --git a/service/src/core.c b/service/src/core.c
index e40a905..abce8f3 100644
--- a/service/src/core.c
+++ b/service/src/core.c
@@ -367,6 +367,8 @@ static void sc_eal_init(struct sc_main * sc, const char * cmd)
WRITE_ARG("--single-file-segments");
}
+ WRITE_ARG("--legacy-mem");
+
// DPDK和SYSTEMD的日志级别差1
unsigned int loglevel = g_logger_level + 1;
MESA_load_profile_uint_def(sc->local_cfgfile, "eal", "loglevel", &loglevel, loglevel);
diff --git a/service/src/phydev.c b/service/src/phydev.c
index 5381495..c328efa 100644
--- a/service/src/phydev.c
+++ b/service/src/phydev.c
@@ -26,6 +26,7 @@
static struct rte_eth_conf eth_conf_default = {
.rxmode = {
+ .mq_mode = ETH_MQ_RX_RSS,
.split_hdr_size = 0,
},
.txmode = {
@@ -139,6 +140,7 @@ static int gen_phydev_qconf(struct phydev * dev, struct rte_eth_rxconf * rxconf,
*nr_rxdesc = dev->info.nr_rx_desc;
*nr_txdesc = dev->info.nr_tx_desc;
+
return 0;
}
@@ -156,16 +158,23 @@ static int gen_phydev_ethconf(struct phydev * dev, struct rte_eth_conf * out_eth
}
else if (dev->info.rssmode == MR_DEV_RSSMODE_4TUPLE_SYM)
{
- eth_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_PROTO_MASK;
+ eth_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP
+ | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP;
eth_conf.rx_adv_conf.rss_conf.rss_key = default_sym_rss_key;
eth_conf.rx_adv_conf.rss_conf.rss_key_len = sizeof(default_sym_rss_key);
}
else if (dev->info.rssmode == MR_DEV_RSSMODE_4TUPLE_ASYM)
{
- eth_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_PROTO_MASK;
+ eth_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP
+ | ETH_RSS_NONFRAG_IPV4_UDP | ETH_RSS_NONFRAG_IPV6_UDP;
eth_conf.rx_adv_conf.rss_conf.rss_key = NULL;
}
+ if(dev->info.en_vlan_strip)
+ {
+ eth_conf.txmode.offloads |= DEV_TX_OFFLOAD_VLAN_INSERT;
+ }
+
*out_eth_conf = eth_conf;
return 0;
}
diff --git a/tools/systemd/mrenv-script b/tools/systemd/mrenv-script
index 1879c6c..e64d2f4 100644
--- a/tools/systemd/mrenv-script
+++ b/tools/systemd/mrenv-script
@@ -78,16 +78,8 @@ function module_unload_igb_uio()
function module_load_igb_uio()
{
- if [ ! -e $MODULE_PATH/$UIO_MODULE_FILENAME ]; then
- echo -n "$MODULE_PATH/$UIO_MODULE_FILENAME does not existed. Check DPDK is installed or not. "
- return 1
- fi
-
- module_unload_igb_uio
- modprobe uio &> /dev/null
- insmod $MODULE_PATH/$UIO_MODULE_FILENAME
- [ ! $? -eq 0 ] && echo -n "$MODULE_PATH/$UIO_MODULE_FILENAME load failure." && return 1
- return 0
+ modprobe igb_uio
+ return $?
}
function module_load_uio_pci_generic()