/* * Copyright (c) 2001-2020 Mellanox Technologies, Ltd. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef SYS_VARS_H #define SYS_VARS_H #include #include #include #include #include "vtypes.h" #include "config.h" #include "vma/ib/base/verbs_extra.h" #include "vma/util/sysctl_reader.h" #include "vma/vma_extra.h" typedef enum { MCE_SPEC_NONE = 0, MCE_SPEC_SOCKPERF_ULTRA_LATENCY_10, MCE_SPEC_SOCKPERF_LATENCY_15, MCE_SPEC_29WEST_LBM_29, MCE_SPEC_WOMBAT_FH_LBM_554, MCE_SPEC_MCD_623, MCE_SPEC_MCD_IRQ_624, MCE_SPEC_RTI_784, MCE_SPEC_LL_7750, MCE_SPEC_LL_MULTI_RING, MCE_VMA__ALL /* last element */ } vma_spec_t; typedef enum { ALLOC_TYPE_ANON = 0, ALLOC_TYPE_CONTIG, ALLOC_TYPE_HUGEPAGES, ALLOC_TYPE_LAST_ALLOWED_TO_USE, ALLOC_TYPE_EXTERNAL, /* not allowed as a global parameter */ } alloc_mode_t; typedef enum { TS_CONVERSION_MODE_DISABLE = 0, // TS_CONVERSION_MODE_DISABLE must be the first enum TS_CONVERSION_MODE_RAW, TS_CONVERSION_MODE_BEST_POSSIBLE, TS_CONVERSION_MODE_SYNC, TS_CONVERSION_MODE_PTP, TS_CONVERSION_MODE_LAST } ts_conversion_mode_t; static inline bool is_ring_logic_valid(ring_logic_t logic) { switch (logic) { case RING_LOGIC_PER_INTERFACE: case RING_LOGIC_PER_IP: case RING_LOGIC_PER_SOCKET: case RING_LOGIC_PER_THREAD: case RING_LOGIC_PER_CORE: case RING_LOGIC_PER_CORE_ATTACH_THREADS: return true; default: return false; } } static inline const char* ring_logic_str(ring_logic_t logic) { switch (logic) { case RING_LOGIC_PER_INTERFACE: return "(Ring per interface)"; case RING_LOGIC_PER_IP: return "(Ring per ip)"; case RING_LOGIC_PER_SOCKET: return "(Ring per socket)"; case RING_LOGIC_PER_THREAD: return "(Ring per thread)"; case RING_LOGIC_PER_CORE: return "(Ring per core)"; case RING_LOGIC_PER_CORE_ATTACH_THREADS: return "(Ring per core - attach threads)"; default: break; } return "unsupported"; } typedef enum { THREAD_MODE_SINGLE = 0, THREAD_MODE_MULTI, THREAD_MODE_MUTEX, THREAD_MODE_PLENTY, THREAD_MODE_LAST } thread_mode_t; typedef enum { BUFFER_BATCHING_NONE = 0, BUFFER_BATCHING_WITH_RECLAIM, BUFFER_BATCHING_NO_RECLAIM, BUFFER_BATCHING_LAST, } buffer_batching_mode_t; // See ibv_transport_type for general verbs transport types typedef enum { VMA_TRANSPORT_UNKNOWN = -1, VMA_TRANSPORT_IB = 0, VMA_TRANSPORT_ETH } transport_type_t; static inline const char* priv_vma_transport_type_str(transport_type_t transport_type) { BULLSEYE_EXCLUDE_BLOCK_START switch (transport_type) { case VMA_TRANSPORT_IB: return "IB"; case VMA_TRANSPORT_ETH: return "ETH"; case VMA_TRANSPORT_UNKNOWN: default: break; } return "UNKNOWN"; BULLSEYE_EXCLUDE_BLOCK_END } typedef enum { MSS_FOLLOW_MTU = 0 } mss_mode_t; typedef enum { MTU_FOLLOW_INTERFACE = 0 } mtu_mode_t; typedef enum { CTL_THREAD_DISABLE = 0, CTL_THREAD_WITH_WAKEUP, CTL_THREAD_NO_WAKEUP, CTL_THREAD_LAST } tcp_ctl_thread_t; typedef enum { TCP_TS_OPTION_DISABLE = 0, // TCP_TS_OPTION_DISABLE must be the first enum TCP_TS_OPTION_ENABLE, TCP_TS_OPTION_FOLLOW_OS, TCP_TS_OPTION_LAST } tcp_ts_opt_t; static inline const char* ctl_thread_str(tcp_ctl_thread_t logic) { switch (logic) { case CTL_THREAD_DISABLE: return "(Disabled)"; case CTL_THREAD_WITH_WAKEUP: return "(Enabled - with wakeup)"; case CTL_THREAD_NO_WAKEUP: return "(Enabled - no wakeup)"; default: break; } return "unsupported"; } typedef enum { INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED = 0, INTERNAL_THREAD_TCP_TIMER_HANDLING_IMMEDIATE } internal_thread_tcp_timer_handling_t; static inline const char* internal_thread_tcp_timer_handling_str(internal_thread_tcp_timer_handling_t handling) { switch (handling) { case INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED: return "(deferred)"; case INTERNAL_THREAD_TCP_TIMER_HANDLING_IMMEDIATE: return "(immediate)"; default: break; } return "unsupported"; } namespace vma_spec { // convert str to vVMA_spec_t; upon error - returns the given 'def_value' vma_spec_t from_str(const char* str, vma_spec_t def_value = MCE_SPEC_NONE); // convert int to vVMA_spec_t; upon error - returns the given 'def_value' vma_spec_t from_int(const int int_spec, vma_spec_t def_value = MCE_SPEC_NONE); const char * to_str(vma_spec_t level); } //////////////////////////////////////////////////////////////////////////////// class vma_exception_handling { public: static const char *getName() { return "Exception handling mode"; } static const char *getSysVar() { return "VMA_EXCEPTION_HANDLING"; } typedef enum { MODE_FIRST = -3, MODE_EXIT = -2, MODE_DEBUG = -1, MODE_UNOFFLOAD = 0, MODE_LOG_ERROR, MODE_RETURN_ERROR, MODE_ABORT, MODE_LAST, MODE_DEFAULT = MODE_DEBUG } mode; const char* to_str() { switch (m_mode) { case MODE_EXIT: return "(exit on failed startup)"; case MODE_DEBUG: return "(just log debug message)"; case MODE_UNOFFLOAD: return "(log debug and un-offload)"; case MODE_LOG_ERROR: return "(log error and un-offload)"; case MODE_RETURN_ERROR: return "(Log Error and return error)"; case MODE_ABORT: return "(Log error and Abort!)"; default: break; } return "unsupported"; } bool is_suit_un_offloading() { return m_mode == MODE_UNOFFLOAD || m_mode == MODE_LOG_ERROR; } vlog_levels_t get_log_severity() { switch (m_mode) { case MODE_EXIT: case MODE_DEBUG: case MODE_UNOFFLOAD: return VLOG_DEBUG; case MODE_LOG_ERROR: case MODE_RETURN_ERROR: case MODE_ABORT: default: return VLOG_ERROR; } } // // cast constructors and cast operators // vma_exception_handling(mode _mode = MODE_DEFAULT) : m_mode(_mode) { if (m_mode >= MODE_LAST || m_mode <= MODE_FIRST) m_mode = MODE_DEFAULT; } explicit vma_exception_handling(int _mode) : m_mode((mode)_mode) { if (m_mode >= MODE_LAST || m_mode <= MODE_FIRST) m_mode = MODE_DEFAULT; } operator mode() const { return m_mode; } private: mode m_mode; }; //////////////////////////////////////////////////////////////////////////////// struct mce_sys_var { static mce_sys_var & instance() { static mce_sys_var the_instance; //singelton return the_instance; } public: enum hyper_t { HYPER_NONE = 0, HYPER_XEN, HYPER_KVM, HYPER_MSHV, HYPER_VMWARE }; public: void get_env_params(); char *app_name; char app_id[MAX_APP_ID_LENGHT]; uint32_t mce_spec; uint32_t mce_spec_param1; uint32_t mce_spec_param2; vlog_levels_t log_level; uint32_t log_details; char log_filename[PATH_MAX]; char stats_filename[PATH_MAX]; char stats_shmem_dirname[PATH_MAX]; char conf_filename[PATH_MAX]; char vmad_notify_dir[PATH_MAX]; bool log_colors; bool handle_sigintr; bool handle_segfault; uint32_t stats_fd_num_max; ring_logic_t ring_allocation_logic_tx; ring_logic_t ring_allocation_logic_rx; int ring_migration_ratio_tx; int ring_migration_ratio_rx; int ring_limit_per_interface; int ring_dev_mem_tx; int tcp_max_syn_rate; uint32_t tx_num_segs_tcp; uint32_t tx_num_bufs; #ifdef DEFINED_TSO uint32_t tx_buf_size; #endif /* DEFINED_TSO */ uint32_t tx_num_wr; uint32_t tx_num_wr_to_signal; uint32_t tx_max_inline; bool tx_mc_loopback_default; bool tx_nonblocked_eagains; uint32_t tx_prefetch_bytes; uint32_t tx_bufs_batch_udp; uint32_t tx_bufs_batch_tcp; uint32_t rx_num_bufs; uint32_t rx_bufs_batch; uint32_t rx_num_wr; uint32_t rx_num_wr_to_post_recv; int32_t rx_poll_num; int32_t rx_poll_num_init; uint32_t rx_udp_poll_os_ratio; ts_conversion_mode_t hw_ts_conversion_mode; uint32_t rx_poll_yield_loops; uint32_t rx_ready_byte_min_limit; uint32_t rx_prefetch_bytes; uint32_t rx_prefetch_bytes_before_poll; uint32_t rx_cq_drain_rate_nsec; // If enabled this will cause the Rx to drain all wce in CQ before returning to user, // Else (Default: Disbaled) it will return when first ready packet is in socket queue uint32_t rx_delta_tsc_between_cq_polls; uint32_t gro_streams_max; bool tcp_3t_rules; bool eth_mc_l2_only_rules; bool mc_force_flowtag; int32_t select_poll_num; bool select_poll_os_force; uint32_t select_poll_os_ratio; uint32_t select_skip_os_fd_check; bool select_handle_cpu_usage_stats; bool cq_moderation_enable; uint32_t cq_moderation_count; uint32_t cq_moderation_period_usec; uint32_t cq_aim_max_count; uint32_t cq_aim_max_period_usec; uint32_t cq_aim_interval_msec; uint32_t cq_aim_interrupts_rate_per_sec; uint32_t cq_poll_batch_max; uint32_t progress_engine_interval_msec; uint32_t progress_engine_wce_max; bool cq_keep_qp_full; uint32_t qp_compensation_level; bool offloaded_sockets; uint32_t timer_resolution_msec; uint32_t tcp_timer_resolution_msec; tcp_ctl_thread_t tcp_ctl_thread; tcp_ts_opt_t tcp_ts_opt; bool tcp_nodelay; bool tcp_quickack; vma_exception_handling exception_handling; bool avoid_sys_calls_on_tcp_fd; bool allow_privileged_sock_opt; uint32_t wait_after_join_msec; thread_mode_t thread_mode; buffer_batching_mode_t buffer_batching_mode; alloc_mode_t mem_alloc_type; bool handle_fork; bool close_on_dup2; uint32_t mtu; /* effective MTU. If mtu==0 then auto calculate the MTU */ uint32_t lwip_cc_algo_mod; uint32_t lwip_mss; char internal_thread_cpuset[FILENAME_MAX]; char internal_thread_affinity_str[FILENAME_MAX]; cpu_set_t internal_thread_affinity; bool internal_thread_arm_cq_enabled; internal_thread_tcp_timer_handling_t internal_thread_tcp_timer_handling; bool handle_bf; bool enable_ipoib; bool enable_socketxtreme; #ifdef DEFINED_TSO bool enable_tso; #endif /* DEFINED_TSO */ uint32_t timer_netlink_update_msec; //Neigh parameters uint32_t neigh_uc_arp_quata; uint32_t neigh_wait_till_send_arp_msec; uint32_t neigh_num_err_retries; uint32_t vma_time_measure_num_samples; char vma_time_measure_filename[PATH_MAX]; sysctl_reader_t & sysctl_reader; bool rx_poll_on_tx_tcp; hyper_t hypervisor; bool trigger_dummy_send_getsockname; private: void print_vma_load_failure_msg(); int list_to_cpuset(char *cpulist, cpu_set_t *cpu_set); int hex_to_cpuset(char *start, cpu_set_t *cpu_set); int env_to_cpuset(char *orig_start, cpu_set_t *cpu_set); void read_env_variable_with_pid(char* mce_sys_name, size_t mce_sys_max_size, char* env_ptr); bool check_cpuinfo_flag(const char* flag); bool cpuid_hv(); const char* cpuid_hv_vendor(); void read_hv(); // prevent unautothrized creation of objects mce_sys_var () : sysctl_reader(sysctl_reader_t::instance()){ // coverity[uninit_member] get_env_params(); } mce_sys_var (const mce_sys_var &); mce_sys_var & operator= (const mce_sys_var &); }; extern mce_sys_var & safe_mce_sys(); #define SYS_VAR_LOG_LEVEL "VMA_TRACELEVEL" #define SYS_VAR_LOG_DETAILS "VMA_LOG_DETAILS" #define SYS_VAR_LOG_FILENAME "VMA_LOG_FILE" #define SYS_VAR_STATS_FILENAME "VMA_STATS_FILE" #define SYS_VAR_VMAD_DIR "VMA_VMAD_NOTIFY_DIR" #define SYS_VAR_STATS_SHMEM_DIRNAME "VMA_STATS_SHMEM_DIR" #define SYS_VAR_CONF_FILENAME "VMA_CONFIG_FILE" #define SYS_VAR_LOG_COLORS "VMA_LOG_COLORS" #define SYS_VAR_APPLICATION_ID "VMA_APPLICATION_ID" #define SYS_VAR_HANDLE_SIGINTR "VMA_HANDLE_SIGINTR" #define SYS_VAR_HANDLE_SIGSEGV "VMA_HANDLE_SIGSEGV" #define SYS_VAR_STATS_FD_NUM "VMA_STATS_FD_NUM" #define SYS_VAR_RING_ALLOCATION_LOGIC_TX "VMA_RING_ALLOCATION_LOGIC_TX" #define SYS_VAR_RING_ALLOCATION_LOGIC_RX "VMA_RING_ALLOCATION_LOGIC_RX" #define SYS_VAR_RING_MIGRATION_RATIO_TX "VMA_RING_MIGRATION_RATIO_TX" #define SYS_VAR_RING_MIGRATION_RATIO_RX "VMA_RING_MIGRATION_RATIO_RX" #define SYS_VAR_RING_LIMIT_PER_INTERFACE "VMA_RING_LIMIT_PER_INTERFACE" #define SYS_VAR_RING_DEV_MEM_TX "VMA_RING_DEV_MEM_TX" #define SYS_VAR_TX_NUM_SEGS_TCP "VMA_TX_SEGS_TCP" #define SYS_VAR_TX_NUM_BUFS "VMA_TX_BUFS" #ifdef DEFINED_TSO #define SYS_VAR_TX_BUF_SIZE "VMA_TX_BUF_SIZE" #endif /* DEFINED_TSO */ #define SYS_VAR_TX_NUM_WRE "VMA_TX_WRE" #define SYS_VAR_TX_NUM_WRE_TO_SIGNAL "VMA_TX_WRE_BATCHING" #define SYS_VAR_TX_MAX_INLINE "VMA_TX_MAX_INLINE" #define SYS_VAR_TX_MC_LOOPBACK "VMA_TX_MC_LOOPBACK" #define SYS_VAR_TX_NONBLOCKED_EAGAINS "VMA_TX_NONBLOCKED_EAGAINS" #define SYS_VAR_TX_PREFETCH_BYTES "VMA_TX_PREFETCH_BYTES" #define SYS_VAR_RX_NUM_BUFS "VMA_RX_BUFS" #define SYS_VAR_RX_NUM_WRE "VMA_RX_WRE" #define SYS_VAR_RX_NUM_WRE_TO_POST_RECV "VMA_RX_WRE_BATCHING" #define SYS_VAR_RX_NUM_POLLS "VMA_RX_POLL" #define SYS_VAR_RX_NUM_POLLS_INIT "VMA_RX_POLL_INIT" #define SYS_VAR_RX_UDP_POLL_OS_RATIO "VMA_RX_UDP_POLL_OS_RATIO" #define SYS_VAR_HW_TS_CONVERSION_MODE "VMA_HW_TS_CONVERSION" // The following 2 params were replaced by VMA_RX_UDP_POLL_OS_RATIO #define SYS_VAR_RX_POLL_OS_RATIO "VMA_RX_POLL_OS_RATIO" #define SYS_VAR_RX_SKIP_OS "VMA_RX_SKIP_OS" #define SYS_VAR_RX_POLL_YIELD "VMA_RX_POLL_YIELD" #define SYS_VAR_RX_BYTE_MIN_LIMIT "VMA_RX_BYTES_MIN" #define SYS_VAR_RX_PREFETCH_BYTES "VMA_RX_PREFETCH_BYTES" #define SYS_VAR_RX_PREFETCH_BYTES_BEFORE_POLL "VMA_RX_PREFETCH_BYTES_BEFORE_POLL" #define SYS_VAR_RX_CQ_DRAIN_RATE_NSEC "VMA_RX_CQ_DRAIN_RATE_NSEC" #define SYS_VAR_GRO_STREAMS_MAX "VMA_GRO_STREAMS_MAX" #define SYS_VAR_TCP_3T_RULES "VMA_TCP_3T_RULES" #define SYS_VAR_ETH_MC_L2_ONLY_RULES "VMA_ETH_MC_L2_ONLY_RULES" #define SYS_VAR_MC_FORCE_FLOWTAG "VMA_MC_FORCE_FLOWTAG" #define SYS_VAR_SELECT_CPU_USAGE_STATS "VMA_CPU_USAGE_STATS" #define SYS_VAR_SELECT_NUM_POLLS "VMA_SELECT_POLL" #define SYS_VAR_SELECT_POLL_OS_FORCE "VMA_SELECT_POLL_OS_FORCE" #define SYS_VAR_SELECT_POLL_OS_RATIO "VMA_SELECT_POLL_OS_RATIO" #define SYS_VAR_SELECT_SKIP_OS "VMA_SELECT_SKIP_OS" #define SYS_VAR_CQ_MODERATION_ENABLE "VMA_CQ_MODERATION_ENABLE" #define SYS_VAR_CQ_MODERATION_COUNT "VMA_CQ_MODERATION_COUNT" #define SYS_VAR_CQ_MODERATION_PERIOD_USEC "VMA_CQ_MODERATION_PERIOD_USEC" #define SYS_VAR_CQ_AIM_MAX_COUNT "VMA_CQ_AIM_MAX_COUNT" #define SYS_VAR_CQ_AIM_MAX_PERIOD_USEC "VMA_CQ_AIM_MAX_PERIOD_USEC" #define SYS_VAR_CQ_AIM_INTERVAL_MSEC "VMA_CQ_AIM_INTERVAL_MSEC" #define SYS_VAR_CQ_AIM_INTERRUPTS_RATE_PER_SEC "VMA_CQ_AIM_INTERRUPTS_RATE_PER_SEC" #define SYS_VAR_CQ_POLL_BATCH_MAX "VMA_CQ_POLL_BATCH_MAX" #define SYS_VAR_PROGRESS_ENGINE_INTERVAL "VMA_PROGRESS_ENGINE_INTERVAL" #define SYS_VAR_PROGRESS_ENGINE_WCE_MAX "VMA_PROGRESS_ENGINE_WCE_MAX" #define SYS_VAR_CQ_KEEP_QP_FULL "VMA_CQ_KEEP_QP_FULL" #define SYS_VAR_QP_COMPENSATION_LEVEL "VMA_QP_COMPENSATION_LEVEL" #define SYS_VAR_OFFLOADED_SOCKETS "VMA_OFFLOADED_SOCKETS" #define SYS_VAR_TIMER_RESOLUTION_MSEC "VMA_TIMER_RESOLUTION_MSEC" #define SYS_VAR_TCP_TIMER_RESOLUTION_MSEC "VMA_TCP_TIMER_RESOLUTION_MSEC" #define SYS_VAR_TCP_CTL_THREAD "VMA_TCP_CTL_THREAD" #define SYS_VAR_TCP_TIMESTAMP_OPTION "VMA_TCP_TIMESTAMP_OPTION" #define SYS_VAR_TCP_NODELAY "VMA_TCP_NODELAY" #define SYS_VAR_TCP_QUICKACK "VMA_TCP_QUICKACK" #define SYS_VAR_VMA_EXCEPTION_HANDLING (vma_exception_handling::getSysVar()) #define SYS_VAR_AVOID_SYS_CALLS_ON_TCP_FD "VMA_AVOID_SYS_CALLS_ON_TCP_FD" #define SYS_VAR_ALLOW_PRIVILEGED_SOCK_OPT "VMA_ALLOW_PRIVILEGED_SOCK_OPT" #define SYS_VAR_WAIT_AFTER_JOIN_MSEC "VMA_WAIT_AFTER_JOIN_MSEC" #define SYS_VAR_THREAD_MODE "VMA_THREAD_MODE" #define SYS_VAR_BUFFER_BATCHING_MODE "VMA_BUFFER_BATCHING_MODE" #define SYS_VAR_HUGETBL "VMA_HUGETBL" #define SYS_VAR_MEM_ALLOC_TYPE "VMA_MEM_ALLOC_TYPE" #define SYS_VAR_FORK "VMA_FORK" #define SYS_VAR_BF "VMA_BF" #define SYS_VAR_CLOSE_ON_DUP2 "VMA_CLOSE_ON_DUP2" #define SYS_VAR_MTU "VMA_MTU" #define SYS_VAR_TCP_MAX_SYN_RATE "VMA_TCP_MAX_SYN_RATE" #define SYS_VAR_MSS "VMA_MSS" #define SYS_VAR_TCP_CC_ALGO "VMA_TCP_CC_ALGO" #define SYS_VAR_SPEC "VMA_SPEC" #define SYS_VAR_SPEC_PARAM1 "VMA_SPEC_PARAM1" #define SYS_VAR_SPEC_PARAM2 "VMA_SPEC_PARAM2" #define SYS_VAR_IPOIB "VMA_IPOIB" #define SYS_VAR_SOCKETXTREME "VMA_SOCKETXTREME" #ifdef DEFINED_TSO #define SYS_VAR_TSO "VMA_TSO" #endif /* DEFINED_TSO */ #define SYS_VAR_INTERNAL_THREAD_AFFINITY "VMA_INTERNAL_THREAD_AFFINITY" #define SYS_VAR_INTERNAL_THREAD_CPUSET "VMA_INTERNAL_THREAD_CPUSET" #define SYS_VAR_INTERNAL_THREAD_ARM_CQ "VMA_INTERNAL_THREAD_ARM_CQ" #define SYS_VAR_INTERNAL_THREAD_TCP_TIMER_HANDLING "VMA_INTERNAL_THREAD_TCP_TIMER_HANDLING" #define SYS_VAR_NETLINK_TIMER_MSEC "VMA_NETLINK_TIMER" #define SYS_VAR_NEIGH_UC_ARP_QUATA "VMA_NEIGH_UC_ARP_QUATA" #define SYS_VAR_NEIGH_UC_ARP_DELAY_MSEC "VMA_NEIGH_UC_ARP_DELAY_MSEC" #define SYS_VAR_NEIGH_NUM_ERR_RETRIES "VMA_NEIGH_NUM_ERR_RETRIES" #define SYS_VAR_VMA_TIME_MEASURE_NUM_SAMPLES "VMA_TIME_MEASURE_NUM_SAMPLES" #define SYS_VAR_VMA_TIME_MEASURE_DUMP_FILE "VMA_TIME_MEASURE_DUMP_FILE" #define SYS_VAR_VMA_RX_POLL_ON_TX_TCP "VMA_RX_POLL_ON_TX_TCP" #define SYS_VAR_VMA_TRIGGER_DUMMY_SEND_GETSOCKNAME "VMA_TRIGGER_DUMMY_SEND_GETSOCKNAME" #define MCE_DEFAULT_LOG_FILE ("") #define MCE_DEFAULT_CONF_FILE ("/etc/libvma.conf") #define MCE_DEFAULT_STATS_FILE ("") #define MCE_DEFAULT_VMAD_FOLDER (VMA_AGENT_PATH) #define MCE_DEFAULT_STATS_SHMEM_DIR ("/tmp/") #define MCE_DEFAULT_LOG_DETAILS (0) #define MCE_DEFAULT_LOG_COLORS (true) #define MCE_DEFAULT_APP_ID ("VMA_DEFAULT_APPLICATION_ID") #define MCE_DEFAULT_HANDLE_SIGINTR (false) #define MCE_DEFAULT_HANDLE_SIGFAULT (false) #define MCE_DEFAULT_STATS_FD_NUM 100 #define MCE_DEFAULT_RING_ALLOCATION_LOGIC_TX (RING_LOGIC_PER_INTERFACE) #define MCE_DEFAULT_RING_ALLOCATION_LOGIC_RX (RING_LOGIC_PER_INTERFACE) #define MCE_DEFAULT_RING_MIGRATION_RATIO_TX (100) #define MCE_DEFAULT_RING_MIGRATION_RATIO_RX (100) #define MCE_DEFAULT_RING_LIMIT_PER_INTERFACE (0) #define MCE_DEFAULT_RING_DEV_MEM_TX (0) #define MCE_DEFAULT_TCP_MAX_SYN_RATE (0) #define MCE_DEFAULT_TX_NUM_SEGS_TCP (1000000) #define MCE_DEFAULT_TX_NUM_BUFS (200000) #ifdef DEFINED_TSO #define MCE_DEFAULT_TX_BUF_SIZE (0) #endif /* DEFINED_TSO */ #define MCE_DEFAULT_TX_NUM_WRE (2048) #define MCE_DEFAULT_TX_NUM_WRE_TO_SIGNAL (64) #define MCE_DEFAULT_TX_MAX_INLINE (204) //+18(always inline ETH header) = 222 #define MCE_DEFAULT_TX_BUILD_IP_CHKSUM (true) #define MCE_DEFAULT_TX_MC_LOOPBACK (true) #define MCE_DEFAULT_TX_NONBLOCKED_EAGAINS (false) #define MCE_DEFAULT_TX_PREFETCH_BYTES (256) #define MCE_DEFAULT_TX_BUFS_BATCH_UDP (8) #define MCE_DEFAULT_TX_BUFS_BATCH_TCP (16) #define MCE_DEFAULT_TX_NUM_SGE (2) #define MCE_DEFAULT_RX_NUM_BUFS (200000) #define MCE_DEFAULT_RX_BUFS_BATCH (64) #define MCE_DEFAULT_RX_NUM_WRE (16000) #define MCE_DEFAULT_RX_NUM_WRE_TO_POST_RECV (64) #define MCE_DEFAULT_RX_NUM_SGE (1) #define MCE_DEFAULT_RX_NUM_POLLS (100000) #define MCE_DEFAULT_RX_NUM_POLLS_INIT (0) #define MCE_DEFAULT_RX_UDP_POLL_OS_RATIO (100) #define MCE_DEFAULT_HW_TS_CONVERSION_MODE (TS_CONVERSION_MODE_SYNC) #define MCE_DEFAULT_RX_POLL_YIELD (0) #define MCE_DEFAULT_RX_BYTE_MIN_LIMIT (65536) #define MCE_DEFAULT_RX_PREFETCH_BYTES (256) #define MCE_DEFAULT_RX_PREFETCH_BYTES_BEFORE_POLL (0) #define MCE_DEFAULT_RX_CQ_DRAIN_RATE (MCE_RX_CQ_DRAIN_RATE_DISABLED) #define MCE_DEFAULT_GRO_STREAMS_MAX (32) #define MCE_DEFAULT_TCP_3T_RULES (false) #define MCE_DEFAULT_ETH_MC_L2_ONLY_RULES (false) #define MCE_DEFAULT_MC_FORCE_FLOWTAG (false) #define MCE_DEFAULT_SELECT_NUM_POLLS (100000) #define MCE_DEFAULT_SELECT_POLL_OS_FORCE (0) #define MCE_DEFAULT_SELECT_POLL_OS_RATIO (10) #define MCE_DEFAULT_SELECT_SKIP_OS (4) #define MCE_DEFAULT_SELECT_CPU_USAGE_STATS (false) #ifdef DEFINED_IBV_CQ_ATTR_MODERATE #define MCE_DEFAULT_CQ_MODERATION_ENABLE (true) #else #define MCE_DEFAULT_CQ_MODERATION_ENABLE (false) #endif #define MCE_DEFAULT_CQ_MODERATION_COUNT (48) #define MCE_DEFAULT_CQ_MODERATION_PERIOD_USEC (50) #define MCE_DEFAULT_CQ_AIM_MAX_COUNT (560) #define MCE_DEFAULT_CQ_AIM_MAX_PERIOD_USEC (250) #define MCE_DEFAULT_CQ_AIM_INTERVAL_MSEC (250) #define MCE_DEFAULT_CQ_AIM_INTERRUPTS_RATE_PER_SEC (5000) #define MCE_DEFAULT_CQ_POLL_BATCH (16) #define MCE_DEFAULT_PROGRESS_ENGINE_INTERVAL_MSEC (10) #define MCE_DEFAULT_PROGRESS_ENGINE_WCE_MAX (10000) #define MCE_DEFAULT_CQ_KEEP_QP_FULL (true) #define MCE_DEFAULT_QP_COMPENSATION_LEVEL (256) #define MCE_DEFAULT_INTERNAL_THREAD_ARM_CQ_ENABLED (false) #define MCE_DEFAULT_QP_FORCE_MC_ATTACH (false) #define MCE_DEFAULT_OFFLOADED_SOCKETS (true) #define MCE_DEFAULT_TIMER_RESOLUTION_MSEC (10) #define MCE_DEFAULT_TCP_TIMER_RESOLUTION_MSEC (100) #define MCE_DEFAULT_TCP_CTL_THREAD (CTL_THREAD_DISABLE) #define MCE_DEFAULT_TCP_TIMESTAMP_OPTION (TCP_TS_OPTION_DISABLE) #define MCE_DEFAULT_TCP_NODELAY (false) #define MCE_DEFAULT_TCP_QUICKACK (false) #define MCE_DEFAULT_VMA_EXCEPTION_HANDLING (vma_exception_handling::MODE_DEFAULT) #define MCE_DEFAULT_AVOID_SYS_CALLS_ON_TCP_FD (false) #define MCE_DEFAULT_ALLOW_PRIVILEGED_SOCK_OPT (true) #define MCE_DEFAULT_WAIT_AFTER_JOIN_MSEC (0) #define MCE_DEFAULT_THREAD_MODE (THREAD_MODE_MULTI) #define MCE_DEFAULT_BUFFER_BATCHING_MODE (BUFFER_BATCHING_WITH_RECLAIM) #ifndef VMA_IBV_ACCESS_ALLOCATE_MR #define MCE_DEFAULT_MEM_ALLOC_TYPE (ALLOC_TYPE_HUGEPAGES) #else #define MCE_DEFAULT_MEM_ALLOC_TYPE (ALLOC_TYPE_CONTIG) #endif #define MCE_DEFAULT_FORK_SUPPORT (true) #define MCE_DEFAULT_BF_FLAG (true) #define MCE_DEFAULT_CLOSE_ON_DUP2 (true) #define MCE_DEFAULT_MTU (0) #define MCE_DEFAULT_MSS (0) #define MCE_DEFAULT_LWIP_CC_ALGO_MOD (0) #define MCE_DEFAULT_INTERNAL_THREAD_AFFINITY (-1) #define MCE_DEFAULT_INTERNAL_THREAD_AFFINITY_STR ("-1") #define MCE_DEFAULT_INTERNAL_THREAD_CPUSET ("") #define MCE_DEFAULT_INTERNAL_THREAD_TCP_TIMER_HANDLING (INTERNAL_THREAD_TCP_TIMER_HANDLING_DEFERRED) #define MCE_DEFAULT_NETLINK_TIMER_MSEC (10000) #define MCE_DEFAULT_NEIGH_UC_ARP_QUATA 3 #define MCE_DEFAULT_NEIGH_UC_ARP_DELAY_MSEC 10000 #define MCE_DEFAULT_NEIGH_NUM_ERR_RETRIES 1 #define MCE_DEFAULT_TIME_MEASURE_NUM_SAMPLES (10000) #define MCE_DEFAULT_TIME_MEASURE_DUMP_FILE "/tmp/VMA_inst.dump" #define MCE_MIN_NUM_SGE (1) #define MCE_MAX_NUM_SGE (32) #define MCE_MIN_RX_NUM_POLLS (-1) #define MCE_MAX_RX_NUM_POLLS (100000000) #define MCE_MIN_RX_PREFETCH_BYTES (32) /* Just enough for headers (IPoIB+IP+UDP)*/ #define MCE_MAX_RX_PREFETCH_BYTES (2044) #define MCE_RX_CQ_DRAIN_RATE_DISABLED (0) #define MCE_CQ_DRAIN_INTERVAL_DISABLED (0) #define MCE_CQ_ADAPTIVE_MODERATION_DISABLED (0) #define MCE_MIN_CQ_POLL_BATCH (1) #define MCE_MAX_CQ_POLL_BATCH (128) #define MCE_DEFAULT_IPOIB_FLAG (1) #define MCE_DEFAULT_SOCKETXTREME (false) #ifdef DEFINED_TSO #define MCE_DEFAULT_TSO (true) #endif /* DEFINED_TSO */ #define MCE_DEFAULT_RX_POLL_ON_TX_TCP (false) #define MCE_DEFAULT_TRIGGER_DUMMY_SEND_GETSOCKNAME (false) #define MCE_ALIGNMENT ((unsigned long)63) #define RX_BUF_SIZE(mtu) ((mtu) + IPOIB_HDR_LEN + GRH_HDR_LEN) // RX buffers are larger in IB #define TX_BUF_SIZE(mtu) ((mtu) + 92) // Tx buffers are larger in Ethernet (they include L2 for RAW QP) #define NUM_TX_WRE_TO_SIGNAL_MAX 64 #define NUM_RX_WRE_TO_POST_RECV_MAX 1024 #define TCP_MAX_SYN_RATE_TOP_LIMIT 100000 #define DEFAULT_MC_TTL 64 #define IFTYPE_PARAM_FILE "/sys/class/net/%s/type" #define IFADDR_MTU_PARAM_FILE "/sys/class/net/%s/mtu" #define UMCAST_PARAM_FILE "/sys/class/net/%s/umcast" #define IPOIB_MODE_PARAM_FILE "/sys/class/net/%s/mode" #define VERBS_DEVICE_PORT_PARAM_FILE "/sys/class/net/%s/dev_port" #define VERBS_DEVICE_ID_PARAM_FILE "/sys/class/net/%s/dev_id" #define BONDING_MODE_PARAM_FILE "/sys/class/net/%s/bonding/mode" #define BONDING_SLAVES_PARAM_FILE "/sys/class/net/%s/bonding/slaves" #define BONDING_ACTIVE_SLAVE_PARAM_FILE "/sys/class/net/%s/bonding/active_slave" #define BONDING_FAILOVER_MAC_PARAM_FILE "/sys/class/net/%s/bonding/fail_over_mac" #define BONDING_XMIT_HASH_POLICY_PARAM_FILE "/sys/class/net/%s/bonding/xmit_hash_policy" #define BONDING_ROCE_LAG_FILE "/sys/class/net/%s/device/roce_lag_enable" /* BONDING_SLAVE_STATE_PARAM_FILE is for kernel > 3.14 or RH7.2 and higher */ #define BONDING_SLAVE_STATE_PARAM_FILE "/sys/class/net/%s/bonding_slave/state" #define L2_ADDR_FILE_FMT "/sys/class/net/%.*s/address" #define L2_BR_ADDR_FILE_FMT "/sys/class/net/%.*s/broadcast" #define OPER_STATE_PARAM_FILE "/sys/class/net/%s/operstate" #define RAW_QP_PRIVLIGES_PARAM_FILE "/sys/module/ib_uverbs/parameters/disable_raw_qp_enforcement" #define FLOW_STEERING_MGM_ENTRY_SIZE_PARAM_FILE "/sys/module/mlx4_core/parameters/log_num_mgm_entry_size" #define VIRTUAL_DEVICE_FOLDER "/sys/devices/virtual/net/%s/" #define BOND_DEVICE_FILE "/proc/net/bonding/%s" #define NETVSC_DEVICE_CLASS_FILE "/sys/class/net/%s/device/class_id" #define NETVSC_DEVICE_LOWER_FILE "/sys/class/net/%s/lower_%s/ifindex" #define NETVSC_DEVICE_UPPER_FILE "/sys/class/net/%s/upper_%s/ifindex" #define NETVSC_ID "{f8615163-df3e-46c5-913f-f2d2f965ed0e}\n" #define MAX_STATS_FD_NUM 1024 #define MAX_WINDOW_SCALING 14 #define VIRTUALIZATION_FLAG "hypervisor" extern bool g_b_exit; extern bool g_is_forked_child; extern bool g_init_global_ctors_done; #endif