diff options
Diffstat (limited to 'support')
| -rw-r--r-- | support/CMakeLists.txt | 62 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch | 17 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch | 71 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch | 11 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch | 15 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch | 11 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch | 54 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch | 13 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch | 12 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-macro-adjust.patch | 19 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch | 10 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-memzone-namesize.patch | 11 | ||||
| -rw-r--r-- | support/dpdk/dpdk-21.11.4-mp-max-fds.patch | 11 | ||||
| -rwxr-xr-x | support/dpdk/dpdk-21.11.4.tar.xz | bin | 0 -> 15166036 bytes |
14 files changed, 317 insertions, 0 deletions
diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt index 0cd3c60..21bf8a4 100644 --- a/support/CMakeLists.txt +++ b/support/CMakeLists.txt @@ -102,3 +102,65 @@ set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_LOCATION ${INSTAL set_property(TARGET libevent-static-pthreads PROPERTY IMPORTED_INTERFACE_LINK_LIBRARIES pthread crypto) set_property(TARGET libevent-static-pthreads PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include) + +# Merge multiple patches into one patch file +set(DPDK_PATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dpdk) +set(MERGED_PATCH_FILE "${CMAKE_BINARY_DIR}/merged_patches.patch") +set(DPDP_PATCH_FILES ${DPDK_PATCH_DIR}/dpdk-21.11.4-memzone-namesize.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-fm10k-rxtx-vec.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-mempool-ops-get-count.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-bypass-flow-err-func.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-mp-max-fds.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-devbind-dump.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-hugepages-path.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-dpdk-pcapng-path.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-extend-max-virtqueue-pairs.patch + ${DPDK_PATCH_DIR}/dpdk-21.11.4-macro-adjust.patch) +execute_process(COMMAND cat ${DPDP_PATCH_FILES} OUTPUT_FILE ${MERGED_PATCH_FILE}) + +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(DPDK_BUILD_TYPE debug) +else() + set(DPDK_BUILD_TYPE debugoptimized) +endif() + +set(DPDK_MESON_DISABLED_DRIVERS "common/cpt,common/dpaax,common/octeontx,common/octeontx2,common/sfc_efx,\ + common/qat,bus/dpaa,bus/fslmc,bus/ifpga,bus/vmbus,mempool/bucket,mempool/dpaa,\ + mempool/dpaa2,mempool/octeontx,mempool/octeontx2,mempool/stack,raw/ifpga,raw/ioat,\ + raw/ntb,raw/octeontx2_dma,raw/octeontx2_ep,raw/skeleton,compress/zlib,regex/octeontx2,\ + vdpa/ifc,event/skeleton,event/dlb,event/dlb2,event/opdl,sevent/keleton,event/sw,event/dsw,\ + baseband/null,baseband/turbo_sw,baseband/fpga_lte_fec,baseband/fpga_5gnr_fec,baseband/acc100,\ + crypto/bcmfs,crypto/ccp,crypto/nitrox,crypto/null,crypto/openssl,crypto/scheduler,crypto/virtio") + +# Although default_library=static has been set, both dynamic and static libraries are compiled. a little strange +ExternalProject_Add(dpdk PREFIX dpdk + URL ${CMAKE_CURRENT_SOURCE_DIR}/dpdk/dpdk-21.11.4.tar.xz + URL_MD5 b24201da07d3fd87cacc2aa03586aed3 + PATCH_COMMAND + COMMAND patch -Ns -p1 -i ${MERGED_PATCH_FILE} + CONFIGURE_COMMAND + COMMAND meson -Dc_args=-DRTE_ETHDEV_PROFILE_WITH_VTUNE -Ddisable_drivers=${DPDK_MESON_DISABLED_DRIVERS} -Dprefix=<INSTALL_DIR> -Dmachine=${MACHINE} -Dibverbs_link=dlopen -Dbuildtype=${DPDK_BUILD_TYPE} build + BUILD_COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ninja + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build ninja install + COMMAND ${CMAKE_COMMAND} -E chdir <SOURCE_DIR>/build rm -f <INSTALL_DIR>/lib64/libdpdk.a + COMMAND ${CMAKE_COMMAND} -E chdir <INSTALL_DIR>/lib64 sh -c "ar crsT <INSTALL_DIR>/lib64/libdpdk.a <INSTALL_DIR>/lib64/*.a" + BUILD_IN_SOURCE 1) + +ExternalProject_Get_Property(dpdk INSTALL_DIR) +file(MAKE_DIRECTORY ${INSTALL_DIR}/include) +set(DPDK_ROOT_DIR ${INSTALL_DIR} CACHE PATH "DPDK root path") +message(STATUS "DPDK_ROOT_DIR: ${DPDK_ROOT_DIR}") + +find_library(M_LIB m) + +add_library(libdpdk STATIC IMPORTED GLOBAL) +add_dependencies(libdpdk dpdk) +set_target_properties(libdpdk PROPERTIES + IMPORTED_LOCATION ${M_LIB} + INTERFACE_LINK_DIRECTORIES ${INSTALL_DIR}/lib64 + INTERFACE_INCLUDE_DIRECTORIES ${INSTALL_DIR}/include + INTERFACE_LINK_LIBRARIES "-Wl,--whole-archive;${INSTALL_DIR}/lib64/libdpdk.a;-Wl,--no-whole-archive;rt;m;dl;pcap;numa;ibverbs;mlx5" +)
\ No newline at end of file diff --git a/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch b/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch new file mode 100644 index 0000000..63d8c60 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-bypass-flow-err-func.patch @@ -0,0 +1,17 @@ +--- dpdk-stable-21.11.4/lib/ethdev/rte_flow.c 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/ethdev/rte_flow.c 2023-06-26 07:36:38.124747070 -0400 +@@ -310,12 +310,14 @@ fts_exit(struct rte_eth_dev *dev) + static int + flow_err(uint16_t port_id, int ret, struct rte_flow_error *error) + { ++#if 0 + if (ret == 0) + return 0; + if (rte_eth_dev_is_removed(port_id)) + return rte_flow_error_set(error, EIO, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, rte_strerror(EIO)); ++#endif + return ret; + } + diff --git a/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch b/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch new file mode 100644 index 0000000..e4b4026 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-dpdk-devbind-dump.patch @@ -0,0 +1,71 @@ +--- dpdk-stable-21.11.4/usertools/dpdk-devbind.py 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/usertools/dpdk-devbind.py 2023-06-26 07:47:31.226072861 -0400 +@@ -8,6 +8,7 @@ import os + import subprocess + import argparse + import platform ++import json + + from glob import glob + from os.path import exists, basename +@@ -95,6 +96,7 @@ loaded_modules = None + # command-line arg flags + b_flag = None + status_flag = False ++dump_flag = False + force_flag = False + args = [] + +@@ -577,6 +579,11 @@ def show_device_status(devices_type, dev + display_devices("%s devices using kernel driver" % device_name, kernel_drv, + if_text + "drv=%(Driver_str)s " + "unused=%(Module_str)s %(Active)s") ++ if dump_flag and dump_path == 'stdout': ++ print(kernel_drv) ++ if dump_flag and dump_path != 'stdout': ++ f = open(dump_path, "w") ++ f.write(json.dumps(kernel_drv, sort_keys=True,indent=4)) + if no_drv: + display_devices("Other %s devices" % device_name, no_drv, + "unused=%(Module_str)s") +@@ -635,6 +642,8 @@ def parse_args(): + global status_dev + global force_flag + global args ++ global dump_flag ++ global dump_path + + parser = argparse.ArgumentParser( + description='Utility to bind and unbind devices from Linux kernel', +@@ -649,6 +658,9 @@ To display current device status: + To display current network device status: + %(prog)s --status-dev net + ++To dump current kernel network device status for json: ++ %(prog)s --status-dev net --dump ('stdout' | 'path') ++ + To bind eth1 from the current driver and move to use vfio-pci + %(prog)s --bind=vfio-pci eth1 + +@@ -669,6 +681,11 @@ To bind 0000:02:00.0 and 0000:02:00.1 to + help="Print the status of given device group.", + choices=['baseband', 'compress', 'crypto', 'dma', 'event', + 'mempool', 'misc', 'net', 'regex']) ++ parser.add_argument( ++ '-d', ++ '--dump', ++ help="Dump the status of kernel net group.") ++ + bind_group = parser.add_mutually_exclusive_group() + bind_group.add_argument( + '-b', +@@ -701,6 +718,9 @@ For devices bound to Linux kernel driver + if opt.status_dev: + status_flag = True + status_dev = opt.status_dev ++ if opt.dump: ++ dump_flag = True ++ dump_path = opt.dump + if opt.status: + status_flag = True + status_dev = "all" diff --git a/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch b/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch new file mode 100644 index 0000000..aec7534 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-dpdk-hugepages-path.patch @@ -0,0 +1,11 @@ +--- dpdk-stable-21.11.4/usertools/dpdk-hugepages.py 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/usertools/dpdk-hugepages.py 2023-06-26 07:51:06.843528457 -0400 +@@ -14,7 +14,7 @@ from math import log2 + BINARY_PREFIX = "KMG" + + # systemd mount point for huge pages +-HUGE_MOUNT = "/dev/hugepages" ++HUGE_MOUNT = "/var/run/mrzcpd/huge_pages" + + + def fmt_memsize(kb): diff --git a/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch b/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch new file mode 100644 index 0000000..859df2a --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-dpdk-pcapng-path.patch @@ -0,0 +1,15 @@ +--- dpdk-stable-21.11.4/lib/pcapng/rte_pcapng.c 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/pcapng/rte_pcapng.c 2023-06-26 07:53:17.116595350 -0400 +@@ -214,10 +214,11 @@ pcapng_add_interface(rte_pcapng_t *self, + "%s-%s", dev->bus->name, dev->name); + + /* DPDK reports in units of Mbps */ ++ #if 0 + if (rte_eth_link_get(port, &link) == 0 && + link.link_status == RTE_ETH_LINK_UP) + speed = link.link_speed * PCAPNG_MBPS_SPEED; +- ++ #endif + if (rte_eth_macaddr_get(port, &macaddr) < 0) + ea = NULL; + else diff --git a/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch b/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch new file mode 100644 index 0000000..2bab48d --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-extend-max-virtqueue-pairs.patch @@ -0,0 +1,11 @@ +--- dpdk-stable-21.11.4/drivers/net/virtio/virtio.h 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/drivers/net/virtio/virtio.h 2023-06-26 07:55:50.537496443 -0400 +@@ -127,7 +127,7 @@ + /* + * Maximum number of virtqueues per device. + */ +-#define VIRTIO_MAX_VIRTQUEUE_PAIRS 8 ++#define VIRTIO_MAX_VIRTQUEUE_PAIRS 32 + #define VIRTIO_MAX_VIRTQUEUES (VIRTIO_MAX_VIRTQUEUE_PAIRS * 2 + 1) + + /* VirtIO device IDs. */ diff --git a/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch b/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch new file mode 100644 index 0000000..b0321aa --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-fix-af-packet-run-as-slave-of-bond.patch @@ -0,0 +1,54 @@ +--- dpdk-stable-21.11.4/drivers/net/af_packet/rte_eth_af_packet.c 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/drivers/net/af_packet/rte_eth_af_packet.c 2023-06-26 07:58:57.931154196 -0400 +@@ -322,25 +322,7 @@ eth_dev_start(struct rte_eth_dev *dev) + static int + eth_dev_stop(struct rte_eth_dev *dev) + { +- unsigned i; +- int sockfd; +- struct pmd_internals *internals = dev->data->dev_private; + +- for (i = 0; i < internals->nb_queues; i++) { +- sockfd = internals->rx_queue[i].sockfd; +- if (sockfd != -1) +- close(sockfd); +- +- /* Prevent use after free in case tx fd == rx fd */ +- if (sockfd != internals->tx_queue[i].sockfd) { +- sockfd = internals->tx_queue[i].sockfd; +- if (sockfd != -1) +- close(sockfd); +- } +- +- internals->rx_queue[i].sockfd = -1; +- internals->tx_queue[i].sockfd = -1; +- } + + dev->data->dev_link.link_status = RTE_ETH_LINK_DOWN; + return 0; +@@ -445,6 +427,25 @@ eth_dev_close(struct rte_eth_dev *dev) + + internals = dev->data->dev_private; + req = &internals->req; ++ ++ int sockfd; ++ for (q = 0; q < internals->nb_queues; q++) { ++ sockfd = internals->rx_queue[q].sockfd; ++ if (sockfd != -1) ++ close(sockfd); ++ ++ /* Prevent use after free in case tx fd == rx fd */ ++ if (sockfd != internals->tx_queue[q].sockfd) { ++ sockfd = internals->tx_queue[q].sockfd; ++ if (sockfd != -1) ++ close(sockfd); ++ } ++ ++ internals->rx_queue[q].sockfd = -1; ++ internals->tx_queue[q].sockfd = -1; ++ } ++ ++ + for (q = 0; q < internals->nb_queues; q++) { + munmap(internals->rx_queue[q].map, + 2 * req->tp_block_size * req->tp_block_nr); diff --git a/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch b/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch new file mode 100644 index 0000000..6491480 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-fix-dup-msl-name-sec-process.patch @@ -0,0 +1,13 @@ +--- dpdk-stable-21.11.4/lib/eal/linux/eal_memalloc.c 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/eal/linux/eal_memalloc.c 2023-06-26 08:01:31.809052011 -0400 +@@ -1420,8 +1420,8 @@ secondary_msl_create_walk(const struct r + local_msl = &local_memsegs[msl_idx]; + + /* create distinct fbarrays for each secondary */ +- snprintf(name, RTE_FBARRAY_NAME_LEN, "%s_%i", +- primary_msl->memseg_arr.name, getpid()); ++ snprintf(name, RTE_FBARRAY_NAME_LEN, "%s_%i_%"PRIx64, ++ primary_msl->memseg_arr.name, getpid(), rte_rdtsc()); + + ret = rte_fbarray_init(&local_msl->memseg_arr, name, + primary_msl->memseg_arr.len, diff --git a/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch b/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch new file mode 100644 index 0000000..fd50829 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-fm10k-rxtx-vec.patch @@ -0,0 +1,12 @@ +--- dpdk-stable-21.11.4/drivers/net/fm10k/meson.build 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/drivers/net/fm10k/meson.build 2023-06-26 08:03:51.289052958 -0400 +@@ -14,8 +14,6 @@ sources = files( + 'fm10k_ethdev.c', + 'fm10k_rxtx.c', + ) +-if arch_subdir == 'x86' +- sources += files('fm10k_rxtx_vec.c') +-endif ++ + + includes += include_directories('base') diff --git a/support/dpdk/dpdk-21.11.4-macro-adjust.patch b/support/dpdk/dpdk-21.11.4-macro-adjust.patch new file mode 100644 index 0000000..864c31d --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-macro-adjust.patch @@ -0,0 +1,19 @@ +--- dpdk-stable-21.11.4/config/rte_config.h 2023-05-17 19:27:18.000000000 +0800 ++++ dpdk-stable-21.11.4-mr4/config/rte_config.h 2023-12-26 17:01:15.180144454 +0800 +@@ -34,7 +34,7 @@ + #define RTE_MAX_MEM_MB_PER_LIST 32768 + #define RTE_MAX_MEMSEG_PER_TYPE 32768 + #define RTE_MAX_MEM_MB_PER_TYPE 65536 +-#define RTE_MAX_MEMZONE 2560 ++#define RTE_MAX_MEMZONE 125600 + #define RTE_MAX_TAILQ 32 + #define RTE_LOG_DP_LEVEL RTE_LOG_INFO + #define RTE_MAX_VFIO_CONTAINERS 64 +@@ -99,7 +99,7 @@ + + /* rte_graph defines */ + #define RTE_GRAPH_BURST_SIZE 256 +-#define RTE_LIBRTE_GRAPH_STATS 1 ++#define RTE_LIBRTE_GRAPH_STATS 10 + + /****** driver defines ********/ diff --git a/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch b/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch new file mode 100644 index 0000000..aadac18 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-mempool-ops-get-count.patch @@ -0,0 +1,10 @@ +--- dpdk-stable-21.11.4/lib/mempool/version.map 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/mempool/version.map 2023-06-26 08:05:23.115396557 -0400 +@@ -31,6 +31,7 @@ DPDK_22 { + rte_mempool_register_ops; + rte_mempool_set_ops_byname; + rte_mempool_walk; ++ rte_mempool_ops_get_count; + + local: *; + }; diff --git a/support/dpdk/dpdk-21.11.4-memzone-namesize.patch b/support/dpdk/dpdk-21.11.4-memzone-namesize.patch new file mode 100644 index 0000000..377d37d --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-memzone-namesize.patch @@ -0,0 +1,11 @@ +--- dpdk-stable-21.11.4/lib/eal/include/rte_memzone.h 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/eal/include/rte_memzone.h 2023-06-26 08:07:19.550564337 -0400 +@@ -48,7 +48,7 @@ extern "C" { + */ + struct rte_memzone { + +-#define RTE_MEMZONE_NAMESIZE 32 /**< Maximum length of memory zone name.*/ ++#define RTE_MEMZONE_NAMESIZE 64 /**< Maximum length of memory zone name.*/ + char name[RTE_MEMZONE_NAMESIZE]; /**< Name of the memory zone. */ + + rte_iova_t iova; /**< Start IO address. */ diff --git a/support/dpdk/dpdk-21.11.4-mp-max-fds.patch b/support/dpdk/dpdk-21.11.4-mp-max-fds.patch new file mode 100644 index 0000000..90f94b8 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4-mp-max-fds.patch @@ -0,0 +1,11 @@ +--- dpdk-stable-21.11.4/lib/eal/include/rte_eal.h 2023-05-17 07:27:18.000000000 -0400 ++++ dpdk-stable-21.11.4-mr4/lib/eal/include/rte_eal.h 2023-06-26 08:09:03.956818093 -0400 +@@ -157,7 +157,7 @@ int rte_eal_primary_proc_alive(const cha + */ + bool rte_mp_disable(void); + +-#define RTE_MP_MAX_FD_NUM 8 /* The max amount of fds */ ++#define RTE_MP_MAX_FD_NUM 2048 /* The max amount of fds */ + #define RTE_MP_MAX_NAME_LEN 64 /* The max length of action name */ + #define RTE_MP_MAX_PARAM_LEN 256 /* The max length of param */ + struct rte_mp_msg { diff --git a/support/dpdk/dpdk-21.11.4.tar.xz b/support/dpdk/dpdk-21.11.4.tar.xz Binary files differnew file mode 100755 index 0000000..4b35c80 --- /dev/null +++ b/support/dpdk/dpdk-21.11.4.tar.xz |
