ER-XのPPPoEスループット
家庭用として使うときは、PPPoE接続時におけるNATとfirewallありでのスループットが性能の目安になるかと思います。今回はこれを計測してみました。
計測環境
CentOS7 Aをクライアント、CentOS7 Bをサーバーにし、iperf3を実行しスループットの測定を行います。テストに使うPPPoEサーバーはMikrotik社のソフトウェアアプライアンス CHR(Cloud Hosted Router)のv6.44.3を使いました。フレッツ環境を意識し、PPPoEサーバーのMTUは1454に設定しています。基本Basic Setupのものですが、MSS clampingを入れるため、以下の設定を追加で入れています。
set firewall modify MSS_CLAMPING_PPPoE rule 10 action modify set firewall modify MSS_CLAMPING_PPPoE rule 10 modify tcp-mss 1414 set firewall modify MSS_CLAMPING_PPPoE rule 10 protocol tcp set firewall modify MSS_CLAMPING_PPPoE rule 10 tcp flags SYN set interfaces ethernet eth0 pppoe 0 firewall in modify MSS_CLAMPING_PPPoE set interfaces ethernet eth0 pppoe 0 firewall out modify MSS_CLAMPING_PPPoE
EdgeRouterやLinuxのiptablesに慣れていないと、なぜfirewallの設定として入れるのか???ですが(私も最初は戸惑いました)、EdgeRouterのfirewallは実質的にはLinuxのiptablesであり、EdgeRouterのfirewall modifyはiptalbesのmangleテーブルの処理に相当します。パケットの書き換えは(MSS clampingもその一種)はiptablesではmangleテーブルでの処理となり、EdgeRouterではfirewall modifyで処理することとなります。firewall modifyというネーミングは相当イマイチです・・・。
検証に使うER-Xのファームウェアはv1.10.9となります。
計測結果
CentOS7 Aでのiperf3の実行結果が以下となります。-Mオプションを使ってMSSを変えてテストを行っています。消費電力はTAP-TST10での目測値で無負荷時は2.6Wとなります。先ずはoffloadなしで。
offloadなしの場合 | receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1414(指定なし) | 203 | 53% | 3.3W | 172 | 33% | 3.2W |
1200 | 169 | 51% | 3.4W | 173 | 52% | 3.3W |
800 | 113 | 50% | 3.3W | 114 | 52% | 3.3W |
400 | 47.7 | 33% | 3.2W | 40 | 35% | 3.2W |
やはりoffloadがないとNAT+firewallの結果と同様冴えない結果です。次はhwnat=enableで計測します。
offloadありの場合 | receiver | sender | ||||
MSS | Mbps | CPU | 消費電力 | Mbps | CPU | 消費電力 |
1414(指定なし) | 928 | 0% | 2.7W | 900 | 0% | 2.7W |
1200 | 911 | 0% | 2.7W | 882 | 0% | 2.7W |
800 | 873 | 0% | 2.7W | 827 | 0% | 2.7W |
400 | 761 | 0% | 2.7W | 689 | 0% | 2.7W |
NATやstateful firewallに加えてPPPoEを入れてもあまりスループットが悪化しません。
にくいね、ER-X
ただ一つ気になるのは、MSS 800byteやMSS 400byteのsenderのケースで、60秒間のiperf3でretrがそれぞれ5000、14000とかなり発生しています。
ER-XのConfig
テストに使ったconfigは、基本Basic Setupで設定したものに、先に説明のMSS Clampingとhwnatだけ追加設定をしたものとなります。
set firewall modify MSS_CLAMPING_PPPoE rule 10 action modify set firewall modify MSS_CLAMPING_PPPoE rule 10 modify tcp-mss 1414 set firewall modify MSS_CLAMPING_PPPoE rule 10 protocol tcp set firewall modify MSS_CLAMPING_PPPoE rule 10 tcp flags SYN set firewall name WAN_IN default-action drop set firewall name WAN_IN description 'WAN to internal' set firewall name WAN_IN rule 10 action accept set firewall name WAN_IN rule 10 description 'Allow established/related' set firewall name WAN_IN rule 10 state established enable set firewall name WAN_IN rule 10 state related enable set firewall name WAN_IN rule 20 action drop set firewall name WAN_IN rule 20 description 'Drop invalid state' set firewall name WAN_IN rule 20 state invalid enable set firewall name WAN_LOCAL default-action drop set firewall name WAN_LOCAL description 'WAN to router' set firewall name WAN_LOCAL rule 10 action accept set firewall name WAN_LOCAL rule 10 description 'Allow established/related' set firewall name WAN_LOCAL rule 10 state established enable set firewall name WAN_LOCAL rule 10 state related enable set firewall name WAN_LOCAL rule 20 action drop set firewall name WAN_LOCAL rule 20 description 'Drop invalid state' set firewall name WAN_LOCAL rule 20 state invalid enable set interfaces ethernet eth0 description 'Internet (PPPoE)' set interfaces ethernet eth0 duplex auto set interfaces ethernet eth0 pppoe 0 default-route auto set interfaces ethernet eth0 pppoe 0 firewall in modify MSS_CLAMPING_PPPoE set interfaces ethernet eth0 pppoe 0 firewall in name WAN_IN set interfaces ethernet eth0 pppoe 0 firewall local name WAN_LOCAL set interfaces ethernet eth0 pppoe 0 firewall out modify MSS_CLAMPING_PPPoE set interfaces ethernet eth0 pppoe 0 mtu 1454 set interfaces ethernet eth0 pppoe 0 name-server auto set interfaces ethernet eth0 pppoe 0 password test set interfaces ethernet eth0 pppoe 0 user-id ppp1 set interfaces switch switch0 address 192.168.100.1/24 set interfaces switch switch0 description Local set interfaces switch switch0 mtu 1500 set interfaces switch switch0 switch-port interface eth1 set interfaces switch switch0 switch-port interface eth2 set interfaces switch switch0 switch-port interface eth3 set interfaces switch switch0 switch-port interface eth4 set interfaces switch switch0 switch-port vlan-aware disable set service nat rule 5010 description 'masquerade for WAN' set service nat rule 5010 outbound-interface pppoe0 set service nat rule 5010 type masquerade set system offload hwnat enable