コンテンツにスキップ

アーキテクチャ

ACL の中心は AclOrch です。設定は CONFIG_DB から入り、APPL_DB を経由して AclOrchSAI ACL table、entry、counter に変換します。運用上の見え方は show aclaclshow ですが、失敗や capability は STATE_DB / COUNTERS_DB 側にも分かれます。

Table / Rule / Counter の流れ

flowchart TB
  CFGT[(CONFIG_DB<br>ACL_TABLE)] --> APP[(APPL_DB<br>ACL_TABLE_TABLE)]
  CFGR[(CONFIG_DB<br>ACL_RULE)] --> APP2[(APPL_DB<br>ACL_RULE_TABLE)]
  APP --> AO[AclOrch]
  APP2 --> AO
  AOTT[(CONFIG_DB<br>ACL_TABLE_TYPE)] --> AO
  AO --> SAI1[SAI ACL table]
  AO --> SAI2[SAI ACL entry]
  AO --> SAI3[SAI ACL counter]
  SAI3 --> FC[Flex counter]
  FC --> CDB[(COUNTERS_DB)]
  AO --> ST[(STATE_DB<br>ACL_TABLE_TABLE<br>ACL_RULE_TABLE)]

table は bind 先と stage を決め、rule は priority と action を決め、counter は rule hit を後から読めるようにします。ACL_TABLE_TYPE を使うと、組み込み type ではなくユーザ定義の match / action / bind point セットを ACL_TABLE.type から参照できます。

組み込み Type と拡張 Type

古い ACL は L3L3V6MIRROR などを AclOrch 内部の組み込み type として持ちます。新しい要求が増えると orchagent 改修と TCAM 消費が増えるため、ユーザ定義 table type では ACL_TABLE_TYPE に match、action、bind point を宣言します。

一方、MIRROR / MIRRORV6 のように特別な内部処理が必要な type は組み込みに残ります。L3V4V6 も組み込み type で、IPv4 と IPv6 rule を 1 つの SAI ACL table に同居させ、ASIC が対応する場合に TCAM 消費を抑える狙いがあります。

Flex Counter 化

ACL counter は rule ごとの packet / byte count を持ちます。以前は orchagent が固定周期で polling する設計でしたが、rule 数が増えると orchagent main loop を圧迫します。ACL flex counter 化により、polling は syncd 側の flex counter infrastructure に寄せられ、COUNTERS_ACL_COUNTER_RULE_MAP で rule 名から counter OID を引けるようになります。

運用者にとっての意味は、counterpoll acl の状態と interval が counter 表示の鮮度に影響することです。ACL 設定だけを見ていても counter が更新されない場合、flex counter 側を確認します。

CoPP Trap と Trap Flow Counter

CoPPCOPP_TRAPCOPP_GROUP を組み合わせ、trap ID 群を CPU queue / policer に割り当てます。Trap flow counter は hostif trap ごとに generic counter を bind し、trap 種別単位の packet / byte / PPS を観測します。

flowchart LR
  CT[(CONFIG_DB<br>COPP_TRAP)] --> CM[CoppMgr]
  CG[(CONFIG_DB<br>COPP_GROUP)] --> CM
  CM --> AP[(APPL_DB<br>COPP_TABLE)]
  AP --> CO[CoppOrch]
  CO --> HT[SAI hostif trap]
  CO --> HG[SAI trap group / policer]
  CO --> GC[SAI generic counter]
  GC --> TF[Flex counter group<br>FLOW_CNT_TRAP]
  TF --> CDB[(COUNTERS_DB)]
  CDB --> CLI[show flowcnt trap]

ACL counter が rule hit を見るのに対し、trap flow counter は CPU bound traffic の偏りを見ます。CoPP policer の調整や unexpected punt の調査では、ACL と別の入口として扱います。

関連ページ