diff --git a/src/common/options/global.yaml.in b/src/common/options/global.yaml.in index 1c81c3a1701..a149ddebdc5 100644 --- a/src/common/options/global.yaml.in +++ b/src/common/options/global.yaml.in @@ -1465,6 +1465,10 @@ options: level: advanced default: true with_legacy: true +- name: ms_dpdk_enable_tso + type: bool + level: advanced + default: true - name: ms_dpdk_hw_flow_control type: bool level: advanced diff --git a/src/msg/async/dpdk/DPDK.cc b/src/msg/async/dpdk/DPDK.cc index 24a6764fb09..a10c6ec96ae 100644 --- a/src/msg/async/dpdk/DPDK.cc +++ b/src/msg/async/dpdk/DPDK.cc @@ -310,7 +310,10 @@ int DPDKDevice::init_port_start() } // TSO is supported starting from DPDK v1.8 - if (_dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) { + // TSO is abnormal in some DPDK versions (eg.dpdk-20.11-3.e18.aarch64), try + // disable TSO by ms_dpdk_enable_tso=false + if ((_dev_info.tx_offload_capa & DEV_TX_OFFLOAD_TCP_TSO) && + cct->_conf.get_val("ms_dpdk_enable_tso")) { ldout(cct, 1) << __func__ << " TSO is supported" << dendl; _hw_features.tx_tso = 1; }