5. Configuration Parameter Tuning¶
5.1. Introduction¶
This section provides a detailed explanation of the configuration parameters specific to the network/transport (L3/L4) layers that can be adjusted according to the needs of your application. Tweaking some of the configuration parameters in this section can drastically affect the performance of your mOS application.
Once a mOS application is launched, the mOS stack reads a mOS configuration file (named
mos.conf
by default) and initializes the underlying resources and spawns the
threads on behalf of the application.
Our setup.sh
script automatically creates a mos.conf
configuration file for
each sample application and places it in the /samples/(your app name)/config/
directory. The default values of the parameters mentioned in the file would work
out-of-the-box for 1/10 Gbps networks.
5.2. mOS Configuration Parameters¶
The following section explains the configuration parameters. The mos.conf
configuration file consists of a single parameter block named mos
block.
While some parameters are mandatory (required for running a mOS application),
others are optional.
5.2.1. mos
Parameter Block¶
A mos
parameter block contains the configuration parameters required
for fine-grained tuning of resource allocation/management and network
configuration of the monitor. There are ten parameters and four sub-blocks
a mos
block can hold:
- (Mandatory for DPDK)
nb_mem_channels
parameter specifies the number of memory channels per socket. Please refer to DPDK user guide, when you need to tune this parameter for performance optimization. - (Mandatory)
netdev
parameter block specifies the network interfaces (or device ports) used for mOS applications. Each line should contain the mapping of a network interface and CPU core mask. In the following example, it uses two DPDK-assisted network interfaces (dpdk0
anddpdk1
), and CPU cores 0~3 receive/transmit traffic from/to the first 4 (0~3) hardware queues of the NIC. We program our DPDK driver to use symmetric RSS algorithm to distribute traffic across the cores. This ensures that the same CPU gets to examine packets of both flows of the connection.
netdev {
dpdk0 0x000F
dpdk1 0x000F
}
- (Optional but recommended)
stat_print
parameter specifies the network interfaces which the application is interested in displaying runtime monitor statistics. In the example below, although there are two network interfaces, it will only print out the network statistics fordpdk1
.
netdev {
dpdk0 0x000F
dpdk1 0x000F
}
...
stat_print = dpdk1
- (Mandatory)
mos_log
parameter specifies the path to a directory where the mOS system writes extra logging data. - (Optional)
arp_table
parameter block specifies the static arp table entries. Although mOS retrieves arp table entries from the kernel during initialization stage, the user can add additional static arp table entries if he/she wants. Each line consists of destination IP address and destination MAC address. The following example shows how to set up user-space static arp table entries (If you don’t want static arp table setup, you can simply write an emptyarp_table
block.). Please note that the mOS networking core does not learn ARP entries dynamically.
arp_table {
10.0.0.3/32 00:1b:21:81:c1:8c
10.0.0.4/32 a0:36:9f:2c:c2:84
}
- (Optional)
route_table
parameter block specifies the static route table entries. Although mOS will retrieve the route table from kernel in the initialization stage, the user can add additional route table entries here. Each line consists of destination IP address and destination interface port. The following example shows how to set up the static route table (If you want no static route table setup, you can simply write an emptyroute_table
block.).
route_table {
10.0.0.0/24 dpdk0
}
- (Optional)
nic_forward_table
parameter block specifies the static Ethernet traffic forwarding rules when the mOS middlebox application is set in inline mode (Running Monitor Applications in Inline Mode). If enabled, each line accepts a pair of DPDK-registered NIC interfaces via which the traffic can later be forwarded in either direction. Each interface should have one-to-one mapping with another. In the example below, traffic is switched fromdpdk0
todpdk1
and vice versa. The middlebox is configured as a ‘bump-in-the-wire’.
nic_forward_table {
dpdk0 dpdk1
}
- (Optional)
forward
parameter specifies the global policy for forwarding packets in the monitoring applications. You can disable forwarding the packets (e.g., in passive monitoring setup) by puttingforward = 0
. [default value: 1]
Attention
Please set forward
parameter to zero for mOS TCP (mTCP) applications (e.g., epserver or
epwget), since they should not forward the incoming packets to the network. Even if you
set forward = 1
for mOS TCP (mTCP) applications, it will ignore the parameter and print
a warning message.
- (Optional)
max_concurrency
parameter specifies the maximum number of concurrent flows a middlebox can examine per CPU core. This parameter is used for preallocating the memory for flows. [default value: 100000] - (Optional)
no_ring_buffers
parameter determines whether the TCP ring buffer should be disabled. For mOS TCP (mTCP) applications, mOS always require the socket buffers for the application. For middlebox applications, you can disable the receive-side socket buffer by puttingno_ring_buffers = 1
. [default value: 0 (ring buffer is enabled by default)] - (Optional)
rmem_size
parameter specifies the size of receive buffer per socket in bytes [default value: 8192 B]. - (Optional)
wmem_size
parameter specifies the size of send buffer per socket in bytes [default value: 8192 B]. - (Optional)
tcp_tw_interval
parameter specifies the TCP timewait interval value in seconds. TCP timewait interval is the allowed time for a connection to be in theTIME_WAIT
state. For mOS TCP (mTCP) applications, you can set it as an arbitrary value larger than 0 to guarantee graceful shutdown. For monitoring applications, it is your choice to set this parameter. You may set it to 0 if you’re not interested in monitoring the flow afterTIME_WAIT
state. [default value: 0s] - (Optional)
tcp_timeout
parameter specifies the TCP timeout value in seconds. This parameter determines the maximum allowed time for any flows to exist without any packet reception. In other words, mOS middlebox stops monitoring the connection aftertcp_timeout
period. You can settcp_timeout = -1
to disable the timeout checking. For mOS TCP (mTCP) applications,tcp_timeout
serves as a timeout period for connections that are in active open states (SYN_SENT states). [default value: 30s]