Network パフォーマンステストの 仕方をまとめる

Summary

ネットワークパフォーマンステストは「何をテストしたいか?」でかなーーーーーり変わるため一概にこれがいいという方法がないのが難しい。一般的には Speedtest.net などのサービスで手軽にインターネットの速度を計測することではないだろうか?

インターネットのトラヒックはパケットサイズが均等になることは少なく(トンネリングやカプセル化されてればなるかも)広義では IMIX (Internet Mix Traffic) という考えがある。これは IX 事業者が自社がフォワーディングするフレーム長の統計を調べた所 1500 Byte の MTU に対して平均して 354 Byte ぐらいがインターネットを流れるフレームの平均でありそうという研究から来ている。

テスト環境

今回仮想環境でテスト環境を用意しようとしたがテストしたい機材は基本的に物理機器であるのとブリッジインターフェースなどの影響を受けるのは本望ではないため初代自宅サーバーの DMAF5 を引っ張り出してきて Ubuntu 22.04 をインストール、 1GbE のテストなら耐えてくれると信じている.

Interface の割当は下記である

Linux driverDescription
eno1r8168Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
enp2s0r8168Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
enxc436c0ea7158ax88179_178a管理アクセス用

またテスト環境では eno1, enp2s0 を利用してテストする
コレを書いてこのハードウェアの持病を思い出したので r8168 ドライバーをインストールした

bash
1
2
3
4
5
apt update && apt install -y r8168-dkms
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf
rmmod r8169
modprobe r8168
reboot
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
root@iperf-01:~# cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.4 LTS"
PRETTY_NAME="Ubuntu 22.04.4 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.4 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
root@iperf-01:~# lspci 
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 IOMMU
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:01.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge [6:0]
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge [6:0]
00:01.3 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge [6:0]
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
00:08.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 61)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Device 24: Function 7
01:00.0 Non-Volatile memory controller: Phison Electronics Corporation PS5013 E13 NVMe Controller (rev 01)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
04:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] (rev c2)
04:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Raven/Raven2/Fenghuang HDMI/DP Audio Controller
04:00.2 Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor
04:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Raven USB 3.1
04:00.4 USB controller: Advanced Micro Devices, Inc. [AMD] Raven USB 3.1
04:00.5 Multimedia controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir Audio Processor
04:00.6 Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller
04:00.7 Non-VGA unclassified device: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver
05:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 61)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
root@iperf-01:~# ethtool -i eno1
driver: r8168
version: 8.049.02-NAPI
firmware-version: 
expansion-rom-version: 
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

root@iperf-01:~# ethtool -i enp2s0
driver: r8168
version: 8.049.02-NAPI
firmware-version: 
expansion-rom-version: 
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no

root@iperf-01:~# ethtool -i enxc436c0ea7158
driver: ax88179_178a
version: 5.15.0-97-generic
firmware-version: 
expansion-rom-version: 
bus-info: 2-4:1.0
supports-statistics: no
supports-test: no
supports-eeprom-access: yes
supports-register-dump: no
supports-priv-flags: no

iperf3

テストスクリプト

1
2
curl -fSL -o iperf3run.sh https://raw.githubusercontent.com/naa0yama/iperf3/main/iperf3run.sh
chmod +x iperf3run.sh

Interface 設定

VRF でルートを分けておく

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo ip link add dev vrf-wan type vrf table 10
sudo ip link set dev vrf-wan mtu 1500
sudo ip link set dev vrf-wan up
sudo ip link set dev eno1 master vrf-wan

sudo ip addr add 192.0.2.1/24 dev eno1
sudo ip link set eno1 up

sudo ps auxf | grep iperf3
sudo ip vrf exec vrf-wan iperf3 --server --json --bind 192.0.2.1 &
1
2
3
4
# OpenWrt 側で

opkg install sysstat
mpstat -P ALL -o JSON 60 | tee mpstat_$(date '+%Y-%m-%dT%H%M').json
1
2
3
export OPENWRT_VERSION=r23630-842932a63d

./iperf3run.sh r23630-842932a63d

完了すると実行したディレクトリー配下に yyyy-mm-ddThhss のディレクトリーが掘られて各テスト結果、 tar.gz で圧縮されたデータが手に入る。また、 jq で results.csv に必要そうな情報をまとめたのでそれもみてみるとよい。

参考情報

  • --bidir
    • test in both directions (normal and reverse), with both the client and server sending and receiving data simultaneously
Built with Hugo
テーマ StackJimmy によって設計されています。