# 2.49. UFSキャッシュの設定

UFSキャッシュ（Unified Forwarding Service Cache）は、フィルタ、NAT/NAPT、IPsecなどのサービスを使用している場合に有効な高速フォワーディングキャッシュメカニズムであり、UNIVERGE IX-R/IX-V シリーズの独自機能です。 UFSキャッシュにより、フィルタの多段設定、IPsecの複数設定等におけるスケーラビリティを向上させます。

## 2.49.1. 概要

フィルタやIPsecでは、パケットに応じてどの設定を有効にするかを決定するために、それぞれにパケット検索処理やその結果を保持するキャッシュを持っています。 通常これらは機能毎にそれぞれ独立に動作し、その検索結果に基づいて処理が行われています。

ここで、パケットの受信から送信までの間に各サービスで行われていた検索処理を1回で済ませることができれば、検索時間を大幅に短縮することができると考えられます。 UFSキャッシュは、複数のサービスで行っていた検索を一元化し、複数サービスの検索結果を統合します。フォワーディング処理における複数サービスの統合したキャッシュを用いることから、UFSキャッシュ（Unified Forwarding Service Cache）と呼んでいます。

以下の機能がUFSキャッシュに対応しています。

- スタティックフィルタの検索結果（通過or廃棄）

- NAT/NAPTキャッシュ（変換アドレスなど）

- IPsecの各種検索結果（SAなど）

- ルーティングキャッシュ情報（出力インタフェースなど）

- ポリシールーティング情報（出力インタフェースなど）

- QoS情報（クラス、キュー、マーキング・カラーリング情報など）

- ダイナミックフィルタ情報（通過キャッシュ情報など）

- データコネクト（送信先アドレス、ポートなど）

- ダイナミックVPN情報

## 2.49.2. 動作原理

UFSキャッシュでは、プロトコルごとに下記の条件に基づきパケットを分別します。

注釈

以下で、IPv6の場合にはTOSではなくTraffic classです。

- TCP

  プロトコル | 送信元アドレス/ポート | 送信先アドレス/ポート | TOS | TCP-flag

- UDP

  プロトコル | 送信元アドレス/ポート | 送信先アドレス/ポート | TOS

- ESP(IPSEC)

  プロトコル | 送信元アドレス | 送信先アドレス | TOS | SPI

- GRE

  プロトコル | 送信元アドレス | 送信先アドレス | TOS | GRE-flag | GRE-Key

- TCP/UDP/ESP/GRE/ICMP以外

  プロトコル | 送信元アドレス | 送信先アドレス | TOS

- ICMP

  > 使われません（判定処理の増加に対する効果が小さいため）

- COS

- qos-group（QoSの項を参照してください）

フローごとに上記のサービスの情報を１つのUFSキャッシュに登録するため、パケット受信時に最初に1度だけ検索処理を行えば、その時点でパケットがどのように処理されるかが決定されます。 UFSキャッシュを使用しない場合には、それぞれのサービスで繰り返しキャッシュを検索する必要が生じます。

以下にUFSキャッシュが有効/無効の場合のフォワーディング処理を図示します。

図 2.49.1 UFSキャッシュフォワーディング処理

注釈

UFSキャッシュは、自装置が送信元となるパケットには適用されません。IPsecはトランスポートの場合には適用されませんので、ご注意ください。

## 2.49.3. UFSキャッシュの設定

UFSキャッシュの設定は次のコンフィグを使用します。 IPv4/IPv6は個別に設定します。

IPv4コンフィグ

> 項目 | 説明
> --- | ---
> ip ufs-cache hash | IPv4 UFSキャッシュのハッシュサイズ変更 （インタフェースコンフィグモード）
> ip ufs-cache max-entries | IPv4 UFSキャッシュの最大エントリ数設定 （グローバルコンフィグモード）
> ip ufs-cache timeout | IPv4 UFSキャッシュのタイムアウト設定 （インタフェースコンフィグモード）
> show ip ufs-cache | IPv4 UFSキャッシュの表示
> clear ip ufs-cache | IPv4 UFSキャッシュの消去

IPv6コンフィグ

