[Mikrotik] RouterOSにおけるFast PathやRoute cacheについて

2019-04-08 10:48:09mikrotikfast path, Fasttack, Mikrotik, normal path, route cache, RouterOS, slow path, パフォーマンス

RouterOSを使用するうえでFast Pathを有効にするというのは欠かせない設定要素になります。この辺りをしっかりと抑えておかないと、思ったよりもパフォーマンスが発揮できない、ということにもなりかねませんので注意が必要です。

最初に

ちなみにFast Pathとは以下の機能のことを言います。

Linuxカーネルでの追加処理なしでパケットを転送することで、CPUへの負荷なくスループットを向上させるというものです。

この手の機能についてはRouterOSだけでなく、YAMAHAさんなどでも実装されています。

Fast Pathが使用されない状態については、Normal Path、またはSlow Pathと呼ばれ、パケット処理が逐次CPUで処理されることになり、CPU負荷が大きくなり結果としてスループットが低下する状態のことになります。

またブラウジングの際にも逐次CPU処理されることから、切り替え等に時間がかかることになり思いのほかストレスに感じることにもなると思います。上位機種であるCloud Core Routerでもかなり違うので驚かれることにもなるでしょう。

ただし、基本的にはこの設定が有効になるような設定にはなっているはずです。ちなみにFast Pathが有効になる条件は結構面倒くさかったりします。

Fast Path

IPv4 handler

IPv4 fast path is automatically used if following conditions are met:

  • firewal rules are not configured;
  • firewall address lists are not configured;
  • Traffic flow is disabled /ip traffic-flow enabled=no restriction removed in 6.33;
  • Simple and queue trees with parent=global are not configured;
  • no mesh, metarouter interface configuration;
  • sniffer, torch and traffic generator is not running;
  • connection tracking is not active;
  • ip accounting is disabled (/ip accounting enabled=no);
  • VRFs are not set (/ip route vrf is empty);
  • Hotspot is not used (/ip hostspot has no interfaces);
  • IpSec policies are not configured (ROS v6.8);
  • no active mac-ping, mac-telnet or mac-winbox sessions restriction removed in 6.33;
  • /tool mac-scan is not actively used;
  • /tool ip-scan is not actively used;
  • route cache must be enabled

/ip firewall connection tracking set enabled parameter has new auto value Which means that connection tracking is disabled by default until firewall rules are added.

Bridge handler

Bridge fast path is automatically used if following conditions are met:

  • bridge VLAN filtering is disabled,
  • no bridge firewall rules (/interface bridge filter, /interface bridge nat) are configured,
  • /interface bridge settings use-ip-firwall=no,
  • no mesh, metarouter interface configuration,
  • sniffer, torch and traffic generator is not running,

結構条件が多いということで驚かれると思います。ただ基本的に最初の、Firewallルールが設定されていないこと、というのでルーターとして設定している場合はFast Pathが使用できないことになるので、多くの人にはこの恩恵に預かれないことになります。

Fasttrack

Fast Pathをさらに推し進めたものになるのがFasttrackと呼ばれる、RouterOS独自の機能になります。

IPv4 FastTrack is active if following conditions are met:

  • no mesh, metarouter interface configuration;
  • sniffer, torch and traffic generator is not running;
  • no active mac-ping, mac-telnet or mac-winbox sessions restriction removed in 6.33;
  • /tool mac-scan is not actively used;
  • /tool ip-scan is not actively used;
  • FastPath and Route cache is enabled under IP/Settings
/ip firewall filter add chain=forward action=fasttrack-connection connection-state=established,related 
/ip firewall filter add chain=forward action=accept connection-state=established,related 

wikiにも参考値が書かれていますが、CPUの負荷を抑えた状態で、Fast Pathからさらにスループットの向上が図られているのが分かると思います。この辺りもルーター環境で使用できれば嬉しいのですが以下のような制約があり難しい状態です。

Note that not all packets in a connection can be FastTracked, so it is likely to see some packets going through slow path even though connection is marked for FastTrack. This is the reason why fasttrack-connection is usually followed by identical action=accept rule. FastTracked packets bypass firewall, connection tracking, simple queues, queue tree with parent=global, ip traffic-flow(restriction removed in 6.33), IP accounting, IPSec, hotspot universal client, VRF assignment, so it is up to administrator to make sure FastTrack does not interfere with other configuration;

firewallやconnection tracking、simple queues、親にGlobalを持つqueue treeがある場合は、Fasttrackをすり抜けるため、通常のパケット処理で処理されるので、FasttrackについてもL3スイッチとして負荷の大きいところに設定する、というのが使い方になるでしょう。

Route cache

Linuxにおけるkernelのパラメータのひとつですね。詳細については以下を確認してください。

RouterOSにおいてはデフォルトでenableであり、Route cacheを無効にすると、Fast Pathも無効になります。

パケットの送受信で参照されたルーティングエントリはルートキャッシュにキャッシュして次から素早くルーティングエントリを検索できるようになるため、多数のクライアントがつながっている環境や、頻繁にブラウジングするような環境であれば、特に効いてくる設定になるかと思います。

この辺りの動作について詳しく知りたい場合は、Wikiにパケット処理のフローについての記述があるので確認してみるとよいと思います。

ちなみにRoute cacheの状態は以下のコマンドで確認することができます。

[] > /ip route cache print interval=2s 
cache-size: 1001 
max-cache-size: 262144 
-- [Q quit|D dump|C-z pause]

余談

ここからは余談というか実は本編だったりするのですが、RouterOS機器をルーターとして使用している場合、IPv4でPPPoEを使用する環境だとFast Pathが有効になるのでパフォーマンスにそれほど気にすることはないのですが、IPv6環境、すなわちIPoEやDS-liteを使用するときには注意が必要です。

というのも上にも書きましたが、Fast Pathが有効になる条件の中にはIPv6 handlerはありません。なので基本的には全てslow Pathで処理されます。さらに問題になるパラメータがありましてそれが以下のパラメータです。

ip_settings

ip > settings の設定項目ですが、デフォルトだとAllow Fast PathRoute cacheが有効の状態です。しかし、上でも書いたようにIPv6を使用するような環境だと、Fast Pathは有効にならないはずです。

ではこの場合何が問題かといいますと、Route cacheが正常に動作していないようです。明らかにルーティングテーブルをなぜかlookupしているような動作している状態になり、おいおいバグじゃねーのかよ、となるところなので、現在Mikrotik側に確認中です。

ついでにいうと、Allow Fast Pathを有効にし、Route cacheを無効でも同程度に速度は確保出来るっぽいのですが、Route cacheが使えないのに、なんで速度が先のものと変わらないのか説明がつかないので、こちらについても併せて確認中です。

とにかく、RouterOSを搭載したRouterboardをルーターとして使用するのであれば、以下のように設定するのが良いと思われます。

  • Allow Fast Path: no
  • Route cache: yes
/ip settings set accept-source-route=yes allow-fast-path=no