Summary ¶
Fortigate 50E を入手して毎日負荷試験をする毎日を送ってる今日このごろです。
OpentWrt 23.05.2 で安定して使える帯域はどの程度なのか?を事前調査しておくべく試験をした。
今回のおもちゃの Fortigate 50E はメーカー公称で IPS 性能 350Mbps であるため NAT 性能もこのあたりで頭打ちになった。
それはいいとして IN/OUT の通知が TCP ではかなりばらつくことがあってとりあえずハードウェア割り込みの負荷軽減と最適化を目的にテストしてみた。結論としては弊宅の計測では限界性能の 350Mbps をきっちり流す可能性があるなら Software flow offloading
と irqbalance
を有効にし Packet Steering
は無効にするのが一番はフォーマンスが安定するようだ
検証項目 ¶
irqbalance ¶
Linux Kernel では ハードウェア割り込み(soft) を CPU0 のみで処理するのがデフォルト設定でマルチコア CPU の場合は負荷に偏りができる。これを解消するために irqbalance
を使う方法があり CentOS / RHEL などなどは組み込みで自動起動しているが OpenWrt 23.05.2 現在では組み込みではないため下記の手順で導入する
手元では下記のようにした
|
|
Packet Steering ¶
パケット処理を特定の CPU に向ける仕組み。こうすることでレイテンシーが低減する。またハードウェアに依存しない、ソフトウェア実装のため NIC に制限なく利用できる。
だが、 Fortigate 50E に搭載されている mvebu ではハードウェアスケージュールの都合で有効にする必要があるそうです。 2017年のコメントですが、現在の( 23.05.2)でも patch が残っていますのでテストします。
openwrt/target/linux/mvebu/patches-5.15/700-mvneta-tx-queue-workaround.patch at v23.05.2 · openwrt/openwrt
The kernel does not enable packet steering by default, so also disable in OpenWRT by default. (Though mvebu with its hardware scheduling issues [5] might want to enable packet steering by default.)
意訳: カーネルはデフォルトではパケット ステアリングを有効にしていないため、 OpenWRT ではデフォルトで無効になります。 (ただし、mvebu にはその ハードウェアのスケジューリングの問題 [5] により、パケットを有効にする必要がある場合があります デフォルトではステアリングが設定されています)。
― git.openwrt.org Git - openwrt/openwrt.git/commit
Network > Firewall > Routing/NAT Offloading ¶
Software flow offloading
: は netfilter によるオフロードの仕組みソフトウェア実装のためどの target でも利用できる利用する場合 CPU 負荷を下げることができるため設定する
設定は下記で可能1 2
uci set firewall.@defaults[0].flow_offloading='1' uci commit
Hardware flow offloading
: は HW が NAT のオフロードに対応していることが条件対応機種は MediaTek MT7621 のみ
Tests ¶
テスト条件
IPerf3: 3.9
Version:
OpenWrt 23.05.2 r23630-842932a63d
経路: 負荷試験NUC -> enp2s0 -> lan1 -> br-lan -> br-wan -> wan1 -> eno1 -> 負荷試験NUC
OpenWrt cofnig
1 2 3
opkg update opkg install htop sysstat opkg install irqbalance
Packages1
base-files busybox ca-bundle dnsmasq dropbear firewall4 fstools kmod-gpio-button-hotplug kmod-hwmon-nct7802 kmod-nft-offload libc libgcc libustream-mbedtls logd luci mtd netifd nftables odhcp6c odhcpd-ipv6only opkg ppp ppp-mod-pppoe procd procd-seccomp procd-ujail uboot-envtools uci uclient-fetch urandom-seed urngd htop sysstat
uci-defaults1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/env sh # DO NOT prefix 'uci' uci -q batch <<-EOF >/dev/null set network.wan=interface set network.wan.device='br-wan' set network.wan.proto='static' set network.wan.ipaddr='192.0.2.2' set network.wan.netmask='255.255.255.0' set network.wan.gateway='192.0.2.1' set system.@system[0].timezone='JST-9' commit EOF exit 0
本製品 Fortigate 50/52E の IPS 性能は 350Mbps 公称であるため下記のコマンドで iperf3 でテストする
|
|
同時に Console でアクセスし mpstat -P ALL 90
を実行し soft (ハードウェア割り込み) を記録した
- default: Factory Image
- Software flow offloading:
flow
- irqbalance:
irq
- Packet Steering:
RS
default | flow | irq | RS | flow + irq | irq + RS | flow + RS | flow + irq + RS | |
---|---|---|---|---|---|---|---|---|
Upload (Mbps) | 1.81 | 4.15 (+2.34) | 4.87 (+3.06) | 2.01 (+0.2) | 6.08 (+4.27) | 5.31 (+3.5) | 2.21 (+0.4) | 4.41 (+2.6) |
Download (Mbps) | 350.00 | 350.00 | 350.00 | 350.00 | 350.00 | 350.00 | 350.00 | 350.00 |
CPU all (soft) | 8.17 | 6.07 | 8.74 | 9.42 | 6.03 | 9.58 | 6.96 | 7.06 |
CPU 0 (soft) | 16.33 | 12.13 | 17.49 | 10.43 | 12.05 | 15.46 | 11.92 | 10.24 |
CPU 1 (soft) | 8.41 | 3.71 | 2.00 | 3.88 |
|
|
NAT throughput ¶
コマンド例
|
|
これを見る限り、 Received/Send の境目は 75Mbps 付近弊宅で実用に耐えるのは Received 200Mbps / Send 50Mbps あたりとなりそう