> 項目 | 説明
> --- | ---
> ipv6 ufs-cache hash | IPv6 UFSキャッシュのハッシュサイズ変更 （インタフェースコンフィグモード）
> ipv6 ufs-cache max-entries | IPv6 UFSキャッシュの最大エントリ数設定 （グローバルコンフィグモード）
> ipv6 ufs-cache timeout | IPv6 UFSキャッシュのタイムアウト設定 （インタフェースコンフィグモード）
> show ipv6 ufs-cache | IPv6 UFSキャッシュの表示
> clear ipv6 ufs-cache | IPv6 UFSキャッシュの消去

注釈

UFSキャッシュは常に有効のため ip/ipv6 ufs-cache enable の設定はありません。

## 2.49.4. UFSキャッシュの表示

UFS キャッシュの表示方法は以下のとおりです。

> 項目 | 説明
> --- | ---
> show ip ufs-cache show ipv6 ufs-cache | 有効なキャッシュのみを簡易表示します。
> show ip ufs-cache verbose show ipv6 ufs-cache verbose | 無効となったキャッシュを含め、詳細に表示します。
> show ip ufs-cache entries show ipv6 ufs-cache entries | インタフェース毎のキャッシュ表示数を制限します。 ※ 0を指定時はヘッダ情報のみ表示します。

注釈

表示内容については、統計情報一覧を参照してください

### 2.49.4.1. 無効キャッシュ

タイムアウトもしくは、UFSキャッシュを利用している機能から無効と宣言されたキャッシュは即時に削除せず、無効キャッシュとなります。 無効キャッシュは約2分を周期としたUFSキャッシュクリア機構によって順次削除されます。無効キャッシュ時のキャッシュには、以下の特徴があります。

- show ip/ipv6 ufs-cache verbose でUFSキャッシュを表示させたとき、「Codes: D - Scheduled to delete」で表示されます。

- 無効キャッシュに対し、パケットが検索マッチした場合、そのキャッシュに含まれるすべての情報をクリアした上で、有効なキャッシュになります。ただし、ヒットカウントやアップタイムはクリアしません。（show ip ufs-cache では、無効キャッシュ時は表示されないため、有効キャッシュに戻ることによって、アップタイムの大きなキャッシュが突然表示されるように見えますが、問題ではありません。）

### 2.49.4.2. ハッシュテーブルサイズの拡張について

項目 | 説明
--- | ---
ip ufs-cache hash | IPv4 UFSキャッシュのハッシュサイズ変更 （インタフェースコンフィグモード）
ipv6 ufs-cache hash | IPv6 UFSキャッシュのハッシュサイズ変更 （インタフェースコンフィグモード）

UFSキャッシュの最大エントリ数をデフォルト値以上に拡張する場合において、特定のインタフェースで生成されるキャッシュが下記に記載のキャッシュ数を超えている場合、該当インタフェースのハッシュサイズを拡張すると性能向上することがあります。 （特定のインタフェースに入力するフローが倍の10万エントリになる場合は、ハッシュテーブルサイズも倍の4096などにすることで効果が得られる場合があります。）

> ハッシュテーブルサイズ | インタフェースあたりのメモリサイズ | インタフェースあたりのキャッシュ拡張目安
> --- | --- | ---
> 1024 | 8,192 bytes/interface | 32,768 caches/interface
> 2048 | 16,384 bytes/interface | 65,536 caches/interface
> 4096 | 32,768 bytes/interface | 100,000 caches/interface
> 8192 | 65,536 bytes/interface | 200,000 caches/interface

注釈

- 本設定は、ハッシュサイズを変更しないと特に問題が発生するものではなく、最大キャッシュサイズ付近で運用時のパフォーマンス改善の参考となります。

- 最大キャッシュ数を仕様制限内で利用するかぎりは設定変更の必要はありません。（最大キャッシュ数を最大値の40,000に設定していてもインタフェースあたりのキャッシュ数が25,000を超えることはほぼないため）

- IPsecなどトンネルインタフェースが大量に存在する場合に、一律にハッシュテーブルサイズを拡張するとメモリ枯渇の原因となります。あくまでも該当インタフェースに上記を目安とした多くのフローが同時に入力される場合にのみ拡張してください。