cfg_veth() {
ip netns add "${PEER_NS}"
ip -netns "${PEER_NS}" link set lo up
ip link add type veth
ip link set dev veth0 up
ip addr add dev veth0 192.168.1.2/24
ip addr add dev veth0 2001:db8::2/64 nodad
ip link set dev veth1 netns "${PEER_NS}"
ip -netns "${PEER_NS}" addr add dev veth1 192.168.1.1/24
ip -netns "${PEER_NS}" addr add dev veth1 2001:db8::1/64 nodad
ip -netns "${PEER_NS}" link set dev veth1 up
ip netns exec "${PEER_NS}" ethtool -K veth1 gro on
}
run_one() { # use 'rx' as separator between sender args and receiver args
local -r all="$@"
local -r tx_args=${all%rx*}
local -r rx_args=${all#*rx}
local ret=0
cfg_veth
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 100 ${rx_args} &
local PID1=$!
run_one_nat() { # use 'rx' as separator between sender args and receiver args
local addr1 addr2 pid family="" ipt_cmd=ip6tables
local -r all="$@"
local -r tx_args=${all%rx*}
local -r rx_args=${all#*rx}
local ret=0
if [[ ${tx_args} = *-4* ]]; then
ipt_cmd=iptables
family=-4
addr1=192.168.1.1
addr2=192.168.1.3/24 else
addr1=2001:db8::1
addr2="2001:db8::3/64 nodad" fi
cfg_veth
ip -netns "${PEER_NS}" addr add dev veth1 ${addr2}
# fool the GRO engine changing the destination address ...
ip netns exec "${PEER_NS}" $ipt_cmd -t nat -I PREROUTING -d ${addr1} -j DNAT --to-destination ${addr2%/*}
# ... so that GRO will match the UDP_GRO enabled socket, but packets # will land on the 'plain' one
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -G ${family} -b ${addr1} -n 0 &
local PID1=$!
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 100 ${family} -b ${addr2%/*} ${rx_args} &
local PID2=$!
run_one_2sock() { # use 'rx' as separator between sender args and receiver args
local -r all="$@"
local -r tx_args=${all%rx*}
local -r rx_args=${all#*rx}
local ret=0
cfg_veth
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 100 ${rx_args} -p 12345 &
local PID1=$!
ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 2000 -R 100 ${rx_args} &
local PID2=$!
# explicitly check we are not receiving UDP_SEGMENT cmsg (-S -1) # when GRO does not take place
run_test "no GRO chk cmsg""${ipv4_args} -M 10 -s 1400""-4 -n 10 -l 1400 -S -1"
check_err $?
# the GSO packets are aggregated because: # * veth schedule napi after each xmit # * segmentation happens in BH context, veth napi poll is delayed after # the transmission of the last segment
run_test "GRO""${ipv4_args} -M 1 -s 14720 -S 0 ""-4 -n 1 -l 14720"
check_err $?
run_test "GRO chk cmsg""${ipv4_args} -M 1 -s 14720 -S 0 ""-4 -n 1 -l 14720 -S 1472"
check_err $?
run_test "GRO with custom segment size""${ipv4_args} -M 1 -s 14720 -S 500 ""-4 -n 1 -l 14720"
check_err $?
run_test "GRO with custom segment size cmsg""${ipv4_args} -M 1 -s 14720 -S 500 ""-4 -n 1 -l 14720 -S 500"
check_err $?
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